Bonjour Bellam, bonjour le forum,
Par Formules je ne sais pas faire... Si une proposition VBA t'intéresse, je te propose l'événementielle Change ci-dessous (dans le composant Feuil1(Filtre)) :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim K As Integer 'déclare la variable K (incrément)
If Target.Address <> "$B$4" Then Exit Sub 'si le changement a lieu ailleurs qu'en B4 (la cible), sort de la procédure
If Me.Range("B7").Value <> "" Then Me.Range("B6").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données
If Target = "" Then Exit Sub 'si la cible est effacée, sort de la procédure
Set OL = Worksheets("Liste") 'définit l'onglet OL
TV = OL.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau de valeurs TV (en partant de la seconde)
If CStr(TV(I, 1)) = Target.Value Then 'condition : si la donnée ligne I colonne 1 de TV (convertie en texte) est égale à la valeur de la cible
K = K + 1 'incrémente K
ReDim Preserve TL(1 To 2, 1 To K) 'redimensionne le tableau des lignes (2 lignes, K colonnes)
TL(1, K) = TV(I, 3) 'récupère dans la ligne 1 (colonne K) de TL la donnée ligne I colonne 3 de TV (=> Transposition)
TL(2, K) = TV(I, 2) 'récupère dans la ligne 2 (colonne K) de TL la donnée ligne I colonne 2 de TV (=> Transposition)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
'si K est positive, renvoie dans la cellue B7 redimensionnée, le tableau TL transposé
If K > 0 Then Me.Range("B7").Resize(K, 2).Value = Application.Transpose(TL)
End Sub
Tape le code postal en B4 et tu auras le résultat...
Le fichier :