' À 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