Création de menus sous excel, word et powerpoint

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
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.
Rejoignez-nous