' À mettre dans une module
Public MainMenu As CommandBarPopup 'Menu contextuel principal
Public SousMenu1 As CommandBarControl ' 1er Sous-menu à MainMenu
Public SousMenu2 As CommandBarControl ' 2e Sous-menu à MainMenu
Sub SubMenu1()
MsgBox "Sous-menu 1"
End Sub
Sub SubMenu2()
MsgBox "Sous-menu 2"
End Sub
Sub EffacerMenus()
Dim I As Integer
For I = Application.CommandBars("cell").Controls.Count To 1 Step -1
If Application.CommandBars("cell").Controls(I).Caption = "Test" Then
Application.CommandBars("cell").Controls(I).Delete
End If
Next
End Sub
' À mettre dans ThisWorkbook
Private Sub Workbook_Deactivate()
'Effacer les menus contextuels si on change de classeur
EffacerMenus
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Effacer les menus contextuels si on ferme le classeur
EffacerMenus
End Sub
' À mettre dans le code d'une feuille
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'Effacer les menus contextuels créés s'ils existent déjà
EffacerMenus
'Création d'un menu contextuel ajouté en premier aux autres d'Excel
If Not Application.Intersect(Target, Range("A:AZ")) Is Nothing Then
Set MainMenu = CommandBars("cell").Controls.Add _
(Type:=msoControlPopup, _
before:=1, _
temporary:=True)
MainMenu.Caption = "Test"
'Création du premier sous-menu affecté à MainMenu
Set SousMenu1 = MainMenu.Controls.Add(Type:=msoControlButton)
With SousMenu1
.Caption = "1er sous-menu" 'Texte affiché
.OnAction = "Submenu1" 'Nom de la macro
.Tag = "Menu1" 'au besoin
End With
'Création du deuxième sous-menu toujours affecté à MainMenu
Set SousMenu2 = MainMenu.Controls.Add(Type:=msoControlButton)
With SousMenu2
.Caption = "2e sous-menu" 'Texte affiché
.OnAction = "Submenu2" 'Nom de la macro
.Tag = "Menu2" 'au besoin
End With
End If
End Sub
Private Sub Worksheet_Deactivate()
'Effacer les menus contextuels si on change de feuille
EffacerMenus
End Sub