Pb de doublons dans une listview

Résolu
Signaler
Messages postés
218
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
30 mai 2011
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour,

voila sur ma forme j'ai une listview qui comporte des doublon. j'ai essayé ceci mais sa ne marche pas :s ou c'est trop car quand j'execute sa plante
Est-ce qqu'un aurait une solution pour moi
' source reprise de ce forum
For p = 1 To frmsrvrézo.lvw1.ListItems.Count
For q = 1 To i - 1
If frmsrvrézo.lvw1.ListItems.Item(p) = frmsrvrézo.lvw1.ListItems.Item(q) Then
 frmsrvrézo.lvw1.ListItems.Remove (p)
 i = i - 1
Exit For
End If
Next
Next

merci d'avnace dodo1309

7 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Essaye plutôt un truc du genre :

For p = frmsrvrézo.lvw1.ListItems.Count To 1 Step -1
For q = frmsrvrézo.lvw1.ListItems.Count To 1 Step -1
If frmsrvrézo.lvw1.ListItems(p).Text = frmsrvrézo.lvw1.ListItems(q).Text Then
 frmsrvrézo.lvw1.ListItems.Remove (q)
End If
Next
Next

Pas sûr que cà marche mieux, à cause de la première boucle qui risque encore d'itérer sur des élements supprimés, mais ce sera déjà un peu plus cohérent.

Sinon, il existe un moyen plus simple : tester si un élément est déjà dans la liste lors de l'ajout, ou trier la liste, et comparer les éléments avec les éléments suivants, ou carrément recontruire une liste des éléments sans les doublons avant de les réinsérer dans le listview.
Messages postés
630
Date d'inscription
vendredi 5 mai 2006
Statut
Membre
Dernière intervention
17 février 2007

Salut,

Comme ça, ça marche :

  For p = frmsrvrézo.lvw1.ListItems.Count To 2 Step -1
    For q = p - 1 To 1 Step -1
      If frmsrvrézo.lvw1.ListItems.Item(p) = frmsrvrézo.lvw1.ListItems.Item(q) Then
        frmsrvrézo.lvw1.ListItems.Remove (p)
        Exit For
      End If
    Next
  Next
Messages postés
218
Date d'inscription
mercredi 17 mai 2006
Statut
Membre
Dernière intervention
30 mai 2011

merci a vous deux les méthode marche bien .

Darksidious ta deuxième solution marche en controlant l'ajout dans la listview 
 

Allez @+ et bonne fêtes de fin d'anneé
Messages postés
53
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
7 mars 2015
1
Bonjour a tous,
j'utilise une autre méthode meilleure ou pire, je ne sait pas (?)

1. Je met la listview par ordre alphabétique sur la colonne concernée
2. Je pars de la dernière ligne jusqu'a la seconde par une boucle et je supprime la ligne si elle est semblable a la précédente

***************** Exemple *****************
ListView1.SortOrder = lvwAscending
ListView1.SortKey = NoColonne
ListView1.Sorted = True
ListView1.Sorted = False

For T = 1 To ListView1.ListItems.Count - 1
ListView1.ListItems(T).SubItems(2) = ListView1.ListItems(T).SubItems(2)
ListView1.ListItems.Remove T
Next
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
Oui c'est l'astuce que je donnais, mais cela implique d'avoir la colonne triée, ce qui n'est pas forcément toujours ce qui est voulu.
Messages postés
53
Date d'inscription
mercredi 22 novembre 2006
Statut
Membre
Dernière intervention
7 mars 2015
1
oui effectivement, pardonne-moi, je n'avais pas lu jusqu'au bout
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

bien qu'un peu plus lourd, les collections évitent les doublons... (avec la clé)
Ca peut être pratique !

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>