Ok pour le fichier.
Faites ceci :
1. Juste au dessus de votre première ligne Private Sub TB_champs_recherche_Change(), ajoutez cette ligne de code
Dim f As Worksheet
2. Modifiez le code Initialize comme ceci (on gagne en rapidité à l'ouverture)
Private Sub UserForm_Initialize()
Dim plage_header As Range
Set f = Sheets("BDD_OP")
Call chargerUSF
Set plage_header = f.Range("A2:T2")
Lbx_BDD_headers.List = plage_header.Value
End Sub
3. Ajoutez ce code en dessous du code initialize
Private Sub chargerUSF()
Dim plage As Range
Set plage = f.Range("A3:T" & f.Range("A" & Rows.Count).End(xlUp).Row)
Lbx_BDD.List = plage.Value
End Sub
4. Remplacez votre code Private Sub TB_champs_recherche_Change() par celui ci-dessous
Private Sub TB_champs_recherche_Change()
Dim i As Integer, j As Integer, k As Integer
Dim plage As Range
Dim tablo()
Dim Recherche As String
If TB_Champs_recherche = vbNullString Then
Lbx_BDD.Clear
Call chargerUSF
End If
Set plage = f.Range("A3:T" & f.Range("A" & Rows.Count).End(xlUp).Row)
ReDim tablo(1 To plage.Rows.Count, 1 To plage.Columns.Count)
k = 1
For i = 1 To f.Range("A" & Rows.Count).End(xlUp).Row
If UCase(f.Range("A" & i + 2).Value) Like "*" & UCase(TB_Champs_recherche) & "*" Then
For j = 1 To plage.Columns.Count
On Error Resume Next
tablo(k, j) = f.Cells(i + 2, j).Value
Next j
k = k + 1
End If
Next i
Lbx_BDD.List = tablo
'supprimer les lignes vides dans listbox
For i = Lbx_BDD.ListCount - 1 To 0 Step -1
If Lbx_BDD.List(i, 1) = "" Then Lbx_BDD.RemoveItem (i)
Next i
End Sub
Rem : si le code de recherche vous semble long, essayez en remplaçant Private Sub TB_champs_recherche_Change() par --> Private Sub TB_Champs_recherche_AfterUpdate().
Du coup, la recherche ne commencera que lorsque vous avez complété la textbox et que vous avez confirmé par Entrée sur le clavier
Ne repostez pas votre fichier, j'ai votre dernier sur lequel je travaille
Dites-moi après test