Tutoriel Excel VBA : comment utiliser la listbox dans un formulaire

Dans VBA, vous pouvez créer une zone de liste dans laquelle un utilisateur peut choisir l'une des options répertoriées. Listbox est souvent utilisé dans les formulaires utilisateur, mais peut également être utilisé dans une feuille de calcul. Dans ce tutoriel, vous apprendrez à créer, à remplir et à supprimer une zone de liste. Vous verrez également comment obtenir le choix de l’utilisateur dans VBA et l'utiliser dans le code.

Ce didacticiel présente également des exemples sur la façon de remplir et de gérer les zones de liste sur vos propres formulaires utilisateur. Il montre également comment présélectionner des éléments de la liste. Pour tester le code, mettez-le en surbrillance avec la souris, copiez (CTRL + C) et collez (CTRL + V) dans le code Userforms.

Les procédures sont à peu près les mêmes pour les zones de liste déroulante. Je vais donc ignorer les zones de liste déroulante ou les couvrir dans un autre tutoriel.

Table des matières

Créer une zone de liste (ListBox)

Remplir une zone de liste en code VBA

Utiliser la méthode VBA AddItem

Utiliser la propriété ListFillRange

Utiliser une zone de liste dans un formulaire utilisateur

Comment ajouter un contrôle de zone de liste dynamique ?

Comment effacer des éléments du contrôle de zone de liste à l'aide de VBA ?

Obtenir des données à partir d'un contrôle ListBox

Créer une zone de liste (ListBox)

Les zones de liste sont souvent utilisées comme contrôles sur les formulaires utilisateur. Ils affichent une liste d'éléments ou de valeurs, puis l'utilisateur peut en choisir un(e) ou plusieurs. Ce que l'utilisateur fait, détermine quoi faire ensuite.

Pour insérer une zone de liste dans la feuille de calcul, suivez les étapes ci-dessous :

  1. Tout d'abord, vous devez activer l'onglet « Développeur » visible sur le ruban afin de pouvoir accéder au VBA et aux commandes de contrôle ActiveX. Pour obtenir l'onglet « Développeur », ouvrez la boîte de dialogue « Options Excel » en cliquant sur Fichier ? Options. Cliquez sur « Personnaliser le ruban » et cochez la case « Développeur » :
  1. Accédez à l'onglet « Développeur », cliquez sur « Insérer » et sous « Contrôles ActiveX », sélectionnez « Zone de liste » :
  1. Ensuite, dessinez un rectangle dans la feuille de calcul Excel pour créer la zone de liste :
  1. Lorsque vous sélectionnez la zone de liste que vous avez insérée, vous pouvez cliquer sur « Propriétés » sous l'onglet « Développeur » :
  1. Ici, vous pouvez définir différentes propriétés de la zone de liste. Pour le début, j’ai changé l'attribut « Name » en « NameListBox ». Maintenant, je peux utiliser la Listbox avec ce nom dans le code VBA.

Une fois votre liste créée, vous pouvez y ajouter des éléments. La partie suivante vous montre comment le faire.

Remplir une zone de liste en code VBA

Avant d'afficher un UserForm qui utilise un contrôle ListBox, vous devrez probablement remplir le ListBox avec des éléments. Vous pouvez remplir une zone de liste au moment de la conception en utilisant des éléments stockés dans une plage de feuille de calcul ou au moment de l'exécution, en utilisant VBA.

Dans ce tutoriel, vous apprendez deux méthodes :

  • Écrire le code qui utilise la méthode « Addltem » pour ajouter les éléments ListBox.
  • Utiliser la propriété ListFillRange de la listeBox

Utiliser la méthode VBA AddItem

Dans la plupart des cas, une zone de liste doit être remplie lorsque le classeur est ouvert. Pour cette raison, vous devez créer un événement d'ouverture de classeur. Le code ajouté à l'événement d'ouverture de classeur sera exécuté par Excel VBA lorsque vous ouvrirez le classeur.

  1. Ouvrez l'éditeur Visual Basic en accédant à l’onglet « Développeur » et en cliquant sur le bouton « Visual Basic » :
  1. Double-cliquez sur « ThisWorkbook » dans l'Explorateur de projets.
  1. Choisissez « Workbook » dans la liste déroulante de gauche et choisissez « Open » dans la liste déroulante de droite.
  1. Pour ajouter des éléments à la zone de liste, ajoutez les lignes de code suivantes à l'événement d'ouverture de classeur :

Private Sub Workbook_Open()

With Feuil1.NameListBox

    .AddItem "Sara"

    .AddItem "Hanane"

    .AddItem "Sihame"

End With

End Sub

Voici à quoi doit ressembler votre code :

Remarque : Utilisez Feuil2 si votre zone de liste se trouve sur la deuxième feuille de calcul, Feuil3 si votre zone de liste se trouve sur la troisième feuille de calcul, etc. Si vous utilisez ces lignes de code en dehors de l'événement Workbook Open, vous souhaiterez peut-être ajouter la ligne de code suivante avant ces lignes de code : NameListBox.Clear. Cette ligne de code efface la zone de liste. De cette façon, vos éléments ne seront pas ajoutés plusieurs fois si vous exécutez votre code plusieurs fois.

  1. Enregistrez, fermez et rouvrez le fichier Excel. Comme vous pouvez le voir dans la capture ci-dessous, j’ai réussi à rempli ma Listbox avec 3 noms (Sara, Hanane, Sihame):

