Private O As Worksheet 'déclare la variable O (Onglet) Private TC As Variant 'déclare la variable TC (Tableau de Cellules) Private NL As Integer 'déclare la variable NL (Nombre de Lignes) Private NC As Byte 'déclare la variable NC (Nombre de colonnes) Private Sub Recherche_Initialize() 'à l'initialisation de l'UserForm Set O = Sheets("Remplissage") 'définit l'onglet O TC = O.Range("A2").CurrentRegion 'définit le tableau de cellules TC NL = UBound(TC, 1) 'définit le nombre de lignes de TC NC = UBound(TC, 2) 'définit le nombre de colonnes de TC Me.ListBox1.ColumnCount = NC + 1 'définit le nombre de colonnes de la ListBox1 (à adapter, dans cet exemple je recherche dans la ligne entière. +1 pour le numéro de ligne) Me.ListBox1.ColumnWidths = "0 pt;" 'masque la première colonne de la ListBox1 (celle ou sera stocké le numéro de la ligne) End Sub Private Sub TextBox1_Change() 'au changement dans la TesxBox1 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 Integer 'déclare la variable K (incrément) Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes) Me.ListBox1.Clear 'vide la ListBox1 K = 1 'initialise la variable K For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tabelau de cellules TC (en partant de la seconde) For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tabelau de cellules TC If InStr(1, TC(I, J), Me.TextBox1.Value, vbTextCompare) <> 0 Then 'condition : si le texte de la TextBox1 est contenu dans la donnée ligne I colonne J (sans tenir compte de la casse) ReDim Preserve TL(NC + 1, 1 To K) 'redimensionne le tableau de lignes TL TL(0, K) = I 'récupère dans la ligne 0, colonne K de TL le numéro de ligne (masqué) For l = 1 To NC 'boucle sur toutes les colonnes de TC TL(l, K) = TC(I, l) 'récupère dans la ligne L, colonne K de TC la valeur de la ligne I , colonne L de TC (transposition) Next l 'prochaine colonne de la boucle 2 K = K + 1 'incrémente K Exit For 'sort de la boucle 2 End If 'fin de la condition Next J 'prochaine colonne de la boucle 2 Next I 'prochaine ligne de la boucle 1 If K > 1 Then 'condition : si K est supérieur à 1 (au moins une occurrence a été trouvé) If K = 2 Then ReDim Preserve TL(NC + 1, 1 To 2) 'si une seule occurrence trouvée, redimensionne TL pour pouvoir transposer Me.ListBox1.List = Application.Transpose(TL) 'alimente la ListBox1 avec le tableau TL transposé End If 'fin de la condition End Sub Private Sub ListBox1_Click() 'au clic dans la ListBox1 O.Rows(Me.ListBox1.Column(0, ListIndex)).Select 'sélectionne la ligne de l'élément sélectionné Unload Me 'vide et ferme l'UserForm End Sub Private Sub Recherche_Click() End Sub Private Sub UserForm_Click() End Sub