XL 2016 msgbox si double clic ou clic droit sur cellule au lieu d'1 seul clic

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Je bute sur un code que je n'arrive pas à faire fonctionner malgré mes recherches et essais.

J'ai fait les codes suivants :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("l1:l10000")) Is Nothing Then
    MsgBox ("Il ne faut pas double cliquer dans cette colonne !" & nbcel)
    Cells(ActiveCell.Row, 1).Select
    Exit Sub
    End If
    End Sub

Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("l1:l10000")) Is Nothing And R.Count = 1 Then
    MsgBox ("Bravo vous n'avez cliqué qu'une fois !" & nbcel)
    End If
End Sub

Mais même si on double clic par erreur, c'est le code "Private Sub Worksheet_SelectionChange(ByVal R As Range)"

Ma question : Est-il possible que si on double clic, que ce soit le double clic qui s'exécute en 1er ?


Un grand merci pour vos réponses.
Bonne fin de journée à toutes et à tous,
Amicalement,
lionel,
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

ok !

voir ce dont j'essaies de t'expliquer !
sinon je comprend pas pourquoi sur une même feuille on mettrait les deux codes sur une même colonne
puisque tu dis qu'il s'agit de feuilles différentes, donc il faut les codes séparées dans les feuilles selon besoin !

le problème pourrait se poser si ce code était dans le thisworkbook
encore que là on pourrait tester les feuilles !?
 

Pièces jointes

  • Test SimpleDoubleclic_2Feuil.xlsm
    17.1 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonsoir.
On pourrait s'en sortir comme ça pour que le double clic empêche l'exécution du code de la sélection, mais celui ci est alors retardé d'une demi-seconde s'il n'y a pas de double clic :
VB:
Option Explicit
Private DblClic As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim TDéb As Single
   DblClic = False
   TDéb = VBA.Timer
   Do: DoEvents: Loop Until VBA.Timer - TDéb > 0.5
   If DblClic Then Exit Sub
   MsgBox "SelectionChange non annulé"
   End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   DblClic = True
   MsgBox "BeforeDoubleClick"
   Cancel = True
   End Sub
 

Dranreb

XLDnaute Barbatruc
On peut aussi mettre les actions à faire dans un module standard :
VB:
Option Explicit
Public TypeSel As Byte, RngCible As Range
Sub SelChg()
   Select Case TypeSel
      Case 0: MsgBox "Sélection " & RngCible.Address(False, False, xlA1, True)
      Case 1: MsgBox "Clic droit sur " & RngCible.Address(False, False, xlA1, True)
      Case 2: MsgBox "Double clic sur " & RngCible.Address(False, False, xlA1, True)
      End Select
   End Sub
Et dans le module de l'objet Worksheet :
VB:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Application.OnTime Now + TimeSerial(0, 0, 1), "SelChg"
   TypeSel = 0
   Set RngCible = Target
   End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
   TypeSel = 1
   Set RngCible = Target
   Cancel = True
   End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   TypeSel = 2
   Set RngCible = Target
   Cancel = True
   End Sub
Mais là, toutes les actions possibles sont retardées d'une seconde.
C'est quand même rare qu'on ait besoin d'exactement 3 actions différentes possibles sur une cellule.
Pour seulement 2 je me contenterais d'une BeforeDoubleClick et d'une BeforeRightClick
Pour plus de 3 aussi en les regroupant en 2 catégorie et en les différenciant par une InputBox ou, s'il n'y en a pas trop par une MsgBox YesNoCancel
Ou alors simplement une BeforeRightClick qui affiche un petit UserForm avec des boutons pour choisir ce qu'on veut faire sur la cellule.
Une méthode dans celui ci qui s'occuperait du Me.Show et retournerait le caption du bouton serait pas mal.
On aurait même de quoi positionner l'UserForm juste à coté de la cellule, n'est-ce pas …
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Bonjour Lionel

j'ai toujours pas compris pourquoi tu es embêté avec simple clic et double clic dans une même feuille !?
pourquoi tu veux les deux dans une même colonne et même feuille c'est incohérent et c'est incompatible !

tu m'as répondu, je ne sais plus où, que s'était à cause que dans cette même colonne dans certaines feuilles
c'était avec double clic et d'autres simple clic, d'accord, mais alors il suffit de mettre le code qui convient à chaque feuille
et pas les deux ensemble !
comme je t'ai déjà dis:
si dans une feuille la même colonne c'est simple clic et bien tu y mets le code pour simple clic et pas le double clic
si dans une feuille la même colonne c'est double clic et bien tu y mets le code pour double clic et pas le simple clic
mais pas les deux à chaque fois !

j'aimerai que tu m'expliques ça !?

EDIT: l'astuce de Dranreb Ok, mais ton usine à gaz va finir par exploser avec toutes ces combines !
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re Roland, Re-Dranreb, le Forum,

