Créer une ListBox à sélection multiple dans un UserForm, Excel VBA

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électionnez Insérer et UserForm.
  • 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’index i est sélectionné. Si oui, l’élément est ajouté à la chaîne selectedItems, 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.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x