Liste déroulante onglets Excel
Créer une liste déroulante dynamique des onglets dans Excel avec mise à jour automatique
🎯 Dans ce tutoriel, je vous explique comment créer une liste déroulante des onglets dans Excel avec une mise à jour automatique.
✅ Ainsi, au lieu de chercher manuellement un onglet spécifique, il vous suffit de sélectionner l'onglet souhaité dans la liste déroulante, ce qui réduit le temps passé à naviguer dans votre classeur Excel.
👍 De plus, cette liste déroulante sera présente sur tous vos onglets, ce qui rend vos classeurs interactifs et efficaces.
➡️ Mais ce n'est pas tout, lorsque vous ajoutez ou supprimez un onglet, la liste déroulante se met à jour automatiquement.
Voir la vidéo pour suivre les différentes étapes :
Pour vous entraîner :
Télécharger le Fichier Excel utilisé dans la vidéo
👇
Après avoir ouvert le lien,
- vous cliquez sur "Fichier",
- puis sur "Enregistrer sous", ou sur "Créer une copie"
- et sur "Télécharger une copie".
📌↪️→ Code VBA à utiliser pour créer une liste déroulante dynamique des onglets dans Excel
1ère macro à insérer sur une feuille de module :
Sub ListesDéroulantesSurOnglets()
Dim ws As Worksheet
Dim cell As Range
Dim dropdownRange As String
Dim sheetNames As String
Dim sheet As Worksheet
' Définir la plage de cellules pour la liste déroulante
dropdownRange = "A1" ' Changez cette valeur pour la cellule souhaitée
' Lire les noms des onglets
sheetNames = ""
For Each sheet In ThisWorkbook.Worksheets
sheetNames = sheetNames & sheet.Name & ","
Next sheet
' Retirer la dernière virgule
sheetNames = Left(sheetNames, Len(sheetNames) - 1)
' Ajouter la liste déroulante à chaque onglet
For Each ws In ThisWorkbook.Worksheets
Set cell = ws.Range(dropdownRange)
With cell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=sheetNames
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
' Formater la cellule
cell.RowHeight = 35
cell.ColumnWidth = 12
cell.Font.Bold = True
cell.Font.Color = RGB(255, 255, 255)
cell.HorizontalAlignment = xlCenter
cell.VerticalAlignment = xlCenter
cell.WrapText = True
cell.Interior.Color = RGB(126, 53, 14) ' Couleur de remplissage #7E350E
Next ws
End Sub
2ème macro à insérer dans "Thisworkbook" :
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim newSheetName As String
' Demander le nom du nouvel onglet
newSheetName = InputBox("Entrez le nom du nouvel onglet :")
If newSheetName <> "" Then
Sh.Name = newSheetName
End If
' Appeler la macro pour mettre à jour la liste déroulante
Call ListesDéroulantesSurOnglets
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ws As Worksheet
Dim dropdownRange As String
' Définir la plage de cellules pour la liste déroulante
dropdownRange = "A1" ' Changez cette valeur pour la cellule souhaitée
' Vérifier si la cellule modifiée est celle de la liste déroulante
If Not Intersect(Target, Sh.Range(dropdownRange)) Is Nothing Then
' Parcourir les onglets pour trouver celui correspondant à la valeur sélectionnée
For Each ws In ThisWorkbook.Worksheets
If ws.Name = Target.Value Then
Application.EnableEvents = False
ws.Activate
ws.Range(dropdownRange).Value = ws.Name ' Mettre à jour la cellule A1 avec le nom de l'onglet
Application.EnableEvents = True
Exit For
End If
Next ws
End If
End Sub
Private Sub Workbook_SheetRename(ByVal Sh As Object, ByVal OldName As String, ByVal NewName As String)
' Appeler la macro pour mettre à jour la liste déroulante
Call ListesDéroulantesSurOnglets
End Sub
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
' Appeler la macro pour mettre à jour la liste déroulante
Call ListesDéroulantesSurOnglets
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim dropdownRange As String
dropdownRange = "A1" ' Changez cette valeur pour la cellule souhaitée
' Mettre à jour la cellule de la liste déroulante avec le nom de l'onglet actif
Application.EnableEvents = False
Sh.Range(dropdownRange).Value = Sh.Name
Application.EnableEvents = True
' Appeler la macro pour mettre à jour la liste déroulante
Call ListesDéroulantesSurOnglets
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count = 1 Then
If Target.Address = "$A$1" Then
Application.EnableEvents = False
Call ListesDéroulantesSurOnglets
Application.EnableEvents = True
End If
End If
End Sub