Lorsque vous cliquez avec le bouton droit sur une cellule, Excel vous fournit un menu contextuel riche en fonctionnalités qui vous permet d’effectuer un certain nombre de choses. Vous souhaiterez peut-être ajouter certaines fonctionnalités à ce menu contextuel, en particulier s’il s’agit de fonctionnalités que vous utilisez souvent.

Malheureusement, vous ne pouvez pas modifier les menus contextuels de la même manière que vous pouvez modifier d’autres menus, en utilisant Personnaliser dans le menu Outils. Au lieu de cela, vous devez manipuler les menus contextuels via VBA.

Si vous souhaitez ajouter un élément au menu contextuel qui apparaît lorsque vous cliquez avec le bouton droit sur une cellule, vous pouvez utiliser le code suivant:

Sub AddItemToContextMenu()

Dim cmdNew As CommandBarButton     Set cmdNew = CommandBars("cell").Controls.Add

With cmdNew         .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True     End With End Sub

Tout ce que vous devez faire est de définir la propriété .Caption sur le texte de menu que vous souhaitez utiliser, puis de modifier la propriété .OnAction afin qu’elle pointe vers une macro ou une commande que vous souhaitez utiliser. Lorsque vous souhaitez ultérieurement supprimer l’option de menu, vous pouvez utiliser la macro suivante:

Sub RemoveContextMenuItem()

On Error Resume Next     CommandBars("cell").Controls("My Procedure").Delete End Sub

Pour utiliser cela, modifiez le texte «Ma procédure» en n’importe quel texte que vous avez utilisé dans la propriété .Caption de la macro précédente. L’instruction On Error est utilisée dans cette macro juste au cas où l’élément de macro spécifié n’aurait pas été précédemment ajouté.

En modifiant un peu votre macro, vous pouvez spécifier que l’ajout au menu contextuel doit se produire uniquement lors d’un clic droit sur des cellules spécifiques. La macro suivante vérifie si vous cliquez sur une cellule dans la plage C10: E25. Si tel est le cas, il ajoute une option de menu pour votre procédure à la fin du menu contextuel.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _   Cancel As Boolean)

Dim cmdNew As CommandBarButton

For Each icbc In Application.CommandBars("cell").Controls         If icbc.Tag = "brccm" Then icbc.Delete     Next icbc

If Not Application.Intersect(Target, Range("c10:e25")) _       Is Nothing Then         Set cmdNew = CommandBars("cell").Controls.Add         With cmdNew             .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True             .Tag = "brccm"

End With     End If End Sub

Dans l’éditeur VBA, cette macro doit être ajoutée à la feuille de calcul spécifique avec laquelle vous souhaitez qu’elle soit utilisée. Tout ce que vous avez à faire est de double-cliquer sur cette feuille de calcul, dans l’Explorateur de projet (coin supérieur gauche de l’éditeur VBA), puis de l’entrer dans la fenêtre de code de cette feuille de calcul.

Comme pour la macro précédente, tout ce que vous avez à faire est de modifier les paramètres spécifiés pour les propriétés .Caption et .OnAction. En outre, vous souhaiterez peut-être modifier la plage de cellules considérée comme «valide» lors de l’ajout d’un choix de menu – il suffit de modifier la spécification de plage «c: 10: e25» par la plage souhaitée. Vous pouvez même utiliser une plage nommée à la place de la plage de cellules, ce qui est idéal si votre plage valide est vraiment un ensemble de cellules non contiguës.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2064) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.