Bonjour Cycell, Rachid, bonjour le forum,
Après une proposition par formules de l'excellent Rachid (que je salue au passage, Assalahm alaykhoum Rachid) , une autre proposition VBA avec utlisation d'une UserForm dont le code est :
Private O1 As Object 'déclare la variable O1 (Onglet 1)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim I As Integer 'déclare la variable I (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set O1 = Sheets("Feuil1") 'définit l'onglet O1
TC = O1.Range("A1").CurrentRegion 'définit la tableau TC
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes du tableau TC (en partant de la seconde)
D(TC(I, 1)) = "" 'alimente le dictionaire D avec la valeur en colonne 1 (=> colonne A) du tableau
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste du dictionnaire sans doublon
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
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 Byte 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau de Lignes)
Dim DEST As Range 'déclare la variable dest
Set O2 = Sheets("Feuil2")
With O2 'prend en compte l'onglet O2
.Cells.ClearContents 'efface d'éventuelles anciennes données
O1.Range("a1").Resize(1, 8).Copy O2.Range("A1")
End With 'fin de la prose en compte de l'onglet "Feuil2"
For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes du tableau TC (en partant de la seconde)
If TC(I, 1) = Me.ComboBox1.Value Then 'condition 'si la valeur en colonne 1 (=> colonne A) du tableau TC est égale à la valeur de la ComboBox1
Set DEST = O2.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)
O1.Cells(I, 1).Resize(1, 8).Copy DEST
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O2.Select 'sélectionn el'onglet O2
Unload Me 'vide et ferme l'UserForm
End Sub
Le fichier :