Salut apt,
Ne pas mettre tTab, tExtract() et iIdx en PUBLIC !
En règle générale, travailler avec des variables locales suffit.
Private Sub Txt_Change(ByVal sItem$, iCol1%, iCol2%)
'
Dim tTab, tExtract(), iIdx%
'
Nbmax = Sheets("Base").Range("A100000").End(xlUp).Row
Me.ListClient.Clear
Me.ListFix.Clear
Me.ListMob.Clear
tm = Timer
tTab = Worksheets("Base").Range("A2:J" & Range("A" & Rows.Count).End(xlUp).Row).Value
If Len(sItem) > 1 Then
For x = 1 To UBound(tTab, 1)
For y = iCol1 To iCol2
If InStr(UCase(tTab(x, y)), UCase(sItem)) > 0 Then
iIdx = iIdx + 1
ReDim Preserve tExtract(7, iIdx)
tExtract(0, iIdx - 1) = tTab(x, 1)
tExtract(1, iIdx - 1) = tTab(x, 5)
tExtract(2, iIdx - 1) = tTab(x, 6)
tExtract(3, iIdx - 1) = tTab(x, 7)
tExtract(4, iIdx - 1) = tTab(x, 8)
tExtract(5, iIdx - 1) = tTab(x, 9)
tExtract(6, iIdx - 1) = tTab(x, 10)
Exit For
End If
Next
Next ...
Tant qu'à créer une SUB commune, autant cibler la donnée recherchée et la colonne dans 'Base', non ?
Private Sub TxtNom_Change()
'
Call Txt_Change(Me.TxtNom.Text, 5, 5)
'
End Sub
Private Sub TxtFix_Change()
'
Call Txt_Change(Me.TxtFix.Text, 6, 8)
'
End Sub
Private Sub TxtMob_Change()
'
Call Txt_Change(Me.TxtMob.Text, 9, 10)
'
End Sub
A+