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.
Pour travailler avec VBA, l’onglet Développeur doit être activé dans Excel.
Pour remplir la liste déroulante, insérez du code VBA dans l’éditeur VBA. Voici un exemple simple pour remplir une ComboBox :
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
.AddItem "Option X" ajoutent les éléments à la liste déroulante.Si les éléments à afficher se trouvent dans une plage de cellules (par exemple A1:A10), utilisez le code suivant :
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
Pour exécuter une action lorsque l’utilisateur sélectionne une valeur dans la ComboBox, utilisez l’événement Change :
Private Sub ComboBox1_Change()
MsgBox "Vous avez sélectionné : " & ComboBox1.Value
End Sub
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.
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.
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
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.
Private Sub Worksheet_Activate()
With Me.ComboBox1
.Clear
.AddItem "Option 1"
.AddItem "Option 2"
.AddItem "Option 3"
.AddItem "Option 4"
End With
End Sub
Me fait référence à la feuille sur laquelle le code est placé.Pour exécuter automatiquement le VBA lorsque l’utilisateur sélectionne une cellule spécifique, utilisez Worksheet_SelectionChange.
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
A1 est sélectionnée.Pour que les macros fonctionnent :
Lors de l’ouverture du fichier, Excel vous demandera d’autoriser les macros :
| É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.
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
Set ws1 et Set ws2 permettent de sélectionner les feuilles à utiliser.For Each parcourt les cellules d’une plage définie (ex. : A1:A10 dans Feuil1)..AddItem..Clear supprime les anciennes entrées de la ComboBox avant d’en ajouter de nouvelles.Si vous voulez que le code ajoute automatiquement des données de toutes les feuilles dans le classeur, utilisez cette version :
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
For Each ws In ThisWorkbook.Sheets parcourt chaque feuille du classeur.If Not IsEmpty(cell.Value)).A1:A10) dans toutes les feuilles.Si vous voulez que la ComboBox se mette à jour à chaque activation d’une feuille ou modification, utilisez Worksheet_Activate :
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
ws.Name & " - " & cell.Value, vous pouvez voir dans la ComboBox d’où provient chaque donnée.| 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 |
Quand on parle de nature des mots, beaucoup d’élèves ont l’impression d’entrer dans un chapitre…
Si la trigonométrie te paraît floue, rassure-toi : en 3ème, elle repose sur quelques réflexes…
Si vous voulez connaître votre signe chinois sans passer par des tableaux interminables, vous êtes…
Quand on finance une voiture, tout le monde voit à peu près de quoi il…
On connaît tous ce moment : on tombe sur une offre de leasing “à partir…
Dans l’industrie, parler de maintenance sans préciser le niveau d’intervention revient souvent à créer de…
This website uses cookies.