CodeS-SourceS
Rechercher un code, un tuto, une réponse

Création de menus sous excel, word et powerpoint

Août 2017


Création de menus sous Excel, Word et Powerpoint



Introduction


Qui ne s'est pas cassé les dents pour créer des menus personnels dans la barre de menu. D'autres personnes ne savent peut-être pas que c'est possible !
J'ai essayé de faire simple mais efficace !
C'est parti !

Tout d'abord, il faut comprendre que la barre de menu est composée d'une suite hiérarchisée de sous-menus et de boutons comme le montre l'exemple suivant.


Dans cet exemple, Format est un Control de type msoControlPopup de la barre de menus principale, Ligne est un Control de type msoControlPopup et enfin Hauteur, Ajustement automatique, Masquer, Afficher sont des Control de type msoControlButton.
Les Control de type msoControlPopup permettent d'ouvrir des sous-menus.
Les Control de type msoControlButton permettent de lancer une macro en cliquant dessus.
On peut réaliser des sous-menus de sous-menus en utilisant des Control de type msoControlPopup en cascade.

Commençons par le début, créons un menu personnalisé :

Création du menu personnalisé


'
' Création d'un nouveau menu "Fonctions spéciales" dans la barre de menu
' placé en cinquième position
'
Set myMenuBar = CommandBars.ActiveMenuBar
Set Menu_fct_spe = myMenuBar.Controls.Add(Type:=msoControlPopup, Temporary:=True, before:=5)
Menu_fct_spe.Caption = "Fonctions spéciales"


En lançant ce code, on a ajouté un menu Fonctions spéciales dans la barre de menu en cours (ActiveMenuBar dans le code).

On va maintenant créer un Control de type sous-menu (msoControlPopup)

'
' Ajout d'un sous menu "Import" sous "Fonctions spéciales
'
Set ctrl_import = Menu_fct_spe.Controls.Add(Type:=msoControlPopup, ID:=1)
ctrl_import.Caption = "Import"	


Ici, ctrl_import fait référence à Menu_fct_spe, donc le niveau le plus élevé de ce nouveau menu.

On ajoute maintenant un bouton dans ce sous-menu Import :

'
' Ajout d'un bouton sous le sous-menu Import
'
Set ctrl_Export = ctrl_import.Controls.Add(Type:=msoControlButton, ID:=1)
Set picPicture = stdole.StdFunctions.LoadPicture( _
    "D:\Documents and Settings\Didier\Mes documents\VBA\Icone1.bmp") ' charge l'image de l'icône
With ctrl_Export
    .Caption = "Export"
    .Style = msoButtonIconAndCaption ' ce style permet d'afficher l'icône et le texte du bouton
    .OnAction = "titi"               ' en cliquant sur ce bouton, ça lance la macro titi
    .Picture = picPicture            ' définit l'image de l'icône
End With	


Ce petit bout de code montre comment insérer un bouton dans un menu ou sous-menu, de lui affecter la macro titi (désolé pour le nom) et une icone. Cette icône est définie par un fichier bmp (jpg fonctionne aussi) que vous pouvez créer sous Paint : image carrée de 16x16 pixels minimum.

La variable picPicture sera définie comme ceci :
Dim picPicture As IPictureDisp


De la même façon, ajoutons un bouton au niveau principal :

'
' Ajout d'un bouton sous le menu "Fonctions spéciales"
' Même principe que ci-dessus
'
Set ctrl_Imp_Exp = Menu_fct_spe.Controls.Add(Type:=msoControlButton, ID:=1)
Set picPicture = stdole.StdFunctions.LoadPicture( _
    "D:\Documents and Settings\Didier\Mes documents\VBA\Icone2.bmp")
With ctrl_Imp_Exp
    .Caption = "Import/Export"
    .Style = msoButtonIconAndCaption
    .OnAction = "toto"
    .Picture = picPicture
End With


Ce bouton permet de lancer une macro qui s'appelle toto

Enfin, je propose ici d'ajouter une liste déroulante (ComboBox) :

'
' Permet d'insérer une liste modifiable dans le menu "Fonctions spéciales"
'
Set ctrl_Cbb = Menu_fct_spe.Controls.Add(Type:=msoControlComboBox, ID:=1)
With ctrl_Cbb
    .BeginGroup = True            ' permet de créer un nouveau groupe, un trait apparait
    .AddItem "Article 1", 1          ' Ajout dans la liste
    .AddItem "Article 2", 2
    .AddItem "Article 3", 3
    .AddItem "Article 4", 4
    .Caption = "Articles"
End With


BeginGroup = True permet de créer un nouveau groupe, de la pure cosmétique !

Ne pas oublier de vider les variables définies :

'
Set myMnuBar = Nothing
Set Menu_fct_spe = Nothing
Set ctrl_import = Nothing
Set ctrl_Export = Nothing
Set ctrl_Cbb = Nothing

Utilisation


Mettez tous ces bouts de codes dans une macro, lancer là et vous devriez obtenir ceci :


Pour fonctionner correctement, il faut évidemment créer les macros titi et toto. A titre d'exemple, la macro titi montre comment utiliser le résultat de la liste modifiable (ComboBox)

'
Sub toto()
    MsgBox "Toto !!!"
End Sub	

Sub titi()
'
' Montre comment utiliser le choix de la liste modifiable créée (ComboBox)
'
With CommandBars.ActiveMenuBar.Controls("Fonctions spéciales").Controls("Articles")
   Texte = .Text
End With
MsgBox Texte & " !!!"
End Sub


Pour terminer, vous pouvez supprimer le menu personnalisé comme ceci :
'
Sub delete_Commandbar()
   CommandBars.ActiveMenuBar.Controls("Fonctions spéciales").Delete
End Sub


Avec ces quelques indications, vous pouvez vous créer vos propres menus. D'autres options sont possibles, (Visible = True ou False par exemple), je ne les connais pas toutes ... si certaines peuvent être d'intérêt général, n'hésitez pas à faire des commentaires.

Didier

A voir également

Publié par DidierLoche.
Ce document intitulé «  Création de menus sous excel, word et powerpoint  » issu de CodeS-SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Appeler une fonction par son nom grâce à la fonction callbyname
Ajouter des contrôles dans une listview