Vous pouvez utiliser la propriété Enabled pour empêcher l’affichage et l’accès aux menus contextuels. La procédure suivante active ou désactive tous les menus contextuels de l’application Excel. Lors de l’appel de la procédure ModifierStatutMenuContextuel, une valeur booléenne (True ou False) est attendue qui indique si les menus contextuels doivent être activés ou désactivés. A cet effet, le paramètre blnEnabled a été défini dans la liste des arguments de la procédure.
Public Sub DesactiverMenusContextuels () ' Désactiver tous les menus contextuels ModifierStatutMenuContextuel False End Sub Public Sub ActiverMenusContextuels () ' Activer tous les menus contextuels ModifierStatutMenuContextuel True End Sub Public Sub ModifierStatutMenuContextuel (blnEnabled As Boolean) Dim cmb As CommandBar For Each cmb In Application.CommandBars ' Vérifie si la barre de commandes est un menu contextuel If cmb.Type = msoBarTypePopup Then ' Définir le menu contextuel en fonction des paramètres de transfert cmb.Enabled = blnEnabled End If Next cmb End Sub
Les menus contextuels les plus courants sont répertoriés dans le tableau suivant pour désactiver un menu contextuel spécifique.
Menu contextuel | Description |
Cell (Cellule) | Menu contextuel de la cellule |
Column (Colonne) | Menu contextuel d’en-tête de colonne |
Row (Ligne) | Menu contextuel des en-têtes de lignes |
Ply (Feuille de calcul) | Menu contextuel de l’onglet Feuille |
workbook (Classeur) | Menu contextuel de l’onglet Classeur (Liste de toutes les feuilles de calcul et graphiques du classeur actif) |
Les procédures suivantes activent ou désactivent le menu contextuel de l’onglet de la feuille de cacul.
Public Sub DesactiverPlyCmb() ' Désactiver le menu contextuel des onglets de feuille Application.CommandBars("Ply").Enabled = False End Sub Public Sub ActiverPlyCmb() ' Activer le menu contextuel des onglets de feuille Application.CommandBars("Ply").Enabled = True End Sub
Dans la liste des menus contextuels intégrés, certaines barres de commandes sont répertoriées deux fois.
■ cellule
■ colonne
■ ligne
La raison en est qu’un menu contextuel distinct est fourni pour les vues Normal et Mise en page ainsi que pour l’aperçu des sauts de page. Quel menu contextuel est valable pour quelle vue ne peut être déterminé qu’à l’aide de l’ID.
Nom | Nom local | ID | Voir |
Cell | Cellule | 424 | Normal/Mise en page |
Row | Ligne | 425 | Normal/Mise en page |
Column | Colonne | 426 | Normal/Mise en page |
Cell | Cellule | 427 | Aperçu des sauts de page |
Row | Ligne | 428 | Aperçu des sauts de page |
Column | Colonne | 429 | Aperçu des sauts de page |
Pour éditer ou afficher un menu contextuel, il faut spécifier soit son nom soit l’index de la collection CommandBars, l’accès par ID n’est pas possible.
Si la référence est faite par nom, la première barre de commandes avec le nom spécifié dans la liste est acceptée pour les éléments portant le même nom.
Un référencement clair des barres de commandes du même nom n’est donc possible que via l’index de la liste des CommandBars. Pour cette raison, il est essentiel de déterminer les indices pour une identification claire dans chaque application Excel.
Les menus contextuels des cellules ont les index 36 et 39. Ils peuvent être affichés directement en utilisant la méthode ShowPopUp :
Application.CommandBars(36).ShowPopup ' Cellule - vue normale
Application.CommandBars(39).ShowPopup ' Cellule - Aperçu des sauts de page
Par exemple, pour modifier ou désactiver le menu contextuel de cellule dans toutes les vues, les deux barres d’outils CELLULE doivent être référencées dans le code VBA via leur index. L’index du menu contextuel de la première cellule peut être facilement déterminé à l’aide de la propriété Name :
lngIndice = Application.CommandBars(strPopUp).Index
Afin de déterminer l’indice du menu contextuel de cellule de l’aperçu de saut de page, l’indice du premier menu contextuel de cellule de la vue normale est d’abord déterminé. Les barres de commandes correspondantes du même nom sont situées exactement 3 index plus loin dans la liste CommandBars. Ce calcul peut être utilisé pour désactiver ou désactiver des menus contextuels de même désignation dans une procédure.
Dans l’exemple de procédure, les paramètres strPopup et blnEnabled sont déclarés dans la liste des arguments. Lors de l’appel de la procédure, le nom de la barre de commandes doit être spécifié, suivi d’une valeur booléenne qui indique si la barre de commandes nommée doit être activée ou désactivée.
Public Sub CallSetPopUp() ' désactiver les deux menus contextuels de cellule SetPopup "Cell", False End Sub Public Sub SetPopup(strPopUp As String, blnEnabled As Boolean) ' strPopUp attend Cellule, Ligne ou Colonne ' blnEnabled = True -> Activer le menu contextuel ' blnEnabled = False -> désactiver le menu contextuel Dim lngIndice As Long ' Indice du menu contextuel de la vue normale lngIndice = Application.CommandBars(strPopUp).Index Application.CommandBars(lngIndice).Enabled = blnEnabled ' Indice du menu contextuel d'aperçu des sauts de page lngIndice = lngIndice + 3 Application.CommandBars(lngIndice).Enabled = blnEnabled End Sub
Les modifications apportées aux menus contextuels affectent tous les classeurs ouverts de l’instance Excel et pas seulement le classeur à partir duquel le code a été appelé. Les menus contextuels désactivés restent désactivés lors de la fermeture et du redémarrage d’Excel. Ainsi, lorsque vous quittez votre fichier Excel, assurez-vous de restaurer toutes les barres d’outils à leur état normal et de les activer pour d’autres applications.