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

  • Initiateur de la discussion Initiateur de la discussion torple
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
627
Retour