Comment créer des menus personnalisés dans votre feuille de calcul Excel via VBA

Partage maintenant:

Le ruban Excel peut être modifié pour s'adapter à un travail particulier. Cet exercice crée de nouveaux menus qui dirigent les utilisateurs vers des feuilles spécifiques pertinentes pour leur tâche.

Dans cet article, nous vous présenterons comment créer des menus personnalisés dans votre feuille de calcul Excel, comme ceci :Créez des menus personnalisés dans votre feuille de calcul Excel

Cet article suppose que le lecteur a affiché le ruban Développeur et est familiarisé avec l'éditeur VBA. Si ce n'est pas le cas, veuillez Google "Excel Developer Tab" ou "Excel Code Window".

Classeur

Le classeur à utiliser comporte un certain nombre de feuilles. Nous vous suggérons d'utiliser l'exemple trouvé ici. Cela ressemble à ceci.L'exemple de cahier d'exercices

Les quatre premières feuilles sont dysfonctionnelles, étant utilisées dans cet exercice uniquement à des fins de navigation.

La cinquième feuille contiendra la structure de menu personnalisée particulière à ce classeur. À l'heure actuelle, il devrait être vide, à l'exception d'un bouton Test.

Ajouter la structure du menu

Copiez le bloc de texte suivant dans la cellule A1 de la feuille "MenuSheet".

Niveau, Légende, Position/Macro, Séparateur

1,&Outils utilisateur,10

2, Afficher le tableau de bord, sélectionner le tableau de bord

2, Ajouter nouveau, , VRAI

3,Client,SélectionnerClient

3, emplacement, sélectionnez l'emplacement

3,Gestionnaire,SélectionnerGestionnaire

2,Fermer,FermerFichier

Formater la structure du menu

Ces données CSV se retrouvent dans la colonne A. Pour les formater en cellules Excel individuelles, sélectionnez la colonne A et utilisez 'Texte aux colonnes' dans le Onglet Données. Le délimiteur serait "virgule".Formatez-le dans des cellules Excel individuelles

Ce qui précède, une fois que nous aurons ajouté le code approprié, nous donnera la structure de menu basée sur le niveau à gauche.La structure de menu basée sur le niveau

Le premier niveau, dans cet exercice, est l'arbitragerarment placé en tant que dixième élément de la barre de menus, comme vous le verrez lorsque toute la largeur du classeur est affichée.

Créer et détruire des menus

Puisque nous ne voulons que les nouveaux menus pour ce classeur spécifique, nous allons les créer et les détruire à l'ouverture et à la fermeture du classeur.

Le code ci-dessous est commetart. Il sera déclenché à l'ouverture ou à la fermeture du classeur. Copiez-le dans un module de votre classeur

Attribuez le bouton Test sur MenuSheet à Auto_Open.

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

Ci-dessous, nous examinons de plus près la structure de notre menu.Examinez de plus près la structure de notre menu

Aucune macro n'est déclenchée par Ajouter un nouveau car il n'a d'autre fonction que celle de parent de sous-menus.

Ce type de structure de menu est facile à maintenir. Ajoutez simplement de nouveaux éléments avec leurs macros, en tenant compte du niveau de menu.

Le code

Ajoutez le code VBA suivant au module. Cela examinera le "MenuSheet" et créera le menu personnalisé.

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

Testez le code avec le bouton Test. Le menu utilisateur nouvellement créé se trouve à la position de menu 10, sous Compléments.

Récupération Excel

Excel est parfois instable et se bloque lorsqu'il est ouvert, endommageant le fichier source. Là où il ne parvient pas à récupérer le fichier, il est utile d'avoir un outil pour réparer Excel dommage sinon, tout le travail non sauvegardé sera lost.

Introduction de l'auteur:

Felix Hooker est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris réparation rar et produits logiciels de récupération sql. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.