Créer une Zone de Liste Déroulante dans Excel avec VBA
Une zone de liste déroulante (ou ComboBox) permet à l’utilisateur de sélectionner une valeur prédéfinie dans une liste. Voici un guide étape par étape pour créer une telle zone de liste déroulante à l’aide de VBA dans Excel.
1. Activer l’onglet Développeur
Pour travailler avec VBA, l’onglet Développeur doit être activé dans Excel.
- Cliquez sur l’onglet Fichier > Options.
- Dans la boîte Options Excel, sélectionnez Personnaliser le ruban.
- Cochez la case Développeur et cliquez sur OK.
2. Ajouter une Zone de Liste Déroulante (ComboBox)
- Allez dans l’onglet Développeur.
- Cliquez sur Insertion > Contrôles ActiveX > Zone de liste déroulante (ComboBox).
- Dessinez la Zone de liste déroulante sur votre feuille de calcul.
3. Accéder à l’Éditeur VBA
- Faites un clic droit sur la Zone de liste déroulante créée.
- Cliquez sur Afficher le code. Cela ouvrira l’éditeur VBA.
4. Ajouter une Liste d’Éléments à la ComboBox
Pour remplir la liste déroulante, insérez du code VBA dans l’éditeur VBA. Voici un exemple simple pour remplir une ComboBox :
Code VBA
Private Sub Workbook_Open()
With Sheets("Feuil1").ComboBox1
.Clear ' Efface les anciennes entrées
.AddItem "Option 1"
.AddItem "Option 2"
.AddItem "Option 3"
.AddItem "Option 4"
End With
End Sub
Instructions :
- ComboBox1 est le nom de la zone déroulante. Vous pouvez vérifier son nom dans la fenêtre Propriétés.
- Sheets(“Feuil1”) représente la feuille contenant votre ComboBox.
- Les lignes
.AddItem "Option X"
ajoutent les éléments à la liste déroulante.
5. Remplir la ComboBox depuis une Plage de Données
Si les éléments à afficher se trouvent dans une plage de cellules (par exemple A1:A10
), utilisez le code suivant :
Code VBA :
Private Sub Workbook_Open()
Dim i As Range
With Sheets("Feuil1").ComboBox1
.Clear
For Each i In Sheets("Feuil1").Range("A1:A10")
.AddItem i.Value
Next i
End With
End Sub
6. Ajouter une Action lors de la Sélection d’une Valeur
Pour exécuter une action lorsque l’utilisateur sélectionne une valeur dans la ComboBox, utilisez l’événement Change
:
Exemple de Code VBA :
Private Sub ComboBox1_Change()
MsgBox "Vous avez sélectionné : " & ComboBox1.Value
End Sub
7. Tester le Code VBA
- Enregistrez votre fichier Excel en format .xlsm (classeur prenant en charge les macros).
- Fermez et rouvrez le fichier.
- Testez la Zone de liste déroulante en sélectionnant une valeur.
8. Personnaliser la Zone de Liste Déroulante
- Sélectionnez la ComboBox.
- Accédez à la fenêtre Propriétés dans l’onglet Développeur pour ajuster les paramètres (exemple : LinkedCell pour lier la sélection à une cellule).
Pour appliquer automatiquement le code VBA dès l’ouverture du fichier Excel ou à un événement précis (comme sélectionner une cellule, ou activer une feuille), suivez les étapes ci-dessous.
1. Automatisation à l’ouverture du fichier Excel
Si vous voulez que la zone de liste déroulante soit remplie ou configurée automatiquement dès l’ouverture du fichier, utilisez l’événement Workbook_Open
.
Étapes :
- Appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
- Dans l’éditeur VBA :
- Double-cliquez sur ThisWorkbook (dans le volet de gauche sous VBAProject).
- Collez le code suivant dans la fenêtre :
Private Sub Workbook_Open()
With Sheets("Feuil1").ComboBox1
.Clear
.AddItem "Option 1"
.AddItem "Option 2"
.AddItem "Option 3"
.AddItem "Option 4"
End With
End Sub
Explication :
- Le code est déclenché par l’événement Workbook_Open.
- À l’ouverture du fichier, les éléments seront ajoutés automatiquement à la ComboBox.
2. Automatisation à l’activation de la feuille
Si vous souhaitez que le code VBA s’exécute automatiquement dès qu’une feuille spécifique est activée, utilisez l’événement Worksheet_Activate
.
Étapes :
- Dans l’éditeur VBA, double-cliquez sur la feuille concernée (par exemple Feuil1) dans le volet de gauche.
- Collez le code suivant :
Private Sub Worksheet_Activate()
With Me.ComboBox1
.Clear
.AddItem "Option 1"
.AddItem "Option 2"
.AddItem "Option 3"
.AddItem "Option 4"
End With
End Sub
Explication :
- Le code s’exécute automatiquement dès que la feuille est activée.
Me
fait référence à la feuille sur laquelle le code est placé.
3. Automatisation via un événement de sélection
Pour exécuter automatiquement le VBA lorsque l’utilisateur sélectionne une cellule spécifique, utilisez Worksheet_SelectionChange
.
Exemple de Code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
With Me.ComboBox1
.Clear
.AddItem "Option 1"
.AddItem "Option 2"
.AddItem "Option 3"
End With
End If
End Sub
Explication :
- Ce code s’exécute lorsque la cellule
A1
est sélectionnée. - La liste déroulante est remplie automatiquement.
4. Enregistrer le fichier correctement
Pour que les macros fonctionnent :
- Enregistrez votre fichier au format .xlsm (Classeur Excel prenant en charge les macros).
- Cliquez sur Fichier > Enregistrer sous.
- Sélectionnez Classeur Excel prenant en charge les macros (.xlsm).
- Fermez et rouvrez le fichier.
5. Activer les macros
Lors de l’ouverture du fichier, Excel vous demandera d’autoriser les macros :
- Cliquez sur Activer le contenu dans la barre de notification.
Résumé des méthodes automatiques
Événement | Déclenchement | Où placer le code |
---|---|---|
Workbook_Open | À l’ouverture du fichier | ThisWorkbook |
Worksheet_Activate | À l’activation d’une feuille | Feuille VBA concernée |
Worksheet_SelectionChange | À la sélection d’une cellule | Feuille VBA concernée |
Avec ces options, vous pouvez automatiser votre VBA pour remplir la zone de liste déroulante selon vos besoins.
Pour lier une ComboBox à plusieurs feuilles, vous pouvez utiliser du code VBA permettant d’accéder aux différentes feuilles, lire des données dans des plages spécifiques et les remplir dans une ComboBox.
Voici plusieurs méthodes pour gérer une ComboBox (zone de liste déroulante) liée à plusieurs feuilles dans Excel.
1. Remplir la ComboBox avec des données issues de plusieurs feuilles
Étapes :
- Créez une ComboBox sur une feuille spécifique via l’onglet Développeur (contrôle ActiveX).
- Accédez à l’éditeur VBA en appuyant sur Alt + F11.
- Collez le code suivant dans ThisWorkbook ou dans un module standard.
Code VBA :
Private Sub Workbook_Open()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Range, j As Range
' Définir les feuilles
Set ws1 = ThisWorkbook.Sheets("Feuil1")
Set ws2 = ThisWorkbook.Sheets("Feuil2")
' Effacer les éléments existants de la ComboBox
With ws1.ComboBox1
.Clear
' Remplir depuis Feuil1 (plage A1:A10)
For Each i In ws1.Range("A1:A10")
.AddItem i.Value
Next i
' Remplir depuis Feuil2 (plage B1:B5)
For Each j In ws2.Range("B1:B5")
.AddItem j.Value
Next j
End With
End Sub
Explication :
- Définition des feuilles :
Set ws1
etSet ws2
permettent de sélectionner les feuilles à utiliser. - Lecture des plages :
- La boucle
For Each
parcourt les cellules d’une plage définie (ex. :A1:A10
dans Feuil1). - Les valeurs trouvées sont ajoutées à la ComboBox avec
.AddItem
.
- La boucle
- Effacement préalable :
.Clear
supprime les anciennes entrées de la ComboBox avant d’en ajouter de nouvelles.
2. Dynamiser la sélection des feuilles
Si vous voulez que le code ajoute automatiquement des données de toutes les feuilles dans le classeur, utilisez cette version :
Code VBA :
Private Sub Workbook_Open()
Dim ws As Worksheet
Dim cell As Range
' Effacer les éléments existants
With ThisWorkbook.Sheets("Feuil1").ComboBox1
.Clear
' Parcourir toutes les feuilles
For Each ws In ThisWorkbook.Sheets
' Parcourir les cellules dans une plage spécifique (par exemple A1:A10)
For Each cell In ws.Range("A1:A10")
If Not IsEmpty(cell.Value) Then
.AddItem cell.Value
End If
Next cell
Next ws
End With
End Sub
Explication :
- Toutes les feuilles : La boucle
For Each ws In ThisWorkbook.Sheets
parcourt chaque feuille du classeur. - Ajout conditionnel : Seules les cellules non vides sont ajoutées à la ComboBox (
If Not IsEmpty(cell.Value)
). - Plage commune : Le code utilise une plage commune (ici
A1:A10
) dans toutes les feuilles.
3. Liaison dynamique pour mise à jour en temps réel
Si vous voulez que la ComboBox se mette à jour à chaque activation d’une feuille ou modification, utilisez Worksheet_Activate
:
Code VBA :
Private Sub Worksheet_Activate()
Dim ws As Worksheet
Dim cell As Range
' Effacer les anciennes entrées
With Me.ComboBox1
.Clear
' Ajouter des données depuis toutes les feuilles
For Each ws In ThisWorkbook.Sheets
For Each cell In ws.Range("A1:A10")
If Not IsEmpty(cell.Value) Then
.AddItem ws.Name & " - " & cell.Value ' Ajouter le nom de la feuille
End If
Next cell
Next ws
End With
End Sub
Ajout d’une référence au nom de la feuille
- Avec
ws.Name & " - " & cell.Value
, vous pouvez voir dans la ComboBox d’où provient chaque donnée.
4. Enregistrer et activer les macros
- Enregistrez le fichier en format .xlsm.
- À l’ouverture du fichier, assurez-vous d’activer les macros.
- Testez la ComboBox pour vérifier qu’elle récupère bien les données des feuilles.
Résumé des options
Méthode | Avantage |
---|---|
Feuilles fixes (Feuil1, Feuil2) | Personnalisation précise des feuilles ciblées |
Toutes les feuilles dynamiquement | Automatisation complète pour tout le classeur |
Mise à jour à l’activation | Synchronisation en temps réel |