Bonsoir,
voir ci dessous, il y a bien des "appels" à Tablo()
'Source : http://www.blog-excel.com/creer-un-champ-de-recherche-vba
Option Compare Text
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Cells(Tablo(ListBox1.ListIndex), 1).Activate
End Sub
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Dim Cpt As Long, Ligne As Long
Dim Row As Range
Erase Tablo()
Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Interior.ColorIndex = 2
ListBox1.Clear
Cpt = 0
If TextBox1 <> "" Then
For Ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(Ligne, 1) Like "*" & TextBox1 & "*" Then
Cells(Ligne, 1).Interior.ColorIndex = 43
ListBox1.AddItem Cells(Ligne, 1)
ReDim Preserve Tablo(Cpt + 1)
Tablo(Cpt) = Ligne Cpt = Cpt + 1
If Cells(Ligne, 1).Interior.ColorIndex = 43 Then
Worksheets("Feuil").Columns("A").Hidden = True
End If
End If
Next
End If
End Sub
Le principe : Tablo() est créé en "public" afin d'être accessible de tout le projet VBA.
Cette définition se trouve en première ligne du Module1 VBA
Lors que la recherche abouti sur des réponse, pour chaque item trouvé qu'on inscrit dans la ListBox1, on inscrit également le numéro de ligne Excel où se trouve cet item.
Lorsque clique sur un des items de la listBox1, alors on "active" la ligne Excel correspondante par appel de la valeur de Tablo().
Dès qu'une nouvelle valeur est entrée dans la zone texte, on efface le Tablo(), puis on le recrée en fonction des nouveaux résultats.
Une piste pour votre première question .
Dans Tablo() se trouve les n° de lignes où il y a un résultat par rapport à la recherche, donc il suffit de mettre à "hidden" les n° de lignes qui ne figure pas dans le tableau, mais s'il y a plus de ligne à masquer qu'à laisser visible, le plus rapide serait de tout cacher et d'afficher le contenu du Tablo()...
@ bientôt
LouReeD