Créer un menu pour afficher les feuilles d'un classeur
N'oublie pas qu'en faisant un clic droit sur les flèches qui permettent de passer d'une feuille à une autre, tu peux avoir cette liste. Cela dit, la macro ci dessous te crée le menu demandé. Elle a été adaptée d'une macro de Chip Pearson, elle même traduite par frédéric Sigonneau. Elle te permet de paramétrer le nombre de feuilles à faire apparaitre dans ton menu ou de choisir de toutes les montrer. Dans le workbook_open:
Private sub Workbook_Open()
'On inscrit un nombre par défaut dans une cellule d'une des feuilles du classeur par exemple :
LeNombre = Sheets("Feuil1").Range("nbf").Value
CreerLeMenuFeuilles (LeNombre)
end subpour supprimer ce menu à la fermeture du classeur : dans le workbook_beforeclose:
Private sub Workbook_BeforeClose(Cancel As Boolean) SupprimerLeMenuFeuilles end sub
et dans un module ordinaire:
Public LeNombre As Integer Const cTag As String = "SpecialMisange"
sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles = Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , , ,True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définir le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
end subsub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
end subsub ToutesLesFeuilles() CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count) end sub
sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu afficher ?", _
"Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
end subsub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
end subAuteur : Papou
Mots clefs associés à cette page : feuille, sheet, onglet, worksheet, menu
- Vous devez vous identifier ou créer un compte pour écrire des commentaires
