Sub Macro1()
Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
Dim O3 As Worksheet 'déclare la variable O3 (Onglet 3)
Dim TV1 As Variant 'déclare la variable TV1 (Tableau des Valeurs 1)
Dim TV2 As Variant 'déclare la variable TV2 (Tableau des Valeurs 2)
Dim I As Integer, J As Integer, K As Integer, L As Integer 'déclare les variables I, J, K et L
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim PL As Range 'déclare la variable PL (PLage)
Set O1 = Worksheets("Feuil1") 'définit l'onglet 1
Set O2 = Worksheets("Feuil2") 'définit l'onglet 2
Set O3 = Worksheets("Feuil3") 'définit l'onglet 3
TV1 = O1.Range("A1").CurrentRegion 'définit la tableau des valeurs TV1
TV2 = O2.Range("A1").CurrentRegion 'définit la tableau des valeurs TV2
O3.Range("A1").CurrentRegion.Offset(2, 0).ClearContents 'efface d'eventuelles ancienne données de l'onglet 3
K = 1 'initialise la variable K
For I = 2 To UBound(TV1, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV1 (en partant de la seconde)
For J = 2 To UBound(TV2, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs TV2 (en partant de la seconde)
If TV1(I, 2) <> "" And TV1(I, 1) = TV2(J, 1) Then 'condition : si la donnée ligne I colonne 2 de TV1 n'est pas vide et que la référence est commune aux deux tableaux
ReDim Preserve TL(1 To UBound(TV2, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de ligne que TV2 a de colonnes, K colonnes)
For L = 1 To UBound(TV2, 2) 'boucle 3 sur toutes les colonnes K du tableau des valeurs TV2
TL(L, K) = TV2(J, L) 'récupère dans la ligne L de TL la donnée en colonne L de TV2 (=> Transposition)
Next L 'prochaine colonne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
'renvoie dans A3 redimensionnée le tableau TL transposé
O3.Range("A3").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Set PL = O3.Range("A1").CurrentRegion 'définit la plage PL
Set PL = PL.Offset(2, 0).Resize(PL.Rows.Count - 2, PL.Columns.Count) 'redéfinit la plage PL (sans les deux premières lignes)
PL.Sort O3.Range("F3"), xlAscending, Header:=xlNo 'classement alphabétique de la colonne 5
O3.Columns(6).Delete 'supprime la colonne 6 (=>colonne F) de l'onglet O3
End Sub