Désactiver les menus contextuels

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.

S’abonner
Notifier de
0 Commentaires
Inline Feedbacks
Voir tous les commentaires

Initiation à Excel

Fonctions Excel

Excel VBA

Macros VBA Utiles

Plus d'outils

Sur Facebook

Sur YouTube

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x