Bonjour Lulu,
voici l'explication détaillée du code VBA :
If ActiveSheet.Name <> "A" Then Exit Sub
: si le nom de la feuille active n'est pas "A", on sort de la sub
Dim ref$, mot$, dlig&, lg1&, lg2&, col%
: déclaration de 6 variables ; ref$ : idem que ref As String ;
dlig& : idem que dlig As Long ; col% : idem que col As Integer
dlig = Cells(Rows.Count, 1).End(3).Row
: dernière ligne utilisée, selon la colonne A
idem que : dlig = Cells(Rows.Count, "A").End(xlUp).Row ; dlig = 4 (n° ligne dernière référence)
With Worksheets("B")
.. End With
: avec la feuille "B"
.Range("A:B").Columns.ClearContents
: sur feuille "B", effacer les colonnes A et B
oups, y'avait plus simple (à préférer) : .Columns("A:B").ClearContents
lg2 = 1
: n° ligne pour écrire en feuille "B" (destination) ; on écrira donc les résultats
sur la feuille "B" à partir de la ligne n° 1
Application.ScreenUpdating = 0
: désactive la mise à jour de l'écran ➯ l'exécution du code est plus rapide
For lg1 = 1 To dlig
.. Next lg1
; lg1 : n° ligne pour lire la feuille "A" (source) ; boucle de 1 à dlig ➯ de 1 à 4
c'est donc ce qui permet de parcourir toutes les lignes de références, et la suite est pour chacune d'elles
ref = Cells(lg1, 1)
; idem que ref = Cells(lg1, "A") ; ref : référence de la ligne lg1
If ref <> "" Then
.. End If
: pour éviter de traiter une ligne où la référence serait manquante (sécurité)
col = 2
; n° colonne : 2, donc colonne B ; car pour chaque ligne de référence, tes mots style "toto"
sont à partir de la colonne B, puis vers la droite
Do
.. Loop
: boucle infinie ; mais t'inquiètes pas ; y'aura quand même une porte de sortie !
mot = Cells(lg1, col)
: mot de la ligne lg1, colonne col (mot très stylisé de 4 lettres )
If mot = "" Then Exit Do
: là voilà, l'issue d'secours qui permet de sortir de la boucle infinie !
* les lignes sont de longueur variable ; on va lire les mots vers la droite, et s'arrêter dès qu'on trouve une cellule vide
* note bien que faire ce test d'emblée évite de traiter une ligne qui aurait une référence mais aucun mot !
With .Cells(lg2, 1)
.. End With
: avec la cellule en ligne lg2 et colonne A ... de la feuille "B",
car note bien que ce 2ème With est un complément du 1er With
.Value = ref
: référence écrite dans la cellule référencée par le With
c'est donc cela qui écrit la colonne A des résultats
.Offset(, 1) = mot
: mot écrit une colonne à droite
c'est donc cela qui écrit la colonne B des résultats
col = col + 1
: n° colonne col augmenté de 1 pour lire le prochain mot vers la droite
lg2 = lg2 + 1
: n° ligne lg2 augmenté de 1 pour écrire le prochain résultat (réf / mot)
une ligne en dessous
.Select
: cette instruction est après le Next de la boucle For, et dépend du 1er With
c'est donc pour sélectionner la feuille "B", afin de pouvoir lire les résultats
j'espère que ma longue explication détaillée ne t'aura pas trop ennuyée,
et j't'en voudrai pas si tu t'es endormie en chemin.
dhany