Microsoft 365 Récupérer valeurs lignes filtrées triées sans doublon dans Listview

torple

XLDnaute Nouveau
Salut à tous,
J'aimerai avoir une listview avec seulement les valeurs des lignes filtrées (non masquées) triées (filtre = Val1) par ordre alpha et sans doublon de la colonne Valeur.
J'avoue que je séche.

Merci d'avance pour votre aide

Eric
 

Pièces jointes

  • Filtre.xlsm
    19.4 KB · Affichages: 15

torple

XLDnaute Nouveau
Salut kingfadhel,
merci pour ton aide, j'en suis arrivé au niveau de l'exemple, mais ça ne trie pas ni supprime les doublons :(.

j'ai une piste, je vais passer par un tableau intermediate, faire le trie sans doublon sur le tableau est remplir le listview.

je pensais pouvoir utiliser un truc du style

Dim tablo() As Variant
tablo = Range("E2:G" & Range("G65536").End(xlUp).Row).SpecialCells(xlVisible)
et trier le tablo, mais ça ne rempli que la 1er ligne :(

Encore merci pour ton aide

Eric
 

torple

XLDnaute Nouveau
Autre approche:

est-t-il possible de faire un tableau de lignes

ex

tablo de la ligne 5

puis s'ajouter au tableau la ligne 12
puis s'ajouter au tableau la ligne 17,...

car je peux lire que les lignes non masquées, plus facile pour moi après pour le traitement de la liste

Eric
 

patricktoulon

XLDnaute Barbatruc
bonjour
c'est quand même incroyable que l'on doive vous sortir les vers du nez

doublons OK mais les doublons de la colonne valeur ou id ou en fonction des deux car c'est pas la même chose

soyez plus explicite et clair dans vos demandes les réponses en découlent
edit et le filtre il est appliqué sur quelle colonne ça aussi ça change tout
 

torple

XLDnaute Nouveau
Bonjour Patrick,
quand tu click sur le bouton dans l'user qui apparaît il y a les renseignements que tu demandes.
Le but est de récupérer la liste des valeurs de la colonne valeur (ca me semblait explicite) triée et sans doublon, du résultat du filtre de la colonne filtre (ça me semblait aussi explicite) dans la listview qui aura 2 colonne le numero de l'id et la valeur triée par ordre alpha sans doublon.

Désolé si je n'ai pas été suffisamment explicite.

Merci d'avance pour ton aide

Eric
 

patricktoulon

XLDnaute Barbatruc
et bien soit
pas testé mais le code base ça doit être ça
VB:
Set dico = CreateObject("scripting.dictionary")
    With Feuil1.Range("E1:G" & Cells(Rows.Count, 6).End(xlUp).Row)
        .AutoFilter Field:=2, Criteria1:="Val1"
        Set p = .SpecialCells(xlVisible)
        .AutoFilter
    End With
    For Each r In p.Rows
        If Not dico.exists(Feuil1.Cells(r.Row, 6)) Then
            i = i + 1
            ListView1.Add i - 1, , Feuil1.Cells(r.Row, "E")
            ListView1.ListItems(i - 1).ListSubItems.Add 1, , Feuil1.Cells(r.Row, "f")

            dico(Feuil1.Cells(r.Row, "F")) = ""
        End If
    Next
 

torple

XLDnaute Nouveau
Marche pas.


Set dico = CreateObject("scripting.dictionary")
With Feuil1.Range("E1:G" & Cells(Rows.Count, 6).End(xlUp).Row)
.AutoFilter Field:=2, Criteria1:="Val1"
Set p = .SpecialCells(xlVisible)
.AutoFilter
End With
For Each r In p.Rows
If Not dico.exists(Feuil1.Cells(r.Row, 6)) Then
i = i + 1
ListView1.Add i - 1, , Feuil1.Cells(r.Row, "E") 'Bloque ici
ListView1.ListItems(i - 1).ListSubItems.Add 1, , Feuil1.Cells(r.Row, "f")

dico(Feuil1.Cells(r.Row, "F")) = ""
End If
Next


j'ai modifier ton code par

J'ai virer la colonne Id dans la listview donc plus qu'une colonne

Set dico = CreateObject("scripting.dictionary")
With Feuil1.Range("E2:G" & Cells(Rows.Count, 7).End(xlUp).Row)
.AutoFilter Field:=2, Criteria1:="Val1"
Set p = .SpecialCells(xlVisible)
'.AutoFilter <-- supprimer l'instruction sinon ca me vire le filtre
End With


For Each r In p.Rows
If Not dico.exists(Feuil1.Cells(r.Row, 7)) Then
i = i + 1
ListView1.ListItems.Add , , Feuil1.Cells(r.Row, "G") <--- modifier l'instruction pour ajouter
dico(Feuil1.Cells(r.Row, "G")) = ""
End If
Next


résultat il n'y a pas de trie ni suppression des doublons
1585931370562.png
 

torple

XLDnaute Nouveau
j'ai trouvé
Dim val As String
For Each r In p.Rows
val = Feuil1.Cells(r.Row, 7)
If Not dico.exists(val) Then
dico.Add val, val <---- il faut ajouter la valeur au dico
i = i + 1
ListView1.ListItems.Add , , Feuil1.Cells(r.Row, 7)
'dico(Feuil1.Cells(r.Row, 7)) = ""
End If
Next


Super merci Patrick

Et pour le trie je trie la listview avec Sorted = True
 

patricktoulon

XLDnaute Barbatruc
re
puré ca m'a obligé de le faire
VB:
 Dim i&, r As Range, p As Range
    Set dico = CreateObject("scripting.dictionary")
    With Feuil1.Range("E1:G" & Cells(Rows.Count, 6).End(xlUp).Row)
        .AutoFilter Field:=2, Criteria1:="Val1"
        Set p = .SpecialCells(xlVisible)
        .AutoFilter
    End With
    For Each r In p.Rows
        If Not dico.exists(Feuil1.Cells(r.Row, "G").Value) Then
            i = i + 1
            ListView1.ListItems.Add , , Feuil1.Cells(r.Row, "E")    '<--- modifier l'instruction pour ajouter
            ListView1.ListItems(i).ListSubItems.Add , , Feuil1.Cells(r.Row, "G")
        End If
        dico(Feuil1.Cells(r.Row, "G").Value) = ""
    Next
pour le tri ALPHA il te faudrait peut etre passer par un tableau et faire un tri QUICK SORT tu a moult exemple
ps je t'ai remis les ID
 

Discussions similaires

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 010
dernier inscrit
Sys974