Clic droit ou gauche ?

PlugNplay

XLDnaute Nouveau
Bonjour,

Dans mon projet VBA, j'ai créé du code dans les évènements Worksheet_SelectionChange et Worksheet_BeforeRightClick.
Je voudrais que seul le code de Worksheet_BeforeRightClick s'exécute quand l'utilisateur fait un clic droit.

J'ai essayé de dire à Worksheet_BeforeRightClick de mettre ma variable Cdroit (booléen) sur True, et ensuite j'ai dit à Worksheet_SelectionChange de ne s'exécuter que si Cdroit est à False.
Mais en fait c'est Worksheet_SelectionChange qui s'exécute en premier et pas Worksheet_BeforeRightClick , du coup la variable n'est pas basculée :(

Il me semble que le seul moyen serait de savoir si c'est un clic droit ou un clic gauche qui a été réalisé, mais je ne sais pas comment récupérer cette information

Quelqu'un peut-il m'aider svp ??

Merci d'avance
 

Softmama

XLDnaute Accro
Re : Clic droit ou gauche ?

Sinon dans ta procédure
VB:
Private Sub ..._BeforeRightClick( ... )

tu intègres au début de la macro cette ligne :
VB:
Application.EnbleEvents = False

puis en dernière ligne n'oublie surtout pas :
VB:
Application.EnableEvents = True

Ca garantira que l'autre évènement ne se déclenchera pas suite aux modifs apportées par l'évènement BeforeRightClicClic.
 

PlugNplay

XLDnaute Nouveau
Re : Clic droit ou gauche ?

Merci pour ta réponse Softmama

Mais en fait la procédure
Code:
Private Sub ..._SelectionChange( ... )
s'exécute la première, avant la procédure
Code:
Private Sub ..._BeforeRightClick( ... )


Du coup, les
Code:
Application.EnableEvents = ...
ne sont pas lus puisqu'ils sont dans la procédure
Code:
Private Sub ..._BeforeRightClick( ... )
 

Softmama

XLDnaute Accro
Re : Clic droit ou gauche ?

Re,

Arf pardon, j'avais zappé une partie du problème en effet. Je rectifie de suite le tir, avec ttes mes excuses :

Ceci devrait zapper le worksheet_selectionchange :

VB:
Private Declare Function GetAsyncKeyState Lib "User32" (ByVal vKey As Long) As Long

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
MsgBox "Grumpf"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If GetAsyncKeyState(2&) Then Exit Sub ' clic droit !
'sinon Gniarf !
MsgBox "Gniarf"
End Sub

En espérant ce coup-ci avoir su répondre à ta question !
 
Dernière édition:

PlugNplay

XLDnaute Nouveau
Re : Clic droit ou gauche ?

Waouh, merci beaucoup :cool: !

Après avoir regardé ton fichier exemple, je pense vraiment que ça devrait marcher dans mon classeur aussi !

Je ne comprends pas exactement ce que fait cette partie du code :
Code:
[COLOR="Navy"]Private Declare Function[/COLOR] GetAsyncKeyState [COLOR="navy"]Lib[/COLOR] "User32" ([COLOR="navy"]ByVal[/COLOR] vKey [COLOR="navy"]As Long[/COLOR]) [COLOR="navy"]As Long[/COLOR]
Je ne connais pas bien comment fonctionnent toutes ces Private Declare Function dont j'ai souvent entendu parler, mais je vais aller me renseigner. Ca pourrait bien m'être utile à d'autres occasions.

En tout cas, encore merci, j'étais vraiment à court d'idées :p
 

Softmama

XLDnaute Accro
Re : Clic droit ou gauche ?

Bonsoir,

GetAsyncKeystate est l'une des (nombreuses) fonctions fournies par windows (on les appelle des API et y en a plus de 250 il me semble) qui gèrent un tas de trucs : de tracer une ellipse, à gérer les fichiers, en passant par le son, l'image, la résolution de l'écran, le mouvement de la souris, les frappes au clavier (... tout quoi). Excel est capable d'utiliser ces ressources disponibles sous formes de fichiers .dll à condition de le lui signaler par la décalaration de type : Private Function...Lib... (avec des paramètres, parfois des constantes, et quelle Library elle utilise (ici user32.lib)). Une de ces fonctions les plus simples à utiliser est Sleep, qui permet de temporiser un code avec un certain temps en ms, sans s'exciter avec des timers de partout ^^

Une recherche simple sur un moteur de recherche en mettant "API Windows" t'ouvrira des champs nouveaux dans lesquels te plonger !
 

PlugNplay

XLDnaute Nouveau
Re : Clic droit ou gauche ?

Grand merci pour tes réponses (...ta patience :))

Effectivement, je ne savais pas qu'il en existait autant !
Comment fait-on pour s'y retrouver ?
Parce qu'avec des noms pareil en plus, c'est pas toujours facile de savoir à quoi est-ce que ça correspond...
Si je veux faire tel truc, comment je sais laquelle je dois utiliser ?

Enfin, je suis sûre de trouver des tas de tutos sur Internet donc je verrai bientôt ça ! J'ai quand même pas acheté un gros bouquin sur le vba excel pour rien ^^
 

Gorfael

XLDnaute Barbatruc
Re : Clic droit ou gauche ?

Salut PlugNplay et le forum
Pas sûr de bien comprendre le problème : Tu veux que la macro SelectionChange ne fonctionne que si le clic-droit n'est pas utilisé directement. Juste une remarque en passant : Avant de construire une usine à gaz, ne serait-il pas préférable de poser le but rée à atteindre, avant de trouver une astuce pour utiliser la seule méthode que tu ais trouvée ?

Pour moi, c'est plutôt les algorithmes qui posent problèmes : Une même action peut avoir 2 effets différents suivant la manière dont est réalisée l'action :confused:.
A+
 

PlugNplay

XLDnaute Nouveau
Re : Clic droit ou gauche ?

Pas sûr de bien comprendre le problème : Tu veux que la macro SelectionChange ne fonctionne que si le clic-droit n'est pas utilisé directement.

Bonjour,

En fait, en termes plus simples, ce que je veux c'est que :
  • lorsque je fais un clic gauche, seul SelectionChange s'exécute (normal)
  • lorsque je fais un clic droit, seul BeforeRightClick s'exécute. Et là par contre, si je me contente de mettre mon code dans les deux procédures évènementielles, SelectionChange s'exécute aussi (et avant BeforeRightClick)

Je pense que la solution proposée par Softmama fonctionnera (je m'en vais de ce pas l'essayer), mais si tu connais une méthode encore plus simple, n'hésite pas ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass