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érer
etUserForm
. - 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é
MultiSelect
de la ListBox à1 - fmMultiSelectMulti
pour 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
AddItem
permet 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’indexi
est 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é
MultiSelect
est 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.