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 !!!!!
A voir également:
- Excel VBA - Problèmes multisélection
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
1 réponse
bonjour
Pour résoudre tes 2 problèmes je te propose ceci :
Il est préférable de nommer tes variables pour éviter les erreurs de saisie.
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.
sygmajf99
Ça fonctionne ! Merci énormément.