La propriété MultiSelect dans Excel VBA permet à un utilisateur de sélectionner plusieurs éléments dans une zone de liste. Le Userform nous allons créer se présente comme suit:

Multiple List Box Selections in Excel VBA

Pour créer cette Userform, exécutez les étapes suivantes.

  1. Ouvrez le Visual Basic Editor. Si l’Explorateur de projets n’est pas visible, cliquez sur Afficher, Project Explorer.

  2. Cliquez sur Insérer, Userform. Si la boîte à outils n’apparaît pas automatiquement, cliquez sur Affichage, Boîte à outils. Votre écran doit être configuré comme ci-dessous.

Userform Screen Setup in Excel VBA

  1. Ajouter les zones de liste (première à gauche, la deuxième à droite), des boutons de commande, cases à cocher (première à gauche, la deuxième à droite), les boutons de cadre et d’option (premier en haut, le deuxième ci-dessous la première, et ainsi de suite). Une fois cet exercice terminé, le résultat devrait être compatible avec l’image du Userform indiqué précédemment. Par exemple, créez un contrôle de zone de liste en cliquant sur ListBox de la boîte à outils. Ensuite, vous pouvez faire glisser une zone de liste sur la Userform. Lorsque vous arrivez au cadre « Sélectionner le type », souvenez-vous de dessiner ce cadre avant de placer les trois boutons d’option en elle.

  2. Vous pouvez modifier les noms et les légendes des contrôles. Les noms sont utilisés dans le code VBA Excel. Les légendes sont celles qui apparaissent sur votre écran. Il est bon de changer les noms des contrôles, mais il est pas nécessaire ici parce que nous avons seulement quelques contrôles dans cet exemple. Pour changer la légende du Userform, des boutons de commande, cases à cocher, boutons d’image et d’option, cliquez sur Affichage, fenêtre Propriétés et cliquez sur chaque contrôle.

  3. Pour afficher le Userform, placez un bouton de commande sur votre feuille de calcul et ajoutez la ligne de code suivante:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Nous allons maintenant créer la sous UserForm_Initialize. Lorsque vous utilisez la méthode Show pour la Userform, ce sous sera exécuté automatiquement.

  1. Ouvrez Visual Basic Editor.

  2. Dans l’Explorateur de projets, cliquez droit sur UserForm1 puis cliquez sur Afficher le code.

  3. Tout d’abord, déclarer la i variable de type entier. Déclarer la variable dans la section Déclarations générales (en haut du code). De cette façon, il suffit de déclarer la variable une fois et vous pouvez les utiliser dans plusieurs sous-marins.

Dim i As Integer
  1. Choisissez Userform dans la liste déroulante de gauche. Choisissez Initialiser de la droite liste déroulante.

  2. Ajoutez les lignes de code suivantes:

Private Sub UserForm_Initialize()

With ListBox1

.AddItem "Sales"

.AddItem "Production"

.AddItem "Logistics"

.AddItem "Human Resources"

End With

OptionButton3.Value = True

End Sub

Explication: la première zone de liste sera rempli et le troisième bouton d’option est activée par défaut.

Nous avons créé la première partie de la Userform. Bien qu’il semble déjà soignée, rien ne se passera encore lorsque l’on clique sur les boutons de commande ou les autres contrôles.

  1. Dans l’Explorateur de projets, double-cliquez sur UserForm1.

  2. Double-cliquez sur le bouton Ajouter.

  3. Ajoutez les lignes de code suivantes:

Private Sub CommandButton1_Click()

For i = 0 To ListBox1.ListCount - 1

If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)

Next i

End Sub

Explication: boucles Excel VBA à travers la première zone de liste (numéro d’index de la liste de zéro (0) pour le premier élément dans la liste), et, si elle est sélectionnée, ajoute l’article à la deuxième zone de liste.

  1. Double-cliquez sur le bouton Supprimer.

  2. Ajoutez les lignes de code suivantes:

Private Sub CommandButton2_Click()

Dim counter As Integer

counter = 0

For i = 0 To ListBox2.ListCount - 1

If ListBox2.Selected(i - counter) Then

ListBox2.RemoveItem (i - counter)

counter = counter + 1

End If

Next i

CheckBox2.Value = False

End Sub

Explication: Excel VBA effectue une boucle dans la deuxième zone de liste et, si elle est sélectionnée, supprime l’élément. La variable compteur détient une trace du nombre d’éléments supprimés.

  1. Double-cliquez sur le premier bouton d’option.

  2. Ajoutez les lignes de code suivantes:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0

ListBox2.MultiSelect = 0

End Sub
  1. Double-cliquez sur le deuxième bouton d’option.

  2. Ajoutez les lignes de code suivantes:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1

ListBox2.MultiSelect = 1

End Sub
  1. Double-cliquez sur le troisième bouton d’option.

  2. Ajoutez les lignes de code suivantes:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2

ListBox2.MultiSelect = 2

End Sub

Explication: le réglage « Sélectionner le type » peut être choisi en cliquant sur les boutons d’option. L’image du Userform montré les années précédentes donne une description de chaque paramètre. Au lieu de configurer ce paramètre lors de l’exécution, vous pouvez également configurer ce paramètre au moment de la conception. Pour ce faire, clic droit sur un contrôle de zone de liste, puis cliquez sur Propriétés. Définissez la propriété MultiSelect à 0 – fmMultiSelectSingle, 1 – fmMultiSelectMulti ou 2 – fmMultiSelectExtented.

  1. Double-cliquez sur la première case à cocher.

  2. Ajoutez les lignes de code suivantes:

Private Sub CheckBox1_Click()

If CheckBox1.Value = True Then

For i = 0 To ListBox1.ListCount - 1

ListBox1.Selected(i) = True

Next i

End If

If CheckBox1.Value = False Then

For i = 0 To ListBox1.ListCount - 1

ListBox1.Selected(i) = False

Next i

End If

End Sub

Explication: en cochant la première case à cocher, tous les éléments de la première zone de liste peut être sélectionnée / désélectionnée.

  1. Double-cliquez sur la deuxième case à cocher pour ajouter les mêmes lignes de code.

Ne remplacez CheckBox1 avec CheckBox2 et ListBox1 avec ListBox2.