Sujet :

Facture

Cucur
   Posté le 19-03-2014 ŕ 07:53:55   

Sub boite_archivage()
'1)
If MsgBox("Voulez-vous archiver la facture " & Range("nf" & "?", vbQuestion + vbYesNo, "Archiver Facture" = vbYes Then
'=>2A
'Ouvrir boite de dialogue - poser la question + concatener + réponse oui ou non
'yes : macro verif / no : macro boite_effacer
verif

Else

'=>2A1B2
boite_effacer


End If

End Sub

Sub verif()
'2A)

If Application.WorksheetFunction.CountIf(Range("liste_nf"), Range("nf")) <> 0 Then
'Si nb.si(liste_nf;nf)<> 0
'Si oui : macro boite_deja_archivée
'si non : macro archive_fact
'=>2A2
boite_deja_archive
Else

'=>2A1
archive_fact
End If

End Sub

Sub boite_deja_archive()
'2A1)

If MsgBox("Une facture N°" & Range("nf" & " a déjà été archivée, voulez-vous l'écraser ?", vbExclamation + vbYesNo, "Facture déjà archivée" = vbYes Then
'Ouvre une boite de dialogue pour proposer l'écrasement de la facture, point d'interrogation, option question oui non, titre "facture déjà archivée"
'oui : macro ecraser
'non : macro renumeroter
'=>2A1A
ecraser
Else

'=>2A1B
renumeroter
End If

End Sub

Sub ecraser()
'2A1A)
Sheets("archive_fact").Select
Range("A1").Select
'sélection feuille archive fact, cellule A1
Do While ActiveCell <> Range("nf"
ActiveCell.Offset(1, 0).Select
Loop
'Tant que la cellule active est différente de la cellule "nf", on sélectionne la cellule une ligne en dessous, sans changer de colonne
'Quand elle est égale à "nf", les commandes suivent
ActiveCell.Offset(0, 1) = Range("nc"
ActiveCell.Offset(0, 2) = Range("date_fact"
'On se décale d'une colonne, et on copie le résultat de la cellule "nc" dans cette cellule
'On se décale de deux colonnes, et on copie le résultat de la cellule "date_fact" dans cette cellule
Sheets("archive_detail_fact").Select
Range("A1").Select
'On se place ensuite dans la feuille "archive_fact, cellule A1
Do While ActiveCell <> Range("nf"
ActiveCell.Offset(1, 0).Select
Loop
'On descend dans d'une ligne tant que la cellule active n'est pas égale à la cellule "nf"
Dim numligne
numligne = ActiveCell.Row
'On nomme une variable "numligne" qui devient la ligne de la cellule active.
Do While ActiveCell = Range("nf"
Rows(numligne & ":" & numligne).Delete
Loop
'Quand la cellule active est égale à "nf", on efface la ligne entière
'Il va supprimer les lignes qui vont de numligne à numligne
'On recommence jusqu'à la condition contraire

'=>2A2a
archive_detail_fact
'On passe ensuite à la macro archive_detail_fact
End Sub

Sub renumeroter()
'2A1B)
If MsgBox("Voulez-vous re-numéroter la facture ?", vbQuestion + vbYesNo, "Re-numéroter la facture" = vbYes Then
'Ouverture boite de dialogue, question numéroter la facture, point d'interrogation, oui non, titre
'oui : macro nouveau_num
'non : macro boite effacer
'=>2A1B
nouveau_num
Else

'=>2A1B2)
boite_effacer
End If

End Sub

Sub nouveau_num()
'2A1B1)

Range("nf" = Application.WorksheetFunction.Max(Range("liste_nf")) + 1
'On modifie la cellule "nf" : on va chercher le numéro maximum dans la colonne "liste_nf", et on lui rajoute une unité qui devient le résultat de la cellule "nf"

End Sub

Sub boite_effacer()
'2A1B2)
If MsgBox("Voulez-vous effacer la facture", vbQuestion + vbYesNo, "Effacer la facture" = vbYes Then
'Boite dialogue, question, point d'interrogation, oui non
'oui : effacer_variable
'non : rien du tout
'=>2A1B2A
effacer_variables
Else

Exit Sub

End If
End Sub

Sub effacer_variables()
'2A1B2A)
Range("nc,A14:A24,E14:E24").ClearContents
'On sélectionne les cellules nc, A14 à A24, E14 à E24, et on efface leur contenu

End Sub

Sub archive_fact()
'2A2)
Sheets("archive_fact").Select
Range("A1").Select
'On sélectionne la feuille "archive_fact, cellule A1
Do While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Loop
'Tant que la cellule active n'est pas vide, sélectionner la cellule active +1 ligne et recommencer jusqu'à la condition contraire
ActiveCell = Range("nf"
ActiveCell.Offset(0, 1) = Range("nc"
ActiveCell.Offset(0, 2) = Range("date_fact"
'Quand on trouve une cellule vide, cellule active devient cellule "nf"
'Décalage d'une colonne, même ligne, devient nc
'Décalage de deux colonnes, même ligne, devient "date_fact"
archive_detail_fact
'On lance ensuite la macro archive_detail_fact
End Sub

Sub archive_detail_fact()
'2A2a)
Sheets("archive_detail_fact").Select
Range("A1").Select
'Sélectionne la page archive_detail_fact, cellule A1
Do While ActiveCell <> ""
ActiveCell.Offset(1, 0).Select
Loop
'Tant que la cellule active n'est pas vide, on descend d'une ligne
Sheets("Facture").Select
Range("A14").Select
'Quand la cellule est vide, on part sur la feuille Facture, cellule A14
Dim ref, qte, puht
'On définit comme variable ref, qte, puht
Do While ActiveCell <> ""
ref = ActiveCell
qte = ActiveCell.Offset(0, 4)
puht = ActiveCell.Offset(0, 5)
'Tant que la cellule n'est pas vide, la cellule active devient ref
'la cellule à 4 colonnes, même ligne devient qte
'la cellule à 5 colonnes, même ligne devient puht

ActiveCell.Offset(1, 0).Select
Sheets("archive_detail_fact").Select
'On décale la cellule active d'une colonne, vers le bas
'Puis on va dans la feuille archive_detail_fact
ActiveCell = Range("nf"
ActiveCell.Offset(0, 1) = ref
ActiveCell.Offset(0, 2) = qte
ActiveCell.Offset(0, 3) = puht
'La cellule active est égale à "nf", c'était celle trouvée avec la première partie de la macro archive_detail_fact
'Une colonne à droite devient ref, deux colonnes à droite devient qte, trois colonnes à droite devient puht
ActiveCell.Offset(1, 0).Select
Sheets("facture").Select
Loop
'On se décale d'une ligne vers le bas, et on répète la macro, jusqu'à la condition contraire

'PROBLEME

End Sub


Sub fact_consult()


Sheets("facture_consult").Visible = True
Range("nf_c" = ActiveCell
Range("nc_c" = ActiveCell.Offset(0, 1)
Range("date_fact_c" = ActiveCell.Offset(0, 2)

'Effacer les contenus des colonnes ref, qte et puht sur la feuille facture_consult, puis se repositionner sur A14
Sheets("facture_consult").Select
Range("A14:A24,E14:F24").ClearContents
Range("A14").Select

Sheets("archive_detail_fact").Select
'Tant que la cellule active diffère de la cellule nf_c, on descend d'une ligne, recommencer jusqu'à condition contraire
Range("A1").Select
Do While ActiveCell <> Range("nf_c"
ActiveCell.Offset(1, 0).Select
Loop

'On instaure les variables ref, qte, puht
Dim ref, qte, puht
'Tant que la cellule active est égale à nf_c, ref est égal à la cellule active + 1 colonne, qte + 2 colonnes, puht + 3 colonnes
Do While ActiveCell = Range("nf_c"
ref = ActiveCell.Offset(0, 1)
qte = ActiveCell.Offset(0, 2)
puht = ActiveCell.Offset(0, 3)

Sheets("facture_consult").Select
ActiveCell = ref
ActiveCell.Offset(0, 4) = qte
ActiveCell.Offset(0, 5) = puht

ActiveCell.Offset(1, 0).Select

Sheets("archive_detail_fact").Select
ActiveCell.Offset(1, 0).Select
Loop



End Sub


Sub verif_consult()

If ActiveSheet.Name <> "archive_fact" Then
MsgBox "vous n'êtes pas dans la feuille qui permet la consultation des factures", vbCritical, "Erreur !"
Sheets("archive_fact").Select
Else
If ActiveCell.Column <> 1 Then
MsgBox "Vous n'êtes pas dans la colonne des numéros de facture", vbCritical, "Erreur !"
Range("A2").Select
Else
If ActiveCell = "" Then
MsgBox "Vous avez sélectionné une cellule vide", vbCritical, "Erreur !"
Else
If ActiveCell.Address = "$A$1" Then
MsgBox "vous n'êtes pas sur un numéro de facture", vbCritical, "Erreur !"
Else

Application.ScreenUpdating = False
fact_consult
Sheets("facture_consult").Select
Application.ScreenUpdating = True

End If
End If
End If
End If

End Sub