Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
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 Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire))
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set OS = Worksheets("Feuille macro") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le taleau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
D(TV(I, 9)) = "" 'alimente le dictionnaire D avec les données en colonne 9 de 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 J du tableau temporaire TMP
Erase TL 'vide le tableau TL
K = 1 'initialise la variable K
Set OD = Worksheets("Site " & TMP(J)) 'définit l'onglet destination OD
Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destinatiotn DEST
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 9) = TMP(J) Then 'condition : si la donnée colonne 9 de la boucle correspond à l'élément J de TMP
ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL
For L = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes L du tablau des valeurs TV
TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL la donnée en colonne L de TV (=> Transposition)
Next L 'prochaine colonne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
'si K est supérieur à 1, renvoie dans DEST redimensionnée le tableau TL transposé
If K > 1 Then DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Next J 'prochain élément de la boucle 1
End Sub