1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim C As String 'déclare la variable C (Concaténation)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable O (Onglet)
Dim TL() As Variant 'déclare la variable TL (Tbaleu des Lignes)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
O.Columns(4).ClearContents 'efface d'éventuelles anciennes données
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec la donnée en colonne 1 (la référence)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
C = "" 'initialise la concaténation C
For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
'si la donnée en colonne 1 de TV de la boucle 2 est égale à l'élément J du tableau temporaire TMP de la boucle 1,
'redéfinit la concaténation C
If TV(I, 1) = TMP(J) Then C = IIf(C = "", TV(I, 3), C & ", " & TV(I, 3))
Next I 'prochaine ligne de la boucle 2
ReDim Preserve TL(K) 'redimensionne le tableau des lignes TL (K lignes)
TL(K) = C 'récupère dans la ligne K de TL la concaténation C
K = K + 1 'incrémente K
Next J 'prochain élément de la boucle 1
O.Cells(1, "D") = TL(L) 'renvoie le premier élément TL(L) dans la cellule ligne 1 colonne D de l'onglet O
'boucle sur toutes les lignes I du tableau des valeurs TV (en partan de la seconde et jusqu'à l'avant dernière)
For I = 2 To UBound(TV, 1) - 1
'si la donnée ligne I+1, colonne 1 de TV est différente de la donnée ligne I colonne 1 de TV, renvoie la concaténation C de TL(L+1)
'dans la cellule ligne I+1 colonne D de l'onglet O, incrémente L
If TV(I + 1, 1) <> TV(I, 1) Then O.Cells(I + 1, "D") = TL(L + 1): L = L + 1
Next I 'prochaine ligne de la boucle
End Sub |
Partager