Private Sub Worksheet_Activate()
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 J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'supprime d'éventuelles enciennes données
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 du tableau de valeurs TV
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 du tableau temporaire TMP
K = 1: Erase TL 'initialise K, vide le tableau des lignes TL
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeur TV (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition : si la donnée ligne I colonne 1 de TV correspond à lélément J du tableau temporaire TMP
ReDim Preserve TL(1 To K) 'redimensionne le tableau des ligne TL (K lignes)
TL(K) = TV(I, 4) 'récupere dans la ligne K de TL le commentaire en colonne 4 de la ligne I de TV
K = K + 1 'incrémente K (ajoute une ligne à TL)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
Cells(2, J + 2).Resize(UBound(TL), 1).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé dans la cellule redimensionnée ligne 2 colonne j+2
Next J 'prochain élément de la boucle 1
End Sub