Listbox sans doublons dans un userform vba excel ...

Résolu/Fermé
wire less Messages postés 211 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 - 28 avril 2015 à 11:07
f894009 Messages postés 16712 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 2 octobre 2022 - 29 avril 2015 à 08:57
Bon sujet classique ... dsl j'ai parcouru les forums mais je n'arrive toujours pas à créer ma listbox sans doublons !!

Mon script ... J'ai une combobox1 et je souhaite que lorsque je clic dessus, je viennes alimenter ma listbox. Ma listbox se rempli ... sans avoir deux fois le même élément !!
Du coup j'ai fait un :
Private Sub ComboBox1_Click()
Dim Unique As New Collection
Dim Valeur As Range

Unique.Add ComboBox1.Value

For Each Valeur In Unique
Me.ListBox1.AddItem Valeur
Next Valeur

Voila ... simplissime ... (oui bon ... c'est ce que j'ai trouvé sur les forums ... c'étais pas mon idée ... j'ajoute les éléments de ma combobox dans une "Collection", (apparemment les collections n'acceptent pas les doublons), puis je transfert ma collection dans listbox.

Et bien ... devinez ... ça ne marche pas :'-(

Quelqu'un aurait il une idée ou une correction ... ou une autre solution ?
Merci.

3 réponses

VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130
28 avril 2015 à 11:45
J'ai fait un truc comme toi pour mon application c# et pour éviter les doublons tu dois tester les éléments du ListBox en gros tu test le précédent par rapport au suivant et s'il sont différent tu le laisse dedans sinon tu supprimes une des deux occurrences.
0
wire less Messages postés 211 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018 4
28 avril 2015 à 14:02
Arfff ... Ok ... c'est juste qu'avec les "collections" ça semblait plus simple, mais j'avoue que je ne sais pas trop comment ça s'utilise !!
J'attends encore un peu, si personne n'a de solution, j'essaierais ta solution des boucles qui teste chaque occurrence pour voir si elle sont double :-/
0
VlkPr3s Messages postés 235 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 27 juin 2016 130 > wire less Messages postés 211 Date d'inscription lundi 5 octobre 2009 Statut Membre Dernière intervention 29 août 2018
28 avril 2015 à 14:41
avec une boucle ça suffit à mon sens ^^
0
f894009 Messages postés 16712 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 2 octobre 2022 1 655
Modifié par f894009 le 28/04/2015 à 17:02
Bonjour a vous deux,

Dim Unique As New Collection
Dim i As Integer
Dim Valeur As Variant

Private Sub ComboBox1_Click()
    On Error Resume Next
    Unique.Add Item:=ComboBox1.Text, Key:=CStr(ComboBox1.ListIndex)
    On Error GoTo 0
    'raz listbox
    ListBox1.Clear
    'Boucle sur le contenu de la collection pour alimenter la ListBox
    For Each Valeur In Unique
        Me.ListBox1.AddItem Valeur
    Next Valeur
End Sub
0
michel_m Messages postés 16579 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 1 octobre 2022 3 279
29 avril 2015 à 06:49
Bonjour f89,

petite remarque
si tu instancies par "new" et si tu rends la main au système en fin de macro(et seulement on utilise "new"), tu dois "détruire" l'objet en fin de macro
set unique= nothing
Cordialement
0
f894009 Messages postés 16712 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 2 octobre 2022 1 655 > michel_m Messages postés 16579 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 1 octobre 2022
Modifié par f894009 le 29/04/2015 à 08:59
Bonjour,
En effet, je l'oublie souvent dans des "petits codes", merci.
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
29 avril 2015 à 07:54
Bonjour Messieurs,

Un exemple sans collection, juste un petit traitement d'erreur :
Private Sub ComboBox1_Click()
On Error GoTo fin
Me.ListBox1 = ComboBox1
If ListBox1.ListIndex = -1 Then GoTo fin
Exit Sub
fin:
Me.ListBox1.AddItem ComboBox1
End Sub

0