Private Sub Worksheet_Change(ByVal Target As Range)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
If Target.Address <> "$E$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en E1, sort de la procédure
Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
TV = OS.Range("B2").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
K = 1 'initialise la variable K
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = Target.Value Then 'condition : si la donnée en colonne 1 de TV est égale à E1
ReDim Preserve TL(1 To 4, 1 To K) 'redimensionne les tableau des lignes (4 lignes, K colonnes)
For L = 1 To 4 'boulce 2 : sur les 4 colonnes de TL
TL(L, K) = TV(I, L + 1) 'récupère dans la ligne N de TL la données colonne L+1 de TV (=> transposition)
Next L 'prochaine colonne de la boucle 2
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition
Next I 'prochaione ligne I de la boucle
'si K est supérieur à 1 renvoie dans A2 redimensionnée de l'onglet OD la tabelau TL transposé
If K > 1 Then OD.Range("A2").Resize(UBound(TL, 2), 4).Value = Application.Transpose(TL)
OD.Activate 'active l'onglet OD
End Sub