Une solution :
dans this workbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ControlsIndex As Integer
Dim NomBar As String
NomBar = "Nom du menu"
For ControlsIndex = 1 To 30
On Error GoTo LabelFin
If Application.CommandBars("Worksheet Menu Bar" ).Controls(ControlsIndex).Caption = NomBar Then
Application.CommandBars("Worksheet Menu Bar" ).Controls(ControlsIndex).Delete
Exit For
End If
Next
LabelFin:
End Sub
Private Sub Workbook_Open()
MonNouveauMenu
End Sub
Sub MonNouveauMenu()
NomProjetStat = ActiveWorkbook.Name
'###########################
'Si la barre existe déjà on l'efface et on la réaffiche
'###########################
Dim ControlsIndex As Integer
Dim NomBar As String
NomBar = "Nom du menu"
For ControlsIndex = 1 To 30
On Error GoTo LabelFin
If Application.CommandBars("Worksheet Menu Bar" ).Controls(ControlsIndex).Caption = NomBar Then
Application.CommandBars("Worksheet Menu Bar" ).Controls(ControlsIndex).Delete
Exit For
End If
Next
LabelFin:
'##########################
Dim MyBar
Dim SubMenu1, SubMenu11, SubMenu12
Dim SubMenu2, SubMenu21, SubMenu22
Dim SubMenu3, SubMenu31
Dim SubMenu4, SubMenu41, SubMenu42, SubMenu43, SubMenu44, SubMenu45, SubMenu46, SubMenu47
'Cette ligne crée le menu dans la barre de menu
Set MyBar = Application.CommandBars("Worksheet Menu Bar" ).Controls.Add(Type:=msoControlPopup, Before:=10)
MyBar.Caption = "Nom du menu" 'Donne un nom au menu
'##################################
'##### Les menus dans le menu #####
'##################################
Set SubMenu1 = MyBar.Controls.Add(Type:=msoControlPopup)
SubMenu1.Caption = "Nom sous menu"
SubMenu1.BeginGroup = True 'C'est pour faire la ligne de séparation dans le menu
Set SubMenu11 = SubMenu1.Controls.Add(Type:=msoControlButton)
With SubMenu11
.BeginGroup = False
.Caption = "Nom sous sous menu"
.Style = msoButtonCaption
.OnAction = "Nom de la macro à éxecuter"
End With
end sub