Filtrer listview

Résolu/Fermé
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023 - 6 sept. 2021 à 08:04
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023 - 12 sept. 2021 à 00:49
Bonjour, je cherche a optimiser un code qui filtre une listview,je veux le rendre moins long, le code et le suivant:
  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

f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708
Modifié le 9 sept. 2021 à 15:36
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)
1
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
Modifié le 9 sept. 2021 à 16:16
Peut-être une erreur. Donc tu as pu tester le code
0
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708 > JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
9 sept. 2021 à 16:17
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023 > f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024
Modifié le 9 sept. 2021 à 17:11
Merci infiniment!! mais le probleme persiste toujours ou le tableau reste rempli si UserForm1.Txt_valeur_client=empty. Une fois le tablau aura plein de donnees puis tu fais un filtre si le tableau se vide il faudra retourner en arriere pour actualiser les donnees du tableau.
0
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708 > JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
9 sept. 2021 à 17:07
Re,
vous vous etes pas penché sur ce cas.pourquoi
Pouvez relire votre post<5>
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023 > f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024
9 sept. 2021 à 17:15
Désolé pour ma réponse ... Retournons au vif du sujet j’ai testé le fichier tout marche parfaitement mais il reste un petit détail,permettre au tableau de garder ses données si UserForm1.txt_valeur_client est vide
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
Modifié le 6 sept. 2021 à 09:57
bonjour,
les actions à faire sont toujours les mêmes?
tu peux alors les regrouper dans une sub, ou bien faire un seul if avec des
and
et des
or
.
à choisir en fonction de ce qui te semble le plus clair.
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
7 sept. 2021 à 05:14
Bonjour yg_be les actions sont toujours les mêmes.
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
7 sept. 2021 à 05:41
J’ai essayé de le faire mais cela n’a pas fonctionné.
0
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708
7 sept. 2021 à 07:15
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
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
Modifié le 8 sept. 2021 à 08:04
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
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
8 sept. 2021 à 08:27
Voila un exemple:
0
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708
Modifié le 8 sept. 2021 à 08:50
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
0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
8 sept. 2021 à 19:08
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.
0
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708 > JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023
Modifié le 9 sept. 2021 à 09:25
Bonjour,

Ca, j'apprecie pas trop

0
JSCH19 Messages postés 129 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 22 juin 2023 > f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024
9 sept. 2021 à 14:49
J’avais oublié d’autoriser l accès a tout le monde mais maintenant c’est fait. Pour travailler avec le fichier il serait préférable de le télécharger.
0