Excel VBA - Problèmes multisélection

Résolu
sygmajf99 -  
 sygmajf99 -
Bonjour,

J'ai créé un userform qui inclut une liste multisélection, et à ses côtés une liste des sélections choisies (résultats). (J'ai pris le code d'un site internet, ensuite apporté quelques modifs). Je suis très débutant en VBA.

Mon premier problème est que la liste multi-sélection inclut des doublons, et je veux les enlever. Deuxièmement, j'aimerais afficher les résultats sur plusieurs lignes (e1 à exxx), et non condensé sur une (e1). Le code fait un "join" à la fin.

Voici mon code :

Sub UserForm_Initialize()

Set f = Sheets("Rép-Questions Comité")
Set mondico = CreateObject("Scripting.Dictionary")
Me.choix.List = Range(f.[C5], f.[C5000].End(xlUp)).Value
Me.choix.MultiSelect = fmMultiSelectMulti

End Sub

Private Sub Choix_Change()
mondico.RemoveAll
Me.RésultatListBox1.Clear
For k = 0 To Me.choix.ListCount - 1
If Me.choix.Selected(k) = True Then
temp = Me.choix.List(k, 0)
mondico(temp) = temp
End If
Next k
Me.RésultatListBox1.List = mondico.items

End Sub

Private Sub cmdValider_Click()
[e1] = Join(mondico.items, Chr(10))
Unload Me
End Sub

MERCI !!!!!

1 réponse

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Pour résoudre tes 2 problèmes je te propose ceci :
    Option Explicit
    Public mondico As Object, f As Worksheet, k As Long
    
    Sub UserForm_Initialize()
    Set f = Sheets("Rép-Questions Comité")
    Set mondico = CreateObject("Scripting.Dictionary")
    For k = 5 To f.[C5000].End(xlUp).Row
        mondico(f.Cells(k, 3).Value) = f.Cells(k, 3).Value
    Next k
    Me.choix.List = mondico.items
    Me.choix.MultiSelect = fmMultiSelectMulti
    End Sub
    
    Private Sub Choix_Change()
    mondico.RemoveAll
    Me.RésultatListBox1.Clear
    For k = 0 To Me.choix.ListCount - 1
        If Me.choix.Selected(k) = True Then
            mondico(Me.choix.List(k, 0)) = Me.choix.List(k, 0)
        End If
    Next k
    Me.RésultatListBox1.List = mondico.items
    End Sub
    
    Private Sub cmdValider_Click()
    f.Columns(5).ClearContents
    For k = 0 To Me.RésultatListBox1.ListCount - 1
        f.Cells(k + 1, 5).Value = Me.RésultatListBox1.List(k, 0)
    Next k
    Unload Me
    End Sub
    

    Il est préférable de nommer tes variables pour éviter les erreurs de saisie.
    1
    1. sygmajf99
       
      Ça fonctionne ! Merci énormément.
      0