Créer une zone de liste déroulante dans UserForm, Excel VBA
Pour créer une zone de liste déroulante (ComboBox) dans un UserForm en VBA Excel, il y a plusieurs étapes à suivre. Voici un guide détaillé avec un exemple de code pour vous aider à comprendre et à implémenter une telle fonctionnalité.
Étapes à suivre pour créer une zone de liste déroulante dans un UserForm en VBA
1. Création du UserForm :
- Allez dans l’éditeur VBA (appuyez sur Alt + F11 dans Excel).
- Cliquez sur Insertion > UserForm pour créer un nouveau formulaire.
2. Ajout d’un ComboBox :
- Dans la boîte à outils qui apparaît, choisissez le contrôle ComboBox (zone de liste déroulante) et cliquez sur le formulaire pour l’ajouter.
3. Ajouter du code pour remplir la liste déroulante :
- Vous pouvez remplir la liste déroulante de différentes manières : en la remplissant manuellement avec des valeurs, ou en les extrayant depuis une plage de cellules dans Excel.
Exemple de code détaillé
Imaginons que nous voulons créer un UserForm avec un ComboBox qui contient une liste d’options provenant d’une plage de cellules sur la feuille Excel. Voici un exemple de code complet :
Étape 1 : Créer le UserForm
Dans l’éditeur VBA, créez un nouveau UserForm et ajoutez un ComboBox et un bouton (CommandButton) pour fermer le formulaire.
Étape 2 : Code pour remplir la liste déroulante
Code pour le UserForm :
Ouvrez le code du UserForm et ajoutez le code suivant :
Private Sub UserForm_Initialize() ' Remplir la liste déroulante (ComboBox) avec des données provenant d'une plage Excel Dim rng As Range Dim cell As Range ' Définir la plage de données à partir de la feuille active (par exemple, A1:A10) Set rng = ThisWorkbook.Sheets("Feuil1").Range("A1:A10") ' Effacer les éléments précédents du ComboBox ComboBox1.Clear ' Parcourir chaque cellule de la plage et ajouter sa valeur dans le ComboBox For Each cell In rng If cell.Value <> "" Then ComboBox1.AddItem cell.Value End If Next cell End Sub
Explication du code :
- UserForm_Initialize : Cette procédure se lance automatiquement lorsque le UserForm est ouvert.
- Définition de la plage rng : Nous définissons la plage de cellules à partir de laquelle les valeurs de la liste déroulante seront extraites. Dans cet exemple, la plage est A1:A10 sur la feuille « Feuil1 ».
- ComboBox1.Clear : Avant d’ajouter de nouveaux éléments, nous supprimons les anciens éléments du ComboBox pour éviter les doublons.
- Boucle For Each : Cette boucle parcourt chaque cellule de la plage définie, et si la cellule n’est pas vide, la valeur de la cellule est ajoutée à la liste déroulante avec ComboBox1.AddItem cell.Value.
Ajouter un bouton pour fermer le UserForm :
Ajoutez un bouton sur le UserForm avec le code suivant pour fermer le formulaire lorsque l’utilisateur clique dessus :
Private Sub CommandButton1_Click() ' Fermer le UserForm Unload Me End Sub
Étape 3 : Code pour ouvrir le UserForm
Maintenant, vous devez ajouter un autre petit morceau de code pour ouvrir le formulaire. Vous pouvez placer ce code dans un module standard.
Ouvrir le UserForm :
Allez dans un module standard (ou créez-en un) et ajoutez ce code :
Sub OuvrirUserForm() UserForm1.Show End Sub
Cela ouvre le UserForm avec le ComboBox rempli dès que vous lancez la macro OuvrirUserForm.
Étape 4 : Exécution du code
- Fermez l’éditeur VBA.
- Allez dans Excel et exécutez la macro OuvrirUserForm (en appuyant sur Alt + F8, puis en sélectionnant OuvrirUserForm et en cliquant sur Exécuter).
- Vous verrez que le UserForm s’ouvre avec la liste déroulante remplie avec les valeurs de la plage A1:A10 de la feuille « Feuil1 ».
Option supplémentaire : Ajouter des valeurs directement dans le code
Si vous voulez ajouter des valeurs manuellement au lieu de les extraire depuis une plage de cellules, vous pouvez utiliser ce code dans UserForm_Initialize :
Private Sub UserForm_Initialize() ' Ajouter des éléments manuellement au ComboBox ComboBox1.AddItem "Option 1" ComboBox1.AddItem "Option 2" ComboBox1.AddItem "Option 3" ComboBox1.AddItem "Option 4" End Sub
Résumé
- UserForm_Initialize : C’est l’endroit où vous ajoutez des éléments à la zone de liste déroulante (ComboBox).
- ComboBox1.Clear : Efface les éléments existants avant d’ajouter de nouveaux éléments.
- ComboBox1.AddItem : Ajoute un élément dans la liste déroulante.
- CommandButton1_Click : Le code pour fermer le UserForm lorsque l’utilisateur clique sur le bouton.
Ce code vous permet de créer un formulaire utilisateur interactif dans lequel vous pouvez sélectionner des éléments d’une liste déroulante (ComboBox) qui est remplie dynamiquement avec des données provenant de la feuille de calcul ou ajoutées manuellement.