Filtrer listview
Résolu
JSCH19
Messages postés
134
Statut
Membre
-
JSCH19 Messages postés 134 Statut Membre -
JSCH19 Messages postés 134 Statut Membre -
Bonjour, je cherche a optimiser un code qui filtre une listview,je veux le rendre moins long, le code et le suivant:
Merci deja pour votre aide,cordialement JSCH19!!
Dim Item As ListItem
Dim DerniereLigne As Long
Dim I As Long
Me.ListView1.ListItems.Clear
DerniereLigne = Worksheets("Clients").Cells(Rows.Count, 2).End(xlUp).row
With Me.ListView1
For I = 7 To DerniereLigne
If Me.Txt_filtres_client = "Type" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 5), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
ElseIf Me.Txt_filtres_client = "Code" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 6), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
ElseIf Me.Txt_filtres_client = "Nom et prénom" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 9), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
ElseIf Me.Txt_filtres_client = "Adresse" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 10), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
ElseIf Me.Txt_filtres_client = "Ville" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 12), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
ElseIf Me.Txt_filtres_client = "Code Postal" Then
If LCase$(Left$(Worksheets("Clients").Cells(I, 11), Len(Me.Txt_valeur_client))) = LCase$(Me.Txt_valeur_client) Then
.ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 4)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 5)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 6)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 9)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 10)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 12)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 11)
.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21)
Else
End If
End If
Next I
End With
Merci deja pour votre aide,cordialement JSCH19!!
4 réponses
-
Re,
Y a un probleme entre les entetes de colonne et les entetes de la listview
Pas le bon nombre de colonnes feuille.ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(I, 21) -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
les actions à faire sont toujours les mêmes?
tu peux alors les regrouper dans une sub, ou bien faire un seul if avec desand
et desor
.
à choisir en fonction de ce qui te semble le plus clair. -
Bonjour a vous deux,
A essayer
Sub test() Dim Item As ListItem Dim DerniereLigne As Long Dim lig As Long Me.ListView1.ListItems.Clear With Me.ListView1 If Me.Txt_filtres_client = "Type" Then Col = 5 ElseIf Me.Txt_filtres_client = "Code" Then Col = 6 ElseIf Me.Txt_filtres_client = "Nom et prénom" Then Col = 9 ElseIf Me.Txt_filtres_client = "Adresse" Then Col = 10 ElseIf Me.Txt_filtres_client = "Ville" Then Col = 12 ElseIf Me.Txt_filtres_client = "Code Postal" Then Col = 11 Else End If Nb = Application.CountIf(Worksheets("Clients").Columns(Col), Me.Txt_valeur_client & "*") If Nb > 0 Then lig = 1 For n = 1 To Nb lig = Worksheets("Clients").Columns(Col).Find(Txt_valeur_client, Cells(lig, Col), , xlPart).Row .ListItems.Add , , Text:=Worksheets("Clients").Cells(I, 2) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 4) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 5) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 6) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 9) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 10) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 12) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 11) .ListItems(.ListItems.Count).ListSubItems.Add , , Worksheets("Clients").Cells(lig, 21) Next n End If End With End Sub-
Bonjour,merci d'avoir pris votre temps pour effectuer ce travail titanesque ,merci encore!!!
j''ai testé le code,il marche a merveille mais les inconvenients c'est que si tu rentres la premiere lettre d'un mot pour filtrer la colonne alors les en-tetes des colonnes apparaient encore sur une ligne en dessous des en-tetes,puis je vois que tu as oublié de nommer des variables qui sont les suivants:
"col","n","nb" mais je les ai definit pour lancer le code,autre probleme qu'il y a, lorsque Me.Txt_valeur_client=empty donc le tableau se vide mais dans le code precedent le tableau restait remplis pour permettre a l'utilisateur de mieux orienter sa recherche ou filtre.
Cordialement JSCH19 -
-
-
Bonjour,
Je regarde la chose. Vu que je n'ai pas creer de fichier pour ce code, donc pas tester.
Un exemple de votre fichier aurait ete le bienvenu
le tableau restait remplis
Ben oui, mais facile a resoudre, c'est dans le code, une ligne a deplacer
Les entetes de colonne sont a quelle ligne?
Donc une ligne de code a inserer apres la ligne For........, pour tester que lig est superieur a cette ligne-
Voici le lien de mon fichier :
https://docs.google.com/spreadsheets/d/1Hx0ADPATuxp6Jq8lLih8ijOPkD1bPJtp/edit?usp=sharing&ouid=116706742648043221487&rtpof=true&sd=true
veuillez telecharger le fichier pour avoir pleinement acces a celui-ci.
-
