Excel VBA - Problèmes multisélection
Résolu
sygmajf99
-
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 !!!!!
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
-
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.