Personnalisation des menus contextuels dans toutes les versions de Microsoft Excel
Résumé : Découvrez comme personnaliser des menus contextuels de la version Excel 97 jusqu’à la version Excel 2010.
Dernière modification : vendredi 24 avril 2015
S’applique à : Excel | Excel 2010 | Office 2007 | Office 2010 | SharePoint Server 2010 | VBA
Applies to: Microsoft Excel 97 | Microsoft Excel 2000 | Microsoft Excel 2002 | Microsoft Excel 2003 | Microsoft Office Excel 2007 | Microsoft Excel 2010
Date de publication : novembre 2010
Sommaire
Vue d’ensemble des menus contextuels dans Microsoft Office
Vue d’ensemble des menus contextuels dans Excel
Personnalisation des menus contextuels dans Excel
Ajout de contrôles au menu contextuel de cellule à l’aide de code VBA
Ajout de contrôles au menu contextuel de cellule à l’aide de l’extensibilité du ruban
Ajout d’un menu dynamique au menu contextuel de cellule à l’aide du code VBA ou de l’extensibilité du ruban
Conseils et astuces relatifs au menu contextuel
Résumé
Ressources supplémentaires
Vue d’ensemble des menus contextuels dans Microsoft Office
Un menu contextuel est un menu qui s’affiche après une action de l’utilisateur, généralement après un clic droit. Dans Microsoft Office, un menu contextuel propose un ensemble limité de choix disponibles dans l’état actuel, ou le contexte, d’une application. Les choix disponibles sont généralement des actions associées à l’objet sélectionné, tel qu’une cellule ou une colonne.
Vue d’ensemble des menus contextuels dans Excel
Dans Microsoft Excel, le menu contextuel le plus couramment utilisé est le menu contextuel Cell. Il s’agit du menu qui s’affiche lorsque vous cliquez avec le bouton droit sur une cellule ou une sélection de cellules d’une feuille de calcul. Toutefois, vous pouvez personnaliser de nombreux autres menus contextuels. Par exemple, les menus contextuels Row et Column qui s’affichent lorsque vous cliquez avec le bouton droit sur les en-têtes de ligne ou de colonne. La figure 1 présente un menu contextuel Cell dans Microsoft Excel 2010.
Figure 1. Menu contextuel de cellule dans Excel 2010
Notes
La section NameX affichée au bas du menu est créée par le complément Microsoft qui sera présenté plus loin dans cet article.
Personnalisation des menus contextuels dans Excel
La seule façon de personnaliser des menus contextuels de la version Excel 97 jusqu’à la version Excel 2007 consiste à utiliser Microsoft Visual Basic pour Applications (VBA). Un exemple est indiqué plus loin dans l’article. Toutefois, dans Excel 2010, vous pouvez également modifier un menu contextuel à l’aide du même modèle d’extensibilité du ruban (RibbonX) qui vous permet de personnaliser les autres composants de l’interface utilisateur Microsoft Office Fluent pour inclure le ruban et le mode Backstage.
L’un des avantages de l’utilisation de RibbonX dans Excel 2010 concernant la personnalisation des menus contextuels est qu’il est possible d’ajouter des contrôles que vous ne pouvez pas ajouter à l’aide de VBA. La liste suivante présente les contrôles que vous pouvez ajouter à des menus contextuels.
bouton
case à cocher
contrôle
menu dynamique
galerie
menu
séparateur de menus
bouton partagé
bouton bascule
Toutefois, il est important de rappeler que vous pouvez uniquement utiliser RibbonX pour personnaliser les menus contextuels dans Excel 2010. Dans les autres versions d’Microsoft Excel, vous devez utiliser VBA et l’objet CommandBars.
Ajout de contrôles au menu contextuel de cellule à l’aide de code VBA
L’exemple suivant montre comment ajouter un bouton personnalisé, un bouton intégré (Enregistrer ) et un sous-menu dans la partie supérieure du menu contextuel Cell.
Notes
Il existe deux menus contextuels Cell dans Microsoft Excel. Le premier est le menu standard et le second est le menu affiché lorsque vous êtes en mode Aperçu des sauts de page. Ce mode vous permet de voir les données qui apparaissent sur chaque page et d’ajuster rapidement la zone d’impression ainsi que les sauts de page. Pour l’activer, cliquez sur Affichage, puis choisissez Aperçu des sauts de page. Si vous voulez modifier le deuxième type de menu, utilisez l’instruction suivante.
Set ContextMenu = Application.CommandBars(Application.CommandBars("Cell").Index + 3)
Ces informations s’appliquent également aux menus contextuels Row et Column.
Pour personnaliser le menu contextuel Cell, ajoutez un module général au projet VBA dans votre classeur. Ouvrez Visual Basic Editor en appuyant sur Alt+F11, cliquez sur Insérer , puis sur Module . Collez ou entrez les six sous-routines suivantes dans le module. La première macro ajoute les contrôles au menu contextuel Cell. La deuxième macro supprime les contrôles à partir du menu contextuel Cell. Des balises sont ajoutées aux contrôles, puis utilisées pour les supprimer. Les quatre autres macros s’exécutent lorsque vous cliquez sur le bouton ou sur l’une des trois options dans le sous-menu. Dans cet exemple, les quatre dernières macros modifient la casse du texte dans une cellule.
Sub AddToCellMenu()
Dim ContextMenu As CommandBar
Dim MySubMenu As CommandBarControl
' Delete the controls first to avoid duplicates.
Call DeleteFromCellMenu
' Set ContextMenu to the Cell context menu.
Set ContextMenu = Application.CommandBars("Cell")
' Add one built-in button(Save = 3) to the Cell context menu.
ContextMenu.Controls.Add Type:=msoControlButton, ID:=3, before:=1
' Add one custom button to the Cell context menu.
With ContextMenu.Controls.Add(Type:=msoControlButton, before:=2)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "ToggleCaseMacro"
.FaceId = 59
.Caption = "Toggle Case Upper/Lower/Proper"
.Tag = "My_Cell_Control_Tag"
End With
' Add a custom submenu with three buttons.
Set MySubMenu = ContextMenu.Controls.Add(Type:=msoControlPopup, before:=3)
With MySubMenu
.Caption = "Case Menu"
.Tag = "My_Cell_Control_Tag"
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "UpperMacro"
.FaceId = 100
.Caption = "Upper Case"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "LowerMacro"
.FaceId = 91
.Caption = "Lower Case"
End With
With .Controls.Add(Type:=msoControlButton)
.OnAction = "'" & ThisWorkbook.Name & "'!" & "ProperMacro"
.FaceId = 95
.Caption = "Proper Case"
End With
End With
' Add a separator to the Cell context menu.
ContextMenu.Controls(4).BeginGroup = True
End Sub
Sub DeleteFromCellMenu()
Dim ContextMenu As CommandBar
Dim ctrl As CommandBarControl
' Set ContextMenu to the Cell context menu.
Set ContextMenu = Application.CommandBars("Cell")
' Delete the custom controls with the Tag : My_Cell_Control_Tag.
For Each ctrl In ContextMenu.Controls
If ctrl.Tag = "My_Cell_Control_Tag" Then
ctrl.Delete
End If
Next ctrl
' Delete the custom built-in Save button.
On Error Resume Next
ContextMenu.FindControl(ID:=3).Delete
On Error GoTo 0
End Sub
Sub ToggleCaseMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
Select Case cell.Value
Case UCase(cell.Value): cell.Value = LCase(cell.Value)
Case LCase(cell.Value): cell.Value = StrConv(cell.Value, vbProperCase)
Case Else: cell.Value = UCase(cell.Value)
End Select
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub UpperMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = UCase(cell.Value)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub LowerMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = LCase(cell.Value)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Sub ProperMacro()
Dim CaseRange As Range
Dim CalcMode As Long
Dim cell As Range
On Error Resume Next
Set CaseRange = Intersect(Selection, _
Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues))
On Error GoTo 0
If CaseRange Is Nothing Then Exit Sub
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
For Each cell In CaseRange.Cells
cell.Value = StrConv(cell.Value, vbProperCase)
Next cell
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Copiez les deux procédures d’événement suivantes dans le module ThisWorkbook de votre classeur. Ces événements ajoutent automatiquement les contrôles au menu contextuel Cell lorsque vous ouvrez ou activez le classeur, et suppriment les contrôles lorsque vous fermez ou désactivez le classeur.
Private Sub Workbook_Activate()
Call AddToCellMenu
End Sub
Private Sub Workbook_Deactivate()
Call DeleteFromCellMenu
End Sub
Ensuite, enregistrez, fermez et rouvrez le classeur pour voir les modifications apportées au menu contextuel Cell. Le menu contextuel Cell doit à présent ressembler au menu présenté dans la figure 2.
Figure 2. Menu contextuel de cellule personnalisé
Ajout de contrôles au menu contextuel de cellule à l’aide de l’extensibilité du ruban
Dans l’exemple suivant, vous allez créer les mêmes boutons et sous-menu que dans l’exemple décrit précédemment. Cette fois, vous allez utiliser RibbonX pour créer les contrôles dans Excel 2010. Cette option n’est pas disponible dans la version Excel 97 jusqu’à la version Excel 2007.
Notes
Pour plus d’informations sur l’utilisation de l’éditeur d’interface utilisateur personnalisée et l’utilisation de RibbonX pour personnaliser l’interface utilisateur Microsoft Office Fluent, voir le site web de Ron concernant le ruban.
L’identificateur du menu contextuel Cell en mode Aperçu des sauts de page dans Excel 2010 est différent de celui du menu contextuel Cell standard. Vous pouvez trouver cet identificateur et les ID des autres menus contextuels en utilisant le complément Microsoft décrit plus loin dans cet article.
Pour ajouter le code XML afin d’ajouter des contrôles au menu contextuel
Ouvrez un nouveau classeur dans Excel 2010 et enregistrez-le en tant que classeur prenant en charge les macros (.xlsm).
Fermez le classeur.
Ouvrez le classeur dans l’éditeur d’interface utilisateur personnalisée (voir la remarque précédente pour plus d’informations), cliquez sur Insérer , puis choisissez Composant WebPart de l’interface utilisateur personnalisée Office 2010.
Insérez le code XML suivant dans la fenêtre Composant WebPart de l’interface utilisateur personnalisée Office 2010.
<customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui"> <contextMenus> <contextMenu idMso="ContextMenuCell"> <button idMso="FileSave" insertBeforeMso="Cut" /> <button id="MyButton" label="Toggle Case Upper/Lower/Proper" insertBeforeMso="Cut" onAction="ToggleCaseMacro" imageMso="HappyFace"/> <menu id="MySubMenu" label="Case Menu" insertBeforeMso="Cut" > <button id="Menu1Button1" label="Upper Case" imageMso="U" onAction="UpperMacro"/> <button id="Menu1Button2" label="Lower Case" imageMso="L" onAction="LowerMacro"/> <button id="Menu1Button3" label="Proper Case" imageMso="P" onAction="ProperMacro"/> </menu> <menuSeparator id="MySeparator" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI>
Enregistrez et fermez l’éditeur.
Ouvrez le classeur dans Excel 2010.
Copiez ou entrez les quatre macros suivantes dans Visual Basic Editor dans un module général et enregistrez le classeur.
Sub ToggleCaseMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange Select Case cell.Value Case UCase(cell.Value): cell.Value = LCase(cell.Value) Case LCase(cell.Value): cell.Value = StrConv(cell.Value, vbProperCase) Case Else: cell.Value = UCase(cell.Value) End Select Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub UpperMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = UCase(cell.Value) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub LowerMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = LCase(cell.Value) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub Sub ProperMacro(control As IRibbonControl) Dim CaseRange As Range Dim CalcMode As Long Dim cell As Range On Error Resume Next Set CaseRange = Intersect(Selection, _ Selection.Cells.SpecialCells(xlCellTypeConstants, xlTextValues)) If CaseRange Is Nothing Then Exit Sub With Application CalcMode = .Calculation .Calculation = xlCalculationManual .ScreenUpdating = False .EnableEvents = False End With For Each cell In CaseRange cell.Value = StrConv(cell.Value, vbProperCase) Next cell With Application .ScreenUpdating = True .EnableEvents = True .Calculation = CalcMode End With End Sub
Dans le classeur, si vous cliquez avec le bouton droit sur une cellule contenant du texte, vous pouvez constater que le menu contextuel Cell a été modifié.
Sélectionnez les options de modification de la casse dans la partie supérieure du menu contextuel pour voir les modifications apportées au texte de la cellule.
Avertissement
Lorsque vous fermez le classeur, chaque contrôle que vous avez ajouté est supprimé du menu contextuel Cell. Toutefois, si vous ouvrez un autre classeur à partir du classeur actif, le bouton Enregistrer intégré précédemment et ajouté au menu contextuel Cell n’est pas supprimé. Ce problème survient lors de l’ajout de contrôles intégrés à un menu contextuel. Si ce problème vous dérange, vous pouvez insérer un bouton personnalisé, au lieu d’un contrôle intégré, qui appelle une macro exécutant la commande Enregistrer intégrée.
Pour ajouter un bouton personnalisé avec une commande intégrée, remplacez l’instruction <button idMso="FileSave" insertBeforeMso="Cut" /> par l’instruction suivante <button id="DuplicateBuiltInButton1" label="Save" insertBeforeMso="Cut" onAction="BuiltInSaveCommand" imageMso="FileSave"/>. Ensuite, dans Visual Basic Editor, ajoutez la macro suivante qui est appelée par l’attribut onAction.
Sub BuiltInSaveCommand(control As IRibbonControl)
CommandBars.ExecuteMso "FileSave"
End Sub
En outre, vous pouvez également utiliser la méthode ActiveWorkbook.Save. Toutefois, si vous utilisez la méthode ExecuteMso, vous pouvez exécuter n’importe quel contrôle intégré dans l’interface utilisateur Microsoft Office Fluent.
Ajout d’un menu dynamique au menu contextuel de cellule à l’aide du code VBA ou de l’extensibilité du ruban
Les menus dynamiques pointent vers des procédures de rappel qui créent des menus au moment de l’exécution. Le contrôle dynamicMenu inclut l’attribut getContent qui pointe vers une procédure de rappel GetContent.
L’exemple suivant présente le code XML RibbonX qui permet de créer un menu dynamique dans le menu contextuel Cell.
<customUI xmlns="https://schemas.microsoft.com/office/2009/07/customui">
<contextMenus>
<contextMenu idMso="ContextMenuCell">
<dynamicMenu id="MyDynamicMenu"
label= "My Dynamic Menu" imageMso="HappyFace"
getContent="GetContent" insertBeforeMso="Cut"/>
</contextMenu>
</contextMenus>
</customUI>
Par exemple, le code VBA suivant permet de créer un menu dynamique au moment de l’exécution à l’aide de deux boutons. Par conséquent, le menu n’est pas créé tant que l’utilisateur ne clique pas sur l’option de menu dans le menu contextuel.
Sub GetContent(control As IRibbonControl, ByRef returnedVal)
Dim xml As String
xml = "<menu xmlns=""https://schemas.microsoft.com/office/2009/07/customui"">" & _
"<button id=""but1"" imageMso=""Help"" label=""Help"" onAction=""HelpMacro""/>" & _
"<button id=""but2"" imageMso=""FindDialog"" label=""Find"" onAction=""FindMacro""/>" & _
"</menu>"
returnedVal = xml
End Sub
Sub HelpMacro(control As IRibbonControl)
MsgBox "Help macro"
End Sub
Sub FindMacro(control As IRibbonControl)
MsgBox "Find macro"
End Sub
Vous pouvez télécharger trois classeurs d’exemple qui ajoutent un menu dynamique au menu contextuel Cell en fonction du nom d’utilisateur, de la langue régionale utilisée dans Excel ou de la valeur de la cellule active (Formule, Vide, Numérique ou Texte). Vous pouvez trouver toutes les informations relatives à l’exemple dans le classeur approprié et télécharger les trois classeurs depuis le site web de Ron.
Conseils et astuces relatifs au menu contextuel
Cette section vous montre comment modifier le code présenté dans cet article afin de rendre vos procédures plus souples.
Dans l’exemple VBA au début de cet article, vous avez vu comment modifier le menu contextuel Cell à l’aide des événements Activate et Deactivate du classeur pour appeler une macro dans le but de créer et de supprimer les options de menu.
Vous pouvez modifier l’événement Activate dans l’exemple suivant pour créer différents menus pour divers utilisateurs. Ceci vous permettra de créer un menu doté de différents ensembles de contrôles personnalisés pour chaque utilisateur.
Private Sub Workbook_Activate()
Dim sUserName As String
sUserName = Application.UserName
Select Case sUserName
Case "Ron de Bruin": Call AddToCellMenu
Case "Nancy Davolio": Call AddToCellMenu2
Case Else: Call AddToCellMenu3
End Select
End Sub
Un autre exemple consiste à vérifier la langue régionale utilisée dans Excel dans l’événement Activate afin de pouvoir créer des légendes dans le menu contextuel rédigées dans la langue de l’utilisateur. Dans l’exemple suivant, si un utilisateur néerlandais ou allemand ouvre le classeur, une autre macro est appelée en fonction du paramètre de langue régionale défini sur son ordinateur.
Private Sub Workbook_Activate()
Dim LangID As Long
LangID = Application.International(xlCountryCode)
Select Case LangID
Case 31: Call AddToCellMenuInDutch
Case 49: Call AddToCellMenuinGerman
Case Else: Call AddToCellMenu
End Select
End Sub
Notes
Pour plus d’informations sur les problèmes d’ordre international dans Excel, voir la page web correspondante sur le site web de Ron de Bruin.
L’instruction VBA suivante vous montre comment activer et désactiver le contrôle de commentaire Insérer dans le menu contextuel Cell dans la version Excel 97 jusqu’à la version Excel 2010 : Application.CommandBars("Cell").FindControl(ID:=2031).Enabled = False.
Notes
Le complément décrit à la fin de cet article vous montre comment trouver l’ID de chaque contrôle dans un menu contextuel.
Vous pouvez également utiliser une macro semblable à la suivante afin d’ajouter l’ID à la légende. Souvenez-vous que le menu contextuel Cell n’est pas exactement identique dans chaque version d’Excel.
Sub Add_ID_To_ContextMenu_Caption()
' Add the Id to the caption of the context menu controls.
Dim ctl As CommandBarControl
For Each ctl In Application.CommandBars("Cell").Controls
On Error Resume Next
ctl.Caption = ctl.ID & " ::: " & ctl.Caption
On Error GoTo 0
Next ctl
End Sub
Sub Reset_ContextMenu()
' Remove the Id of the caption of the context menu controls.
Dim ctl As CommandBarControl
Dim myPos As Long
For Each ctl In Application.CommandBars("Cell").Controls
myPos = InStr(1, ctl.Caption, " ::: ", vbTextCompare)
If myPos > 0 Then
ctl.Caption = Mid(ctl.Caption, myPos + 4)
End If
Next ctl
End Sub
Sub Reset_ContextMenu_To_Factory_Defaults()
Application.CommandBars("Cell").Reset
End Sub
Vous pouvez utiliser les événements Activate et Deactivate décrits précédemment pour activer et désactiver les contrôles.
Pour désactiver le contrôle Supprimer dans le menu contextuel Cell à l’aide de RibbonX, ajoutez l’instruction <button idMso="CellsDelete" enabled="false" /> au contrôle contextMenu dans le code XML présenté précédemment à la section Ajout de contrôles au menu contextuel de cellule à l’aide de l’extensibilité du ruban de cet article.
Comme vous pouvez le voir dans cette instruction, pour désactiver un contrôle dans un menu contextuel, vous devez connaître l’ID du contrôle (idMso). Toutefois, ceci peut poser problème dans la mesure où ces informations ne sont pas disponibles pour chaque contrôle dans un menu contextuel particulier. Par exemple, cela est vrai pour les menus contextuels Cell, Row et Column. Il ne semble pas y avoir de liste d’ID de contrôle pris en charge dans RibbonX. Vous pouvez utiliser une solution de contournement qui consiste à utiliser du code VBA pour désactiver un contrôle spécifique semblable à celui décrit dans la section précédente.
Alors, comment pouvez-vous trouver les noms des autres menus contextuels que vous souhaitez modifier ? La macro suivante permet d’ajouter un bouton avec le nom du menu au bas de chaque menu contextuel. Vous ne pouvez pas voir un nom sur chaque menu contextuel lors de son exécution dans Excel 2007 ou Excel 2010. Par exemple, vous ne verrez pas le nom du menu lorsque vous cliquez avec le bouton droit sur une forme ou une image dans Excel 2007 ou Excel 2010. Par conséquent, vous ne pouvez pas modifier ces menus dans Excel 2007 ou Excel 2010 à l’aide de VBA.
Sub Add_Name_To_Contextmenus()
Dim Cbar As CommandBar
For Each Cbar In Application.CommandBars
With Cbar
If .Type = msoBarTypePopup Then
On Error Resume Next
With .Controls.Add(Type:=msoControlButton)
.Caption = "Name for VBA = " & Cbar.Name
.Tag = "NameButtonInContextMenu"
End With
On Error GoTo 0
End If
End With
Next
End Sub
Sub Delete_Name_From_Contextmenus()
Dim Cbar As CommandBar
Dim ctrl As CommandBarControl
For Each Cbar In Application.CommandBars
With Cbar
If .Type = msoBarTypePopup Then
For Each ctrl In .Controls
If ctrl.Tag = "NameButtonInContextMenu" Then
ctrl.Delete
End If
Next ctrl
End If
End With
Next
End Sub
Utilisez les liens suivants pointant vers des fichiers comportant les ID de contrôle et l’image de contrôle FaceIds de chaque contrôle dans presque chaque menu contextuel lorsque vous modifiez les menus contextuels à l’aide de VBA.
Utilisez le complément BtnFace de Jim Rech pour rechercher chaque image de contrôle FaceId sur la page web suivante.
Pour rechercher les ID de contrôle et les ID d’image de contrôle, consultez la page web suivante d’Ole P. Erlandsen.
Consultez la page web de John Walkenbach pour rechercher tous les ID d’image de contrôle.
Utilisez le lien suivant pour accéder à des fichiers contenant les valeurs du contrôle idMso ou les valeurs imageMso de chaque contrôle dans presque chaque menu contextuel lorsque vous modifiez les menus contextuels à l’aide de RibbonX.
http://www.rondebruin.nl/ribbon.htm#images
Utilisez le complément Microsoft COM pour rechercher le nom de chaque menu contextuel dans Microsoft Office 2010. Il ajoute un bouton à la fin des menus contextuels qui permet de rechercher le nom de la plupart d’entre eux.
Résumé
Cet article illustre les points suivants :
Dans Excel 97 jusqu’à Excel 2003, vous pouvez ajouter des contrôles à chaque menu contextuel à l’aide de code VBA (même si la procédure n’a pas été testée pour chaque scénario), mais vous ne pouvez pas modifier ces menus à l’aide de RibbonX.
Dans Excel 2007, vous pouvez ajouter des contrôles à presque tous les menus contextuels à l’aide de code VBA. Toutefois, vous ne pouvez pas modifier certains menus contextuels, tels que les menus Shapes et Picture à l’aide de VBA. De plus, vous ne pouvez pas les modifier à l’aide de RibbonX.
Dans Excel 2010, vous pouvez ajouter des contrôles à presque tous les menus contextuels à l’aide de code VBA. Les mêmes restrictions relatives à la modification de certains menus contextuels à l’aide de VBA dans Excel 2007 s’appliquent. En outre, vous pouvez ajouter des boutons et des menus à tous les menus contextuels à l’aide de RibbonX, mais si vous voulez désactiver ou redéfinir des contrôles, vous ne pourrez peut-être pas trouver les ID appropriés (idMso).
Ressources supplémentaires
Pour plus d’informations sur les sujets décrits dans cet article, cliquez sur les liens suivants :