Je prends une pose et ma détente est de m'enm..d.. avec la codification excel LOL.
Je réponds à ce que tu m'as dit :
Cela ne concerne qu'1 seule feuille.
Non seulement j'ai le Doubleclic et simple clic dans cette feuille mais en plus ... lol j'ai le clic droit.
Et rigolo que je suis, malgré mon niveau, grâce à vous tous, j'arrive à faire cohabiter tout ça dans le code de cette feuille.

Le doubleclic :
dans 1 colonne de la feuille, il me sert à insérer un n° de téléphone si la cellule cliquée est vide,
si la cellule contient déjà un n° de tel, un msgbox me demande si je veux remplacer le n°.

Mais dans cette même colonne donc la même colonne cliquée, si clic droit, il déclenche la copie de la cellule
et il ne reste plus qu'à coller dans le logiciel pour téléphoner.

Le simple clic
J'ai 2 colonnes pour lesquelles il ne faut qu'1 simple clic pour entrer les infos et le souci est que le doubleclic
ou clic droit dans cette colonne posent problème.

L'objet de ma demande
Je suis loin d'être un ténor en VBA même si j'ai réussi à "coder" mon classeur (encore une fois grâce à vous tous)
mais comme dirait mon ami Gérard, je suis au bord de l'usine à gaz et pourtant, pour l'instant il fonctionne plutôt très bien.

J'ai prévu de le refaire complètement mais cause manque de temps, je ne sais pas quand je pourrai le faire.
Aujourd'hui, je cherchais une solution facile à intégrer dans mon classeur pour signaler et annuler l'opération si doubleclic dans
la colonne ou il ne faut qu'1 seul clic.

Et Youpy !!! le code feuille 'Dranreb2" de Dranreb correspond exactement à mon besoin.

J'espère que je me suis pas trop mal expliqué LOL.
Je joins le fichier avec le code de Dranreb qui fonctionne super.
Si Dranreb ou toi-même pouvait me faire la condition si clicdroit dans la colonne ou il ne faut qu'1 clic (col L), ce serait parfait :)

Un grand merci à vous deux et je pense que ces codes seront utiles à d'autres que moi :)
Amicalement,
lionel,
 

Pièces jointes

  • Test doubleclic.xlsm
    23.3 KB · Affichages: 4

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne suis pas arrivé à intégrer le clic droit avec la solution préconnisée seulement pour le double clic. La sélection était toujours exécutée quand même. C'est pourquoi j'ai proposée la solution avec un module standard qui admettait les 3 sortes.
 

Roland_M

XLDnaute Barbatruc
re bonjour tout le monde,

en fait Double-Clic et Clic-Droit cohabitent parfaitement !
le problème c'est le simple clic qui se déclenche en premier !
il faudrait trouver autre chose pour lui !
dommage qu'il n'y ai pas par exemple Ctrl+Clic !

EDIT: on parle d'usine à gaz, bien qu'il ne s'agisse pas de gaz ici, fais tout de même attention à ne pas reproduire la cata de ROUEN chez toi !:mad:;)
je sais pas si de là bas tu es au courant des infos en france !?
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Roland :)

EDIT: on parle d'usine à gaz, bien qu'il ne s'agisse pas de gaz ici, fais tout de même attention à ne pas reproduire la cata de ROUEN chez toi !:mad:;)
je sais pas si de là bas tu es au courant des infos en france !?


Si ça explose ce sera moins dangereux qu'à Rouen LOL
OUI, je suis au courant car j'ai toujours un oeil sur mon pays et je suis en permanence sur les infos.

Le code de Dranred est super et fonctionne bien mais il manque le code pour le clic droit.
Voici ce qu'il a répondu à mon message post 24 :

"Je ne suis pas arrivé à intégrer le clic droit avec la solution préconnisée seulement pour le double clic. La sélection était toujours exécutée quand même. C'est pourquoi j'ai proposée la solution avec un module standard qui admettait les 3 sortes."

Je continue à chercher mais vu mon niveau ... j'ai comme un doute LOL :)
lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
LOl Deanreb, c'est que je n'y comprends rien, je ne vois pas d'où viennent les messages etc..
et ça beug quand je remplace le code :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Not Application.Intersect(Target, Range("l1:l10000")) Is Nothing Then
   Application.OnTime Now + TimeSerial(0, 0, 1), "SelChg"
   TypeSel = 0
   Set RngCible = Target
   End If
   End Sub
par :
Code:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
   If Not Application.Intersect(R, Range("l1:l10000")) Is Nothing Then
   Application.OnTime Now + TimeSerial(0, 0, 1), "SelChg"
   TypeSel = 0
   Set RngCible = R
   End If
   End Sub

Car toutes mes lignes de code ne sont pas Target mais R

D'autre part, ton code que je préfère me permet de régler le temps d'attente :
"DoEvents: Loop Until VBA.Timer - TDéb > 1 à 0.15" et comme on clique des centaines de fois par jour, c'est un gain de temps appréciable.

Mais je vais m'en sortir en prenant ton code sans module standard.
Merci à toi c'est déjà super bien :)
lionel,
 

Discussions similaires

Statistiques des forums

Discussions
312 083
Messages
2 085 188
Membres
102 809
dernier inscrit
Sandrine83