Ajout d'un menu excel en vba (avec n items) en une ligne de code

5/5 (12 avis)

Snippet vu 29 491 fois - Téléchargée 36 fois

Contenu du snippet

Petites procédures VBA permettant d'ajouter très simplement un menu avec n items à excel (à l'ouverture dans l'exemple), et de le supprimer (à la fermeture dans l'exemple).

Source / Exemple :


'Procédure appelante ajout d'un menu avec n items
'----------------------------------------------------------------
Private Sub Workbook_Open()
' remplacer NomDuMenu, NomItemX, ProcedureX (le nombre d'items et de procédures doit être identique
AjMenuX "NomDuMenu", Array("NomItem1", "NomItem2", "NomItem3"), Array("Procedure1", "Procedure2", "Procedure3")
End Sub

'Procédure appelante suppression d'un menu
'--------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SuprMenuX ("NomDuMenu")
End Sub

'================
'Procédures appelées
'================

' Procédure d'ajout d'un menu
'-------------------------------------

Sub AjMenuX(NomMenu, TbItem, TbLien)
Set myMenuBar = CommandBars.ActiveMenuBar
Set newMenu = myMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
newMenu.Caption = NomMenu
For Each Value In TbItem
Set ctrl1 = newMenu.Controls.Add(Type:=msoControlButton, Id:=I + 1)
ctrl1.Caption = Value
ctrl1.TooltipText = Value
ctrl1.Style = msoButtonCaption
ctrl1.OnAction = TbLien(I)
I = I + 1
Next Value
End Sub

'Procédure de supperssion d'un menu
'-----------------------------------------------

Sub SuprMenuX(NomMenu As String)
On Error Resume Next
Set myMenuBar = CommandBars.ActiveMenuBar
myMenuBar.Controls(NomMenu).Delete
End Sub

Conclusion :


Testé uniquement avec excel 97
Vous pouvez mettre autant d'itmes que vous voulez dans le menu, à condition que les 2 tableaux array() aient le même nombre de paramètres.

A voir également

Ajouter un commentaire Commentaires
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
14 mai 2013 à 12:51
Bonjour a tous

pour les icons il suffit d'ajouter un array contenant les numero d'ID
un peu comme ceci:
'Procédure appelante ajout d'un menu avec n items
'----------------------------------------------------------------
Private Sub Workbook_Open()
Dim nomitems, proc, icons
SuprMenuX ("NomDuMenu")
nomitems = Array("NomItem1", "NomItem2", "NomItem3")
proc = Array("Procedure1", "Procedure2", "Procedure3")
icons = Array(256, 136, 1066)

' remplacer NomDuMenu, NomItemX, ProcedureX (le nombre d'items et de procédures doit être identique
AjMenuX "NomDuMenu", nomitems, proc, icons
End Sub

'Procédure appelante suppression d'un menu
'--------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SuprMenuX ("NomDuMenu")
End Sub
'================
'Procédures appelées
'================
' Procédure d'ajout d'un menu
'-------------------------------------
Sub AjMenuX(NomMenu, TbItem, TbLien, icon) 'sub plus les 3 arguments (array)
Set myMenuBar = CommandBars.ActiveMenuBar
Set newMenu = myMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
newMenu.Caption = NomMenu
For Each Value In TbItem
Set ctrl1 = newMenu.Controls.Add(Type:=msoControlButton) 'on ajoute un bouton
ctrl1.Caption = Value 'le titre du bouton
ctrl1.TooltipText = Value 'l'infobule du bouton
ctrl1.Style = 3 'le style de bouton(3 en l'ocurence caption,texte,icon)
ctrl1.FaceId = icon(i) 'on attribu l'icon avec l'array icon
ctrl1.OnAction = TbLien(i) 'lien vers la macro qui lui est attribuée
i = i + 1 'decompte pour le array
Next Value
End Sub

'Procédure de supperssion d'un menu
'-----------------------------------------------
Sub SuprMenuX(NomMenu As String)
On Error Resume Next
Set myMenuBar = CommandBars.ActiveMenuBar
myMenuBar.Controls(NomMenu).Delete
End Sub
Scarbiet94 Messages postés 1 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 13 mai 2013
13 mai 2013 à 20:52
Super et compréhensible pour un débutant. Merci
cs_patosch Messages postés 42 Date d'inscription jeudi 20 septembre 2007 Statut Membre Dernière intervention 26 juin 2013
13 déc. 2010 à 18:39
pour les icons d'office avec la constructions du bouton
c'est ".faceID=X" X etant le numero de l'icons il y en a plus de 10000 je crois
axc74 Messages postés 2 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 24 décembre 2008
24 déc. 2008 à 14:15
Enfin je trouve dans ton code ce que je cherche depuis des heures ! C'est simple, et surtout ça fonctionne !
Bravo
erreurs404 Messages postés 117 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 12 août 2009
16 janv. 2007 à 22:23
Très bonne source simple et concise, j'ai juste adapté pour avoir des sous-menus et des séparateurs ...

Nickel, merci !
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.