Filtre Multicriteres dans ListView avec TextBox

Bonjour,
J'ai un formulaire avec une ListView qui me permet d'extraire les données d'une BDD.
J'ai 3 TextBox qui me permettent d'effectuer un filtre.
Je voudrais pouvoir utiliser ces "filtres" en cascade. (J'y arrive avec une ListBox mais pas avec une ListView)

Function FilterDataInListView_Agence()             'Fonction Filter en fonction de la Textbox 24 (Agence de départ)
Dim i As Long
Dim searchText As String
 Dim j As Long
 searchText = LCase(TextBox24.Text)
On Error Resume Next
    ListView1.ListItems.Clear
    For i = 1 To Sheets("DATA").Cells(Rows.Count, 3).End(xlUp).Row
    If InStr(1, LCase(Sheets("DATA").Cells(i, 3).Value), searchText) > 0 Then
            With ListView1.ListItems.Add(, , Sheets("DATA").Cells(i, 1).Value)
                For j = 2 To 18
                    .ListSubItems.Add , , Sheets("DATA").Cells(i, j).Value
                Next j
            End With
        End If
    Next i
End Function

Function FilterDataInListView_Contrat()             'Fonction Filter en fonction de la Textbox 25 (N° de Contrat)
Dim i As Long
Dim searchText As String
 Dim j As Long
 searchText = LCase(TextBox25.Text)
On Error Resume Next
    ListView1.ListItems.Clear
    For i = 1 To Sheets("DATA").Cells(Rows.Count, 4).End(xlUp).Row
    If InStr(1, LCase(Sheets("DATA").Cells(i, 4).Value), searchText) > 0 Then
            With ListView1.ListItems.Add(, , Sheets("DATA").Cells(i, 1).Value)
                For j = 2 To 18
                    .ListSubItems.Add , , Sheets("DATA").Cells(i, j).Value
                Next j
            End With
        End If
    Next i
End Function

Function FilterDataInListView_Client()             'Fonction Filter en fonction de la Textbox 26 (Nom Client)
Dim i As Long
Dim searchText As String
 Dim j As Long
 searchText = LCase(TextBox26.Text)
On Error Resume Next
    ListView1.ListItems.Clear
    For i = 1 To Sheets("DATA").Cells(Rows.Count, 7).End(xlUp).Row
    If InStr(1, LCase(Sheets("DATA").Cells(i, 7).Value), searchText) > 0 Then
            With ListView1.ListItems.Add(, , Sheets("DATA").Cells(i, 1).Value)
                For j = 2 To 18
                    .ListSubItems.Add , , Sheets("DATA").Cells(i, j).Value
                Next j
            End With
        End If
    Next i
End Function

Private Sub TextBox24_Change()      ' Recherche par Agence
    TextBox24.Text = UCase(TextBox24.Text)
    Call FilterDataInListView_Agence
End Sub

Private Sub TextBox25_Change()      ' Recherche par N° de Contrat
    Call FilterDataInListView_Contrat
End Sub

Private Sub TextBox26_Change()      ' Recherche Par NOM Client
    TextBox26.Text = UCase(TextBox26.Text)
    Call FilterDataInListView_Client
End Sub

Bonjour,

Une solution pourrait etre de créer une variable intermédiaire contenant votre liste, et d'appliquer les filtres successivement sur cette variable, plutot que sur l'objet initial qui ne supporte qu'un filtre à la fois. En gros vous stockez le résultat intermédiaire après chaque filtrage dans une variable, et vous repartez de cette variable pour le prochain filtre.

Sinon, peut etre plus simple, vous pouvez avoir votre tableau dans Excel, et utiliser Range.AutoFilter method (Excel) | Microsoft Learn pour appliquer des filtres sur chaque colonne du tableau. Utilisez l'enregistreur automatique de macros et faites le manuellement, vous verrez c'est assez simple à adapter.

Une fois le résultat obtenu, vous l'appliquez dans votre listeview.

Rechercher des sujets similaires à "filtre multicriteres listview textbox"