Beug macro desactivation clique droit

Bonjour,

J'aimerais pouvoir désactiver le menu contextuel sur une plage de cellule d'une feuille Excel en y insérant un module dans un bouton de control.

J'avais trouvé cette solution :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub

Cela à fonctionner un certain temps, mais plus maintenant, et je peine à savoir d'où pourrais provenir l'erreur.
Merci de votre aide.

Bonjour,

Etrange ... Les codes de ce type se mettent dans le module de la feuille afin de ne pas afficher le menu contextuel, ici quelque soit la cellule cliqué. Chez moi cela fonctionne.

Si vous souhaitez limiter le code à une plage alors ce code devrait être :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, [A1:G100]) Is Nothing Then Cancel = True
End Sub

Je ne comprend pas votre histoire de module dans un bouton de contrôle .. Ca ne peut pas fonctionner comme ça. Quel est le but de ce bouton de contrôle ? Si c'est d'activer ou désactiver cette macro évenementielle alors il doit agir sur une variable déclarée en public, et vérifiée par la macro privée de la feuille. Si c'est True alors elle s'active, si False alors ça ne s'active pas.

Vos différents codes seraient les bienvenus, voir un fichier représentatif, avec votre besoin sur ce "bouton".

Cdlt,

Tout d’abord merci de votre attention et de votre réponse.

Je me suis peut-être mal exprimé, je mettrai en p. j. un exemple de mon fichier.

J'aimerais pouvoir activer et désactiver le menu contextuel sur une plage de cellule ou sur toute la feuille, cela n'a pas forcément d'importance.

Les boutons de contrôle seront directement liés à un module "activer" ou "désactiver" le clique droit. Cela à fonctionner également un certain temps chez moi, mais plus maintenant.
Je ne sais pas si j'ai pu être plus clair...

4exemple.xlsm (35.89 Ko)

Bonjour,

J'avais un peu prêt cette vision si. Ci contre les codes en suivant mon raisonnement :

'<----------------------------Code dans le module de votre feuille---------------------------------->
Const PlageControl = "C8:E14,G8:I14,C16:E22,G16:I22,C24:E27,G24:I27,C29:E38,G29:I38"

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range(PlageControl)) Is Nothing And CD = True Then 'Si se trouve sur une cellule de la plage et que CD est vrai alors
    Target.Interior.Color = xlNone 'Supprime couleur de la cellule
    Calculate
End If
Cancel = True 'Annule le menu contextuel du clic droit
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Me.Range(PlageControl)) Is Nothing And CD = True Then 'Si se trouve sur une cellule de la plage et que CD est vrai alors
    Target.Interior.Color = vbGreen 'Colorie la cellule en vert
    Calculate
End If
End Sub

'<----------------------------Code dans un module standard---------------------------------->
Public CD As Boolean 'Déclare une variable CD comme boolean en publique car vérifiée dans le module de feuille

Sub ActivationCliqueDroit()
Application.CommandBars("Cell").Enabled = True
CD = True 'Passe CD a True > Permet l’exécution des codes évenementiels
End Sub

Sub DesactivationCliqueDroit()
Application.CommandBars("Cell").Enabled = False
CD = False 'Passe CD a False > Empêche l’exécution des codes évenementiels
End Sub

Cdlt,

2exemple.xlsm (33.03 Ko)

Merci de votre retour,

Mais... Je pense avoir bien suivie votre process, en collant les code aux bons endroit. Mais je n'ai plus la coloration quand je clique sur une cellule...

Je vous met en PJ le fichier avec le module.

Merci

Bonjour,

Vous n'avez pas mis le début du code proposé dans le module 1, puis reafecter les macros aux bons boutons.

Cf le fichier corrigé.

Cdlt,

5exemple-1.xlsm (35.16 Ko)

Super! Mais je pense m'être mal éxprimer une nouvelle fois, désolé encore ( on va finir par y arriver)

Enfaite les bouton "activation" "désactivation" du clique droit doivent permettre de desactiver ou de réactiver le menu contextuel, mais pas interdire le changement de couleur.

Je m'explique étape par étape :

Quand j'ouvre mon fichier, je devrais être capable de cliquer n’importe où afin d'afficher le menu contextuel d’Excel

Au moment où je clique sur le bouton "désactivation clic droit" le menu contextuel devrait être bloqué uniquement sur la plage de cellule : C8:E14,G8:I14,C16:E22,G16:I22,C24:E27,G24:I27,C29:E38,G29:I38

Dans l'exemple que vous m'avez envoyé lorsque je clique sur "désactivation clic droit" uniquement la possibilité de changer la couleur dans la plage de cellule est désactivée.

Bonjour,

Dans ce cas, sur le même exemple que le fichier que j'avais joint, remplacez le code de la feuille :

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Me.Range(PlageControl)) Is Nothing Then 'Si se trouve sur une cellule de la plage alors
    Target.Interior.Color = xlNone 'Supprime couleur de la cellule
    Calculate
End If
If CD = False Then Cancel = True 'Annule le menu contextuel du clic droit
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Me.Range(PlageControl)) Is Nothing Then 'Si se trouve sur une cellule de la plage alors
    Target.Interior.Color = vbGreen 'Colorie la cellule en vert
    Calculate
End If
End Sub

Cdlt,

Parfait !

C'est exactement ça, merci beaucoup de votre aide !

(Je vais quand même essayer de comprendre le code... et pourquoi cela ne fonctionnait pas avant ?...)

Bonne journée.

Rechercher des sujets similaires à "beug macro desactivation clique droit"