Monsieur Excel
Pour tout savoir faire sur Excel !

24 juin 2012

Création d’un menu pop-up

Un menu pop-up est un menu qui apparaît dans une fenêtre qui s’affiche à l’écran. Il est assez facile de créer un menu pop-up avec, le cas échéant des sous-menus.


Dans l’exemple ci-dessous, on lance le test de ce menu pop-up en cliquant dans le bouton macro éponyme placé dans le coin supérieur gauche de la feuille. On pourrait bien entendu le lancer aussi via un raccourci comme par exemple [Ctrl]-p

Voici le code qui permet de définir ce menu pop-up et de gérer ses appels de macros liés au choix de l’utilisateur.

Option Explicit
Public Const NomMenu As String = "MonPopUp"
Sub DeletePopUpMenu()
    ' Efface le pop-up s'il est encore présent
    On Error Resume Next
    Application.CommandBars(NomMenu).Delete
    On Error GoTo 0
End Sub
Sub CreateDisplayPopUpMenu()
    ' Efface tout menu pop-up
    Call DeletePopUpMenu

    ' Crée le menu popup
    Call Custom_PopUpMenu

    ' Affiche le menu popup
    On Error Resume Next
    Application.CommandBars(NomMenu).ShowPopup
    On Error GoTo 0
End Sub
Sub Custom_PopUpMenu()
    Dim MenuItem As CommandBarPopup
    ' Ajoute le menu pop-up
    With Application.CommandBars.Add(Name:=NomMenu, Position:=msoBarPopup, _
         MenuBar:=False, Temporary:=True)

        ' Ajoute les deux premiers boutons
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Bouton 1"
            .FaceId = 71
            .OnAction = "Macro(1)"
        End With

        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Bouton 2"
            .FaceId = 72
            .OnAction = "Macro(2)"
        End With

        ' Ajout du sous-menu
        Set MenuItem = .Controls.Add(Type:=msoControlPopup)
        With MenuItem
            .Caption = "Mon sous-menu à moi"

            With .Controls.Add(Type:=msoControlButton)
                .Caption = "Bouton a dans le sous-menu"
                .FaceId = 71
                .OnAction = "Macro(3)"
            End With

            With .Controls.Add(Type:=msoControlButton)
                .Caption = "Bouton b dans le sous-menu"
                .FaceId = 72
                .OnAction = "Macro(4)"
            End With
        End With

        ' Ajout du dernier bouton
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Bouton 3"
            .FaceId = 73
            .OnAction = "Macro(5)"
        End With

    End With
End Sub
Sub Macro(i As Integer)
    Dim Mess(5) As String
    Mess(1) = "Bouton 1": Mess(2) = "Bouton 2": Mess(3) = "Bouton 2a"
    Mess(4) = "Bouton 2b": Mess(5) = "Bouton 3"
    MsgBox "Votre sélection : " & Mess(i)
End Sub

Remarque – Le seul petit problème que j’ai encore est que le dialogue affiché par la macro apparaît deux fois de suite… Nous étudierons ce problème dans le prochain article.

Les commandes “.FaceId = …” ne servent qu’à afficher les numéros à gauche des noms des commandes. Vous pouvez les éliminer sans problème.

L'auteur de la version originale de cette macro, que j'ai ensuite francisée et simplifiée, est Ron de Bruin, un collègue MVP Excel.

1 Commentaire(s):

  • Bonjour,
    L'auteur de la version originale de cette macro de pop-up est peut être Ron de Bruin.
    http://www.rondebruin.nl/popup.htm
    Cordialement

    By Anonymous jpr73, sur 8:46 PM  

Enregistrer un commentaire

<< Accueil