Sujet : Facture | | 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 |
|
|
|