Utiliser la propriété ListFillRange

Une autre façon de remplir une Listbox est de laisser un utilisateur le faire. Une Listbox peut être liée à la plage de cellules. Par conséquent, chaque fois qu'un utilisateur entre une nouvelle valeur dans la plage de cellules, la zone de liste est mise à jour avec cette valeur.

Si vous souhaitez l'activer, vous devez aller dans les propriétés de ListBox et définir l'attribut ListFillRange:

Dans la capture ci-dessus, j’ai lié notre Listbox avec la plage de cellules A1:A5, où j’ai mis des exemples de noms (Latifa, Fatima, Sara, Khalid, Mina). Par conséquent, la zone de liste est désormais remplie avec ces noms.

Utiliser une zone de liste dans un formulaire utilisateur

Comme nous l'avons mentionné, Listbox est le plus souvent utilisé dans les formulaires utilisateur. Pour expliquer comment vous pouvez le faire, je vais d'abord insérer un formulaire utilisateur. Dans l'éditeur VBA, cliquez avec le bouton droit sur le nom du module, cliquez sur « Insertion » et choisissez « UserForm » :

Pour afficher les commandes d'insertion, vous devez activer la boîte à outils. Pour ce faire, cliquez sur l'icône Boîte à outils dans la barre d'outils. Juste après, vous obtiendrez les fenêtres avec tous les contrôles disponibles. Vous pouvez cliquer sur « Zone de liste » pour la créer dans le formulaire utilisateur :

J’ai nommé la zone de liste MaListBox :

Afin de remplir la zone de liste avec des valeurs, vous devez mettre le code suivant dans la méthode « Initialize » de l'objet « UserForm » :

Private Sub UserForm_Initialize()

With UserForm1.MaListBox

        .AddItem "Latifa"

        .AddItem "Salma"

        .AddItem "Imade"

        .AddItem "Karim"

        .AddItem "Loubna"

    End With

End Sub

Ce code se déclenche chaque fois qu'un utilisateur exécute le formulaire utilisateur et remplit la zone de liste avec ces 5 noms :

Comment ajouter un contrôle de zone de liste dynamique ?

Pour ajouter un contrôle de zone de liste dynamique sur un formulaire utilisateur à l'aide de VBA, suivez les étapes ci-dessous :

  1. Ajoutez un bouton de commande sur le formulaire utilisateur à partir de la boîte à outils.
  1. Faites un clic droit sur le bouton de commande, puis cliquez sur « Propriétés ».
  1. Remplacez la légende du bouton de commande par « Créer un ListBox ».
  1. Double-cliquez sur le bouton de commande. Maintenant, vous aurez le code suivant :

Private Sub CommandButton1_Click ()

End Sub

  1. Ajouter les instructions ci-dessous au code :

Set ListBox = UserForm1.Controls.Add(“Forms.ListBox.1”)

ListBox.Left = 20

ListBox.Top = 100

  1. Maintenant, cliquez sur F5 pour exécuter la macro.

Comment effacer des éléments du contrôle de zone de liste à l'aide de VBA ?

Pour effacer une Listbox dans VBA, vous devez utiliser la méthode « Clear » de l'objet Feuil1.MaListBox. Il supprimera tous les éléments de la liste. Voici le code :

Sub Clear_List()

UserForm1.ListBox1.Clear

End Sub

Obtenir des données à partir d'un contrôle ListBox

Comment obtenir des données d'un contrôle ListBox et les placer dans une feuille de calcul dans Excel ?

Le but d'une Listbox est d'obtenir le choix des utilisateurs. Pour récupérer une valeur sélectionnée par un utilisateur, vous devez utiliser ce code:

ListBox1.Text

ListBox1 est le nom du ListBox avec la sélection.

Voici un l’exemple de formulaire sur lequel je vais travailler :

Dans cet exemple, je vais utiliser le code ci-dessous pour récupérer l’élément sélectionné de la ListBox pour le placer dans la cellule C2 de la feuille de calcul :

ListBoxValue = ListBox1.Text

Sheets("Feuil1").Range("C2").Value = ListBoxValue

Cela place l'élément sélectionné dans la variable ListBoxValue, qui est ensuite utilisée pour entrer cette valeur dans la cellule C2 de la feuille de calcul nommée "Feuil11".

Où mettre le code ?

Le code ci-dessus, généralement, devrait aller à l'intérieur de la section de code pour un bouton de commande. Cela permet qu’un événement se produise avec les sélections ListBox après que l'utilisateur ait cliqué sur un bouton. Vous pouvez accéder à cette section de code en double-cliquant sur le bouton de commande du formulaire dans la fenêtre VBA.

Dans cet exemple, j’ai mis le code en haut de la section du bouton « Retourner la sélection », nommée « CommandButton1 ». La capture ci-dessous vous montre comment le faire :

Et voici le résultat de l’exécution :

Télécharger le fichier Excel demo 1 de ce tutoriel

Télécharger le fichier Excel demo 2 de ce tutoriel

Article publié le 19 Juin 2020par Hanane Mouqqadim