Créer une ListBox à sélection multiple dans un UserForm, Excel VBA
Voici un guide détaillé pour créer une ListBox à sélection multiple dans un UserForm en Excel VBA. Cela permet aux utilisateurs de sélectionner plusieurs éléments d’une liste. Nous allons aborder la création de ce contrôle avec des explications détaillées.
Étapes à suivre :
1. Créer un nouveau UserForm :
- Ouvrez l’éditeur VBA en appuyant sur
Alt + F11. - Dans l’éditeur VBA, faites un clic droit sur
VBAProject (NomDeVotreClasseur)dans l’explorateur de projets, puis sélectionnezInséreretUserForm. - Vous obtiendrez un nouveau UserForm que vous pourrez renommer pour qu’il soit plus significatif (par exemple
MultiSelectForm).
2. Ajouter des contrôles :
- ListBox : Depuis la boîte à outils, ajoutez une
ListBoxà votre UserForm. - CommandButton : Ajoutez un
CommandButton(ce bouton permettra de valider les sélections). - Optionnel : Vous pouvez aussi ajouter une étiquette (Label) pour donner des instructions à l’utilisateur ou tout autre contrôle nécessaire.
3. Configurer la ListBox :
- Dans la fenêtre des propriétés, définissez la propriété
MultiSelectde la ListBox à1 - fmMultiSelectMultipour permettre la sélection de plusieurs éléments. - Vous pouvez ajouter des éléments à la ListBox soit manuellement via la propriété
RowSource, soit dynamiquement via le code VBA.
4. Code VBA : Ajoutons maintenant le code pour remplir la ListBox avec des éléments et capturer les sélections.
Code VBA Exemple :
Private Sub UserForm_Initialize()
' Remplir la ListBox avec des données exemple
With ListBox1
.AddItem "Pomme"
.AddItem "Banane"
.AddItem "Orange"
.AddItem "Raisin"
.AddItem "Ananas"
.AddItem "Fraise"
End With
End Sub
Private Sub CommandButton1_Click()
Dim selectedItems As String
Dim i As Integer
' Boucler à travers la ListBox pour capturer les éléments sélectionnés
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
' Ajouter l'élément sélectionné à la chaîne de texte
selectedItems = selectedItems & ListBox1.List(i) & vbCrLf
End If
Next i
' Afficher les éléments sélectionnés (par exemple dans une boîte de message)
If Len(selectedItems) > 0 Then
MsgBox "Vous avez sélectionné : " & vbCrLf & selectedItems, vbInformation, "Sélections"
Else
MsgBox "Aucun élément sélectionné !", vbExclamation, "Aucune sélection"
End If
End Sub
Explication du Code :
- UserForm_Initialize :
- Cet événement s’exécute lorsque le UserForm est chargé. Il remplit la ListBox avec des éléments d’exemple (des fruits dans cet exemple).
- La méthode
AddItempermet d’ajouter chaque élément à la ListBox. Vous pouvez personnaliser cette liste avec les données de votre choix. - CommandButton1_Click :
- Cet événement est déclenché lorsque l’utilisateur clique sur le bouton de commande (CommandButton).
- Le code boucle à travers chaque élément de la ListBox en utilisant
ListCount(le nombre total d’éléments dans la ListBox). ListBox1.Selected(i)vérifie si l’élément à l’indexiest sélectionné. Si oui, l’élément est ajouté à la chaîneselectedItems, suivi d’un saut de ligne (vbCrLf).- Après avoir bouclé à travers tous les éléments, le code vérifie si des éléments ont été sélectionnés. Si c’est le cas, une boîte de message affiche les éléments sélectionnés. Sinon, une alerte informe l’utilisateur qu’aucun élément n’a été sélectionné.
Améliorations possibles :
-
- Remplir la ListBox dynamiquement : Vous pouvez remplir la ListBox à partir d’une plage dans une feuille de calcul. Par exemple :
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Feuille1")
Set rng = ws.Range("A1:A10")
' Adaptez la plage selon vos besoins
For Each cell In rng
ListBox1.AddItem cell.Value
Next cell
End Sub
-
- Retourner les éléments sélectionnés dans une feuille de calcul : Au lieu de simplement afficher les sélections dans une boîte de message, vous pouvez écrire les éléments sélectionnés dans une feuille de calcul :
Private Sub CommandButton1_Click()
Dim selectedItems As String
Dim i As Integer
Dim row As Integer
row = 1 ' Ligne de départ pour l'affichage
' Boucler à travers la ListBox pour capturer les éléments sélectionnés
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i)
Then
' Écrire l'élément sélectionné dans la feuille de calcul
ThisWorkbook.Sheets("Feuille1").Cells(row, 1).Value = ListBox1.List(i)
row = row + 1
End If
Next i
End Sub
Cela écrira les éléments sélectionnés dans Feuille1, à partir de la cellule A1.
Résumé :
- Une ListBox à sélection multiple dans un UserForm permet à l’utilisateur de sélectionner plusieurs éléments dans une liste.
- Vous pouvez remplir la ListBox dynamiquement et capturer les éléments sélectionnés via VBA.
- La propriété
MultiSelectest essentielle pour permettre les sélections multiples. - Vous pouvez personnaliser les actions à effectuer sur les sélections, comme les afficher dans une boîte de message ou les enregistrer dans une feuille de calcul.