TL;DR —
Worksheet_BeforeRightClickest un événement qu'Excel déclenche à l'instant où vous faites un clic droit sur une cellule — avant que le menu contextuel n'apparaisse. Il vous remetTarget(la cellule) etCancel. MettezCancel = Trueet le menu du clic droit intégré d'Excel est supprimé, ce qui vous permet de mettre votre menu — ou une action directe — à sa place. Le piège que presque tout le monde rencontre, c'est la portée : unCancel = Trueinconditionnel désactive Copier, Coller et Insérer pour toute la feuille, alors protégez-le avecIntersect. Et sachez-le d'emblée — désactiver le clic droit est un choix d'ergonomie, pas de sécurité.
' Réside dans le module de la feuille (double-cliquez « Sheet1 » sous Microsoft Excel Objets).
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Ne détourner les clics droits qu'à l'intérieur de la colonne Status ; laisser le reste de la feuille tranquille.
If Intersect(Target, Me.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True ' <-- supprimer le menu contextuel intégré
Target.Value = Date ' le clic droit inscrit la date du jour à la place
End Sub
La plupart des macros attendent un bouton. Worksheet_BeforeRightClick attend un geste — un
clic droit sur une cellule — et il s'exécute avant qu'Excel ne fasse ce qu'un clic droit
fait normalement : afficher le menu contextuel. Ce « avant » est l'ouverture dont vous avez
besoin. Vous pouvez supprimer le menu par défaut et lui substituer le vôtre, transformer un
clic droit en commande d'un seul geste, ou ajouter quelques éléments personnalisés à ce
qu'Excel propose déjà. C'est aussi l'événement vers lequel on se tourne pour « verrouiller »
une feuille — et c'est là que se cache la leçon la plus importante.
Ce que vous allez apprendre
- Le modèle mental — un clic droit est une demande de menu, et c'est à vous d'y répondre
- La règle qui compte le plus —
Cancel = Trueest ce qui supprime réellement le menu intégré - Pourquoi le ciblage avec
Intersectn'est pas facultatif — la version non ciblée paralyse la feuille - Le choix de jugement — désactiver le clic droit relève de l'ergonomie, jamais de la protection
- Niveau feuille vs niveau classeur, et où le code doit résider
Le modèle mental : une demande de menu à laquelle vous répondez
Un clic droit signifie déjà quelque chose pour Excel : « affiche-moi le menu contextuel de
cette cellule ». Quand vous écrivez Worksheet_BeforeRightClick, Excel appelle d'abord votre
code et attend — le menu n'est pas encore apparu. Vous recevez Target, la cellule sur
laquelle on a fait un clic droit, et Cancel, un Boolean passé par référence. Laissez
Cancel tel quel et Excel affiche son menu normal après l'exécution de votre code. Mettez
Cancel = True et il ne le fait pas — vous avez répondu vous-même à la demande, et le clic
droit signifie désormais ce que votre gestionnaire lui a fait signifier.
Cela recadre l'événement. Ce n'est pas « préviens-moi lors d'un clic droit ». C'est
« laisse-moi décider ce qu'un clic droit propose ici ». Vous pouvez exécuter une action
directement (inscrire une date, marquer une ligne, ouvrir un formulaire de détail), ou faire
surgir votre propre menu construit avec CommandBars. Dans tous les cas, le menu intégré ne
disparaît que lorsque vous le décidez, avec Cancel = True. Et comme tout événement de cette
famille, celui-ci réside dans le module de code propre à la feuille — pas un Module
standard, ni ThisWorkbook.
La règle qui compte le plus : Cancel = True supprime le menu intégré
Voici l'erreur. Vous voulez qu'un clic droit exécute votre propre commande, alors vous écrivez l'action et vous vous arrêtez là :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target.Value = Date ' inscrit la date... et le menu d'Excel surgit quand même
End Sub
La date s'inscrit — puis le menu contextuel complet apparaît malgré tout, parce que rien n'a
touché à Cancel. L'utilisateur se retrouve avec à la fois votre action et le menu
Couper/Copier/Coller d'Excel par-dessus. La règle : Cancel = True est la ligne qui remplace
le menu. Mettez-le chaque fois que votre gestionnaire est censé être la réponse au clic
droit :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True ' le menu intégré ne s'affiche jamais
Target.Value = Date ' votre commande constitue toute l'interaction
End Sub
Si au contraire vous voulez ajouter un élément plutôt que remplacer le menu, laissez Cancel
tel quel et ajoutez votre contrôle à Application.CommandBars("Cell") — Excel affiche son menu
avec votre élément supplémentaire. Supprimez (avec Cancel = True) quand vous remplacez ;
étendez la CommandBar Cell quand vous ajoutez.
La règle qui garde la feuille utilisable : cibler avec Intersect
Cet événement punit un gestionnaire non ciblé plus durement que tout autre. Si votre code
s'exécute à chaque clic droit et met Cancel = True, vous avez supprimé tout le menu du
clic droit de la feuille entière — plus de Copier, plus de Coller, plus d'Insérer, plus de
Filtrer, plus de Format de cellule, nulle part. Vous n'avez pas personnalisé la feuille ; vous
l'avez cassée.
Ciblez les cellules censées avoir un comportement personnalisé, et laissez toutes les autres cellules conserver leur menu normal :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
' Comportement personnalisé uniquement dans la colonne Status ; menu normal partout ailleurs.
If Intersect(Target, Me.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True
Target.Value = Date
End Sub
Intersect(Target, Me.Range("C2:C100")) renvoie Nothing hors de votre plage cible, si bien
qu'Exit Sub rend la main à Excel et le menu intégré apparaît comme d'habitude. C'est le même
garde-fou Intersect qui garde un gestionnaire Worksheet_Change
ciblé — ici, c'est la différence entre une feuille utile et une feuille inutilisable.
Le choix de jugement : désactiver le clic droit relève de l'ergonomie, pas de la sécurité
Les gens tombent sur cet événement en cherchant « comment désactiver le clic droit pour
protéger ma feuille ». Alors disons-le clairement : un blocage du clic droit par
Cancel = True ne protège rien. Il n'arrête qu'une seule voie de saisie — le menu de la
souris. Tout le reste fonctionne encore : Ctrl+C et Ctrl+V, le ruban, la Zone Nom, une
autre macro, et — l'argument qui clôt le débat — l'ouverture du fichier avec les macros
désactivées, ce qui coupe entièrement votre événement. Si votre modèle de menace, c'est un
utilisateur déterminé ou un acteur malveillant, BeforeRightClick n'y change rien.
Ce à quoi l'événement sert vraiment, c'est à façonner l'interaction : masquer un menu sans intérêt dans une zone de saisie, le remplacer par deux commandes qui collent réellement à la tâche, ou inscrire une valeur d'un geste. Servez-vous-en pour rendre la bonne action facile, pas pour rendre la mauvaise impossible. Si vous avez besoin d'une vraie protection, c'est la protection de la feuille, la protection de la structure du classeur, et le fait de ne pas se fier à un événement côté client — un tout autre outil.
La distinction qui décide où va le code : feuille vs classeur
Worksheet_BeforeRightClick est un événement au niveau feuille — il réside dans le module
d'une seule feuille et ne se déclenche que sur cette feuille. Pour appliquer le même
comportement partout, utilisez le jumeau au niveau classeur Workbook_SheetBeforeRightClick
dans ThisWorkbook, qui ajoute un premier argument, Sh, pour la feuille concernée :
' Dans ThisWorkbook — se déclenche pour un clic droit sur N'IMPORTE QUELLE feuille.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
If Sh.Name <> "Log" Then Exit Sub
If Intersect(Target, Sh.Range("C2:C100")) Is Nothing Then Exit Sub
Cancel = True
Target.Value = Date
End Sub
Le même choix que celui que vous faites avec
Worksheet_Activate vs Workbook_SheetActivate : une seule
feuille → le module de la feuille ; n'importe quelle feuille → le module du classeur avec
l'argument Sh. Et il forme une paire naturelle avec son frère gestuel
Worksheet_BeforeDoubleClick, qui intercepte un
double-clic avec la même forme Target plus Cancel.
Comment ExcelMaster aide
Un gestionnaire de clic droit, ce sont trois décisions faciles à rater : le garde-fou
Intersect qui maintient Copier et Coller en vie hors de votre plage cible, le Cancel = True
qui supprime réellement le menu, et le jugement honnête sur ce qu'un blocage protège et ne
protège pas.
ExcelMaster
vous laisse décrire le comportement à la place. Dites « un clic droit sur une cellule de la
colonne Status doit inscrire la date du jour et ne pas afficher le menu normal, mais laisser le
reste de la feuille tranquille », et il écrit un Worksheet_BeforeRightClick dans le bon
module, le cible avec Intersect, et règle Cancel. Vous gardez le classeur et le code ; vous
vous épargnez les tâtonnements — et on vous dit ce qu'il protège, on ne vous le vend pas.
Questions fréquentes
Comment exécuter une macro lors d'un clic droit dans Excel ?
Placez une procédure Worksheet_BeforeRightClick dans le module de code de la feuille :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean). Excel
l'appelle lorsqu'on fait un clic droit sur une cellule de cette feuille et passe Target.
Ajoutez votre action, et mettez Cancel = True si vous voulez remplacer le menu intégré.
Comment désactiver le menu du clic droit en VBA ?
Mettez Cancel = True à l'intérieur de Worksheet_BeforeRightClick. Cela supprime le menu
contextuel. Ciblez-le avec Intersect sauf si vous voulez vraiment le faire disparaître sur
toute la feuille — un blocage inconditionnel supprime Copier, Coller et Insérer partout. Notez
qu'il ne bloque que le menu de la souris ; ce n'est pas un contrôle de sécurité.
Désactiver le clic droit protège-t-il mes données ?
Non. Il ne supprime qu'une seule voie de saisie. Ctrl+C/Ctrl+V, le ruban, les autres macros
et l'ouverture du fichier avec les macros désactivées le contournent tous. Servez-vous de
BeforeRightClick pour fluidifier l'interaction, et utilisez la protection de feuille/classeur
pour une protection réelle.
Comment ajouter un élément personnalisé au menu du clic droit au lieu de le remplacer ?
Laissez Cancel non défini et ajoutez un contrôle à Application.CommandBars("Cell") — Excel
affiche son menu normal avec votre élément supplémentaire. Ne mettez Cancel = True que
lorsque vous voulez remplacer le menu plutôt que l'étendre.
Où placer le code Worksheet_BeforeRightClick ?
Dans le module de code de la feuille concernée — double-cliquez sur la feuille sous « Microsoft
Excel Objets » dans l'Explorateur de projets. Pour un clic droit sur n'importe quelle feuille,
utilisez plutôt Workbook_SheetBeforeRightClick dans ThisWorkbook. Il ne se déclenche pas
depuis un Module standard, et les macros doivent être activées.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 06/08/2026.
Guides associés : VBA Worksheet_BeforeDoubleClick · VBA Workbook_BeforePrint · VBA Worksheet_Change · VBA Worksheet_Activate et Deactivate · VBA Range
