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 :
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.
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".
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.
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.
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



