Menu contextuel dans Microsoft Access

Logo_Microsoft_Access_2013

Cet article a pour but d’expliquer le paramétrage des menus contextuels dans Microsoft Access. Le terme menu contextuel ou pop-up menu désigne les menus qui s’ouvrent lorsque l’utilisateur clique d’une manière particulière sur un objet de l’interface graphique. La plupart du temps, on utilise le menu contextuel lorsque l’utilisateur réalise un clic droit à l’aide de la souris dans un écran de liste.

Par défaut, Access propose des menus contextuels via le clic droit :
MENU1
Ce menu contextuel permet de copier les données de la zone de texte sélectionnée, de trier les éléments de la liste de contacts par ordre croissant et décroissant et de réaliser des filtres sur les différents éléments de la liste.

On va utiliser les classes présentes dans Access pour paramétrer et mettre en place notre propre menu contextuel. L’exemple suivant va nous permettre de créer un menu contextuel permettant de réaliser 5 actions via le clic droit de la souris dans la liste des travaux ci-dessous :
MENU2
Cette liste nous donne le montant des travaux engagés par année.

Le menu contextuel va nous permettre de réaliser les actions suivantes lorsque l’utilisateur va faire un clic droit sur une des lignes de travaux de la liste :
MENU3

  • Première année : permet de se replacer sur l’année de début des travaux.
  • Avancer l’année de départ : permet de décaler l’année de début des travaux sur l’année suivante.
  • Reculer l’année de départ : permet de décaler l’année de début des travaux sur l’année précédente.
  • Lisser le montant sur une année de plus : permet de répartir le montant des travaux sur une année supplémentaire.
  • Lisser le montant sur une année de moins : permet de répartir le montant des travaux sur une année en moins.

Pour créer notre menu contextuel, on va créer un module « ModPopUpMenu ». A l’intérieur de ce module, on va créer la procédure suivante :

Public Sub CREATE_POPUPMENU()
'on déclare nos variables
Dim mCmdBar As Office.CommandBar
Dim mBtn As Office.CommandBarButton
    
    DoCmd.SetWarnings False
    'suppression de la barre existante
    'il faut toujours supprimer notre barre de menu avant de la re-créer
    On Error Resume Next
    Application.CommandBars("mPopUp_Travaux").Delete
    
    'génération du menu contextuel
    'on ajoute notre menu contextuel en lui précisant le type d’affichage de barre souhaité
    Set mCmdBar = Application.CommandBars.Add("mPopUp_Travaux ", msoBarPopup)

    'on ajoute les boutons à notre menu contextuel 
    Set mBtn = mCmdBar.Controls.Add(msoControlButton)
    With mBtn
        'on sélectionne un bouton avec une icône et un libellé 
        .Style = msoButtonIconAndCaption
        'on affecte l’identifiant de l’icône
        .FaceId = 564
        'on affecte le libellé
        .Caption = "Première année"
        'on affecte la procédure qui va permettre de réaliser l’action
        .OnAction = "FIRST_YEAR"
    End With

    Set mBtn = mCmdBar.Controls.Add(msoControlButton)
    With mBtn
        .Style = msoButtonIconAndCaption
        .FaceId = 1038
        'permet de tracer un trait horizontal pour séparer les différents boutons
        .BeginGroup = True
        .Caption = "Avancer l'année de départ"
        .OnAction = "ADD_YEAR"
    End With

    Set mBtn = mCmdBar.Controls.Add(msoControlButton)
    With mBtn
        .Style = msoButtonIconAndCaption
        .FaceId = 1037
        .Caption = "Reculer l'année de départ"
        .OnAction = "REMOVE_YEAR"
    End With

    Set mBtn = mCmdBar.Controls.Add(msoControlButton)
    With mBtn
        .Style = msoButtonIconAndCaption
        .FaceId = 137
        .BeginGroup = True
        .Caption = "Lisser le montant sur une année de plus"
        .OnAction = "LISSAGE_PLUS"
    End With

    Set mBtn = mCmdBar.Controls.Add(msoControlButton)
    With mBtn
        .Style = msoButtonIconAndCaption
        .FaceId = 138
        .Caption = "Lisser le montant sur une année de moins"
        .OnAction = "LISSAGE_MOINS"
    End With
    
End Sub
ModPopUpMenu

Ci-dessous la correspondance entre icônes et FaceId :
Correspondance icônes FaceId

3 commentaires

  1. Bonjour;
    mais comment procédé pour qu’il soit opérationnel ? es ce dans la propriété du formulaire(menu contextuel) on inscrit quoi ?
    merci

  2. Bonjour,
    pour rendre le menu contextuel actif, il faut exécuter la procédure CREATE_POPUPMENU dans la fenêtre d’exécution du code : Call CREATE_POPUPMENU en mode débug.
    La procédure doit être relancée à chaque modification du module ModPopUpMenu.
    La procédure n’a pas à être lancée lors de l’exécution de l’application Access.

  3. Après au niveau du formulaire, si on souhaite faire apparaître le menu au niveau d’une zone de texte, il faut utiliser l’événement : sur souris appuyée :
    Private Sub MaZoneDeTexte_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = acRightButton Then
    Application.CommandBars(« mPopUp_Travaux »).ShowPopup
    End If
    End Sub

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *