Listbox sans doublons dans un userform vba excel ...

Résolu
wire less Messages postés 247 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. VlkPr3s Messages postés 251 Statut Membre 130
     
    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
    1. wire less Messages postés 247 Date d'inscription   Statut Membre Dernière intervention   5
       
      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
      1. VlkPr3s Messages postés 251 Statut Membre 130 > wire less Messages postés 247 Date d'inscription   Statut Membre Dernière intervention  
         
        avec une boucle ça suffit à mon sens ^^
        0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour,
        En effet, je l'oublie souvent dans des "petits codes", merci.
        0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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