Option Explicit
: ça oblige à déclarer les variables.
Sub Macro1()
..
End Sub
: c'est la macro qui est appelée par le bouton "Macro couleur".
If ActiveSheet.Name <> "Donations" Then Exit Sub
: on sort de la sub si on n'est pas sur la feuille "Donations" ; tu vas dire :
« on est forcément sur la feuille "Donations" puisque le bouton "Macro couleur" est dessus, et qu'on clique dessus ! si on est sur la feuille "Recap", on ne peut pas passer la main à travers cette feuille pour aller cliquer sur le bouton de la feuille "Donations" ! » ; oui ... mais faut pas oublier qu'à partir de la feuille "Recap", on peut quand même très bien lancer la macro via Alt F8 !
(fenêtre "Macro") ; idem si j'avais mis en place un raccourci clavier du genre Ctrl e
(ce qui n'est pas le cas).
Dim dlg&
: idem que
Dim dlg As Long
; dlg est mon abréviation pour "dernière ligne".
dlg = Cells(Rows.Count, 1).End(3).Row
: idem que
dlg = Cells(Rows.Count, "A").End(xlUp).Row
; donc sur la feuille active
(qui est "Donations") on
« calcule » la dernière ligne qui est utilisée, en colonne A ; Rows.Count est le nombre de lignes d'une feuille de calcul = 1 048 576 ; avec les anciens fichiers .xls
(Excel 2003 et versions antérieures), c'était 65 536 ; dans l'exemple, dlg vaut 22 car le dernier nom "Joelle" est en A22 ; maint'nant, imagine que le tableau est vide
(ce qui est l'cas au départ) ; y'a donc aucun nom, n'est-ce pas ? et si y'a aucun nom, quelle est la 1ère cellule
non vide rencontrée
(en remontant du bas) ? c'est la cellule A8 "Membres" de la ligne d'en-têtes ; ça explique l'instruction qui va suivre.
If dlg = 8 Then Exit Sub
: si dlg vaut 8, c'est qu'on a "rencontré" la ligne 8 des en-têtes ; donc le tableau est vide et ne contient aucune donnée ; et si y'a pas d'données, on sort de la sub car le traitement qu'on avait l'intention de faire devient sans objet : c'est inutile de faire quoi que ce soit.
Dim Wsh As Worksheet, lg1&, lg2&
: déclaration de 3 variables ; Wsh
(mon abréviation de Worksheet) est une variable Feuille de calcul ;
Dim lg1&
: idem que
Dim lg1 As Long
; lg1 et lg2 contiendront un n° de ligne.
lg2 = 9
:
sans cette instruction, lg2 est initialisé à 0
(c'est fait implicitement par le Dim) et la liste des noms commencera plus loin en A1 ;
avec cette instruction, lg2 est initialisé explicitement à 9 et la liste de noms commencera plus loin en A10.
Application.ScreenUpdating = 0
: gel de la mise à jour de l'écran ➯ exécution plus rapide.
Set Wsh = Worksheets("Recap")
: Wsh référence la feuille "Recap".
Wsh.Columns(1).ClearContents
: sur la feuille "Recap", on efface toutes les données de la colonne A ; c'est pour éviter un mélange entre d'anciens résultats et les nouveaux résultats ; en effet, si on ne le fait pas, au cas où la liste de noms est plus courte qu'une ancienne liste plus longue, on verrait d'anciens noms
en trop au bas de la liste des nouveaux noms !
For lg1 = 9 To dlg
..
Next lg1
: pour toutes les lignes à partir de la ligne 9 ; dans l'exemple, des lignes 9 à 22.
With Cells(lg1, 1)
..
End With
: avec la cellule en ligne lg1, colonne 1
(= colonne A).
remarque : les 2 instructions ci-dessus font qu'on lit sur la feuille "Donations"
tous les noms de A9 à A22, donc "Pierre" à "Joelle".
If .Offset(, 4) <= 0 Then
: voici le test qui évite d'avoir à tester la couleur de fond d'une cellule ! le 1er paramètre de l'offset est omis ➯ même ligne ; le 2ème paramètre de l'offset est 4 ➯ c'est 4 colonnes à droite = colonne E "Ecart" ; donc : si on lit A9, on teste E9 ; si on lit A10, on teste E10 ; si on lit A11, on teste E11 ; si on lit A12, on teste E12 ; etc... ; si Ecart <= 0, on va copier le nom
(qui est forcément sur fond bleu puisque la condition "<= 0" est la condition de la règle de MFC) ; la copie du nom est faite par les 2 instructions qui sont à droite du
Then
(situées sur la même ligne d'instruction).
lg2 = lg2 + 1
: lg2 est augmenté de 1 ➯ on va écrire une ligne plus bas ; rappel : comme au départ lg2 a été initialisé à 9
(c'était sur la 2ème ligne Dim), on commencera à écrire en ligne 10.
Wsh.Cells(lg2, 1) = .Value
: .Value est la cellule du With ➯ c'est le nom qu'on lit en feuille "Donations"
(ligne lg1, colonne A) ; on écrit ce nom sur la feuille Wsh
("Recap"), dans la cellule de la ligne lg2, colonne 1
(= colonne A).
Wsh.Select
: on sélectionne la feuille "Recap" pour montrer la liste des noms qui ont été copiés ; comme par hasard, ce sont les noms qui sont sur fond bleu en feuille "Donations" !
et on n'a pas eu besoin de tester la couleur de fond !
miracle ! y'a quand même des coïncidences inouïes, pas vrai ?
si besoin, tu peux demander d'autres infos.
merci de me donner ton avis.