/ / Sélections de zones de liste multiples dans Excel VBA

Sélections de zones de liste multiples dans Excel VBA

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

Sélections de zones de liste multiples dans Excel VBA

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

1. Ouvrez Visual Basic Editor. Si l'explorateur de projet n'est pas visible, cliquez sur Affichage, Explorateur de projets.

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

Configuration de l'écran du formulaire utilisateur dans Excel VBA

3 Ajoutez les listes de sélection (la première à gauche, la deuxième à droite), les boutons de commande, les cases à cocher (la première à gauche, la deuxième à droite), les boutons de cadre et les boutons d'option (la première en haut, la seconde en dessous de la première). , etc). Une fois que cela est terminé, le résultat doit être cohérent avec l'image du Userform présentée précédemment. Par exemple, créez un contrôle de zone de liste en cliquant sur ListBox dans la boîte à outils. Ensuite, vous pouvez faire glisser une zone de liste sur le Userform. Lorsque vous arrivez au cadre "Sélectionner un type", n'oubliez pas de dessiner ce cadre avant de placer les trois boutons d'option.

4 Vous pouvez modifier les noms et les légendes des contrôles. Les noms sont utilisés dans le code Excel VBA. Les légendes sont celles qui apparaissent sur votre écran. Il est judicieux de changer le nom des contrôles, mais cela n’est pas nécessaire ici car nous n’avons que quelques contrôles dans cet exemple. Pour modifier la légende de Userform, boutons de commande, cases à cocher, cadres et boutons d’option, cliquez sur Afficher, Fenêtre Propriétés et cliquez sur chaque contrôle.

5. Pour afficher le formulaire utilisateur, 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 le Sub UserForm_Initialize. Lorsque vous utilisez la méthode Show pour Userform, ce sous-programme sera automatiquement exécuté.

6. Ouvrez Visual Basic Editor.

7. Dans l'Explorateur de projet, cliquez avec le bouton droit sur UserForm1, puis cliquez sur Afficher le code.

8. Commencez par déclarer la variable i de type Integer. Déclarez la variable dans la section Déclarations générales (en haut du code). De cette façon, vous ne devez déclarer la variable qu'une seule fois et vous pouvez les utiliser dans plusieurs sous-marins.

Dim i As Integer

9. Choisissez Userform dans la liste déroulante de gauche. Choisissez Initialiser dans la liste déroulante de droite.

10. 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 remplie et le troisième bouton d’option est défini par défaut.

Nous avons maintenant créé la première partie du Userform. Bien que cela ait déjà l'air sympa, rien ne se passera quand on cliquera sur les boutons de commande ou les autres contrôles.

11. Dans l'Explorateur de projet, double-cliquez sur UserForm1.

12. Double-cliquez sur le bouton Ajouter.

13. 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: VBA Excel parcourt la première zone de liste (numéro d'index de la liste égal à zéro (0) pour le premier élément de la liste) et, s'il est sélectionné, l'ajoute à la deuxième zone de liste.

14. Double-cliquez sur le bouton Supprimer.

15. 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: VBA Excel parcourt la deuxième zone de liste et, s'il est sélectionné, supprime l'élément. La variable counter conserve la trace du nombre d'éléments supprimés.

16. Double-cliquez sur le premier bouton d'option.

17. Ajoutez les lignes de code suivantes:

Private Sub OptionButton1_Click()

ListBox1.MultiSelect = 0
ListBox2.MultiSelect = 0

End Sub

18. Double-cliquez sur le deuxième bouton d'option.

19. Ajoutez les lignes de code suivantes:

Private Sub OptionButton2_Click()

ListBox1.MultiSelect = 1
ListBox2.MultiSelect = 1

End Sub

20. Double-cliquez sur le troisième bouton d'option.

21. Ajoutez les lignes de code suivantes:

Private Sub OptionButton3_Click()

ListBox1.MultiSelect = 2
ListBox2.MultiSelect = 2

End Sub

Explication: le paramètre "Select Type" peut être choisi en cliquant sur les boutons d'option. L'image du Userform montrée précédemment 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 lors de la conception. Pour ce faire, cliquez avec le bouton droit de la souris sur un contrôle de zone de liste, puis cliquez sur Propriétés. Définissez la propriété MultiSelect sur 0 - fmMultiSelectSingle, 1 - fmMultiSelectMulti ou 2 - fmMultiSelectExtented.

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

23. 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, vous pouvez sélectionner / désélectionner tous les éléments de la première zone de liste.

24. Double-cliquez sur la deuxième case à cocher pour ajouter les mêmes lignes de code. Remplacez uniquement CheckBox1 par CheckBox2 et ListBox1 par ListBox2.

Lisez aussi: