Créer un menu pour afficher les feuilles d'un classeur

J'ai de nombreuses feuilles dans mon classeur et je vourais disposer d'un menu pour pouvoir naviguer aisément.

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 sub

pour 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 sub
sub SupprimerLeMenuFeuilles()
 With Application.CommandBars
  If Not .FindControl(Tag:=cTag) Is Nothing Then
    .FindControl(Tag:=cTag).Delete
  End If
 End With
 end sub
sub 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 sub
sub ActiverLaFeuille()
 CommandBars("Workbook tabs").ShowPopup
 end sub

Auteur :

Mots clefs associés à cette page : , , , ,