Excel VBA - Problèmes multisélection

Résolu/Fermé
sygmajf99 - 7 janv. 2011 à 21:28
 sygmajf99 - 8 janv. 2011 à 00:55
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 !!!!!
A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 713
7 janv. 2011 à 23:02
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
Ça fonctionne ! Merci énormément.
0