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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 29 281 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
Messages postés
42
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 juin 2013

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
Messages postés
1
Date d'inscription
lundi 25 mars 2013
Statut
Membre
Dernière intervention
13 mai 2013

Super et compréhensible pour un débutant. Merci
Messages postés
42
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
26 juin 2013

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
Messages postés
2
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
24 décembre 2008

Enfin je trouve dans ton code ce que je cherche depuis des heures ! C'est simple, et surtout ça fonctionne !
Bravo
Messages postés
117
Date d'inscription
lundi 23 octobre 2000
Statut
Membre
Dernière intervention
12 août 2009

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.