Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Touche CTRL + Bouton

Magic_Doctor

XLDnaute Barbatruc
Bonsoir à tous,

Sur ma feuille, j'ai un bouton (Controle ActiveX).
Quand je clique dessus, je passe de "Vue Normale" à "Plein Écran". Quand je reclique dessus, je passe de "Plein Écran" à "Vue Normale".
Rien de bien compliqué dans tout ça.
Maintenant, je voudrais assigner à ce bouton une fonction, disons, "secrète". Si j'appuie sur la touche "CTRL" et que je clique en même temps sur le bouton, alors il se passe quelque chose.

Comment s'y prendre ?

Merci d'avance pour tout conseil.

Bonne nuit à tous.
 

job75

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonjour Magic_Doctor,

Il faut une 2ème touche, par exemple appuyer sur Ctrl+<.

Dans le code de la feuille :

Code:
Private Sub CommandButton1_Click()
'le code
ActiveCell.Activate
Application.OnKey "^<", "Active"
Application.OnTime 1, "Desactive"
End Sub
Dans un module standard :

Code:
Sub Active()
MsgBox "bonjour" 'pour tester
'le code "secret"
End Sub

Sub Desactive()
Application.OnKey "^<", ""
End Sub
A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Re,

La touche de tabulation est plus "neutre", et facile d'accès (utiliser le pouce et l'index).

De plus il est mieux d'éviter que le code "secret" soit exécuté plusieurs fois quand on maintient les touches enfoncées, il faut cliquer de nouveau sur le bouton pour l'exécuter :

Code:
Private Sub CommandButton1_Click()
'le code
ActiveCell.Activate
Application.OnKey "^{TAB}", "Active"
Application.OnTime 1, "Desactive"
End Sub
Code:
Sub Active()
Application.OnKey "^{TAB}" 'évite les répétitions
MsgBox "bonjour" 'pour tester
'le code "secret"
End Sub

Sub Desactive()
Application.OnKey "^{TAB}"
End Sub
Edit : avec cette touche l'argument "" est inutile, sur mon ordi en tout cas.

A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonsoir job, le forum,

Pas pu répondre avant, car absent.
En attendant, les idées à ce sujet se sont éclaircies.
J'ai essayé maintes fois tes solutions, mais ça ne marchait pas. J'ai dû me planter quelque part.
Voilà ce que je voudrais :

La feuille est en "Vue normale" --> on ne voit pas le poulpe.
Je passe en mode "Plein écran" --> on ne voit toujours pas le poulpe.
Seulement en mode "Plein écran", quand on réalise une combinaison de touches, le poulpe apparaît.
Quand on revient en "Vue normale" --> le poulpe disparaît.

Utiliser la combinaison "CTRL + Tab" me paraît une bonne idée (c'est en effet plus ergonomique), mais n'y aurait-il pas interférence avec les macros qui gèrent la touche "Tab" pour se dé`lacer verticalement dans les cellules non protégées ?

Bonne soirée à tous.

PS : mot de passe "zaza"
 

Pièces jointes

  • Compteur (6).xlsm
    185.3 KB · Affichages: 40
  • Compteur (6).xlsm
    185.3 KB · Affichages: 48

job75

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonjour Magic_Doctor,


C'est sûr qu'utiliser Application.OnKey "^{TAB}" etc pour lancer des macros différentes nécessite des précautions...

Il vaut mieux des touches différentes sauf si l'on a Alzheimer.

A+
 

Papou-net

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonsoir Magic_Doctor, job75, le forum,

Puisqu'il n'est pas possible de détecter l'appui d'une touche dans un module de feuille de calcul, je propose d'utiliser le clic droit de la souris sur le bouton pour afficher/masquer "el pulpo".

Voir copie en PJ.

Cordialement.
 

Pièces jointes

  • Copie de Compteur (6).xlsm
    181.6 KB · Affichages: 46
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonjour Magic_Doctor, job75, Papou-net, le forum,

Voici un code qui a l’air de fonctionner pour contrôler si la touche <Ctrl> est pressée :
VB:
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long

Public Function CtrlIsPressed() As Boolean
    Select Case GetKeyState(&H11)
        Case 0, 1
            CtrlIsPressed = False
        Case Else
            CtrlIsPressed = True
    End Select
End Function

Il faut mettre ce code dans un module standard et utiliser la function CtrlIsPressed().

A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonsoir Papou-net, job, mromain,

J'ai testé la solution de Papou-net qui marche très bien. Ma foi, faire un clic droit sur le bouton avec la souris, je n'y avais pas pensé. Après tout, pourquoi pas. L'essentiel c'est que ça marche et de pouvoir tromper l'ennemi...

Pas encore essayé la solution de mromain. Demain.

Merci à vous tous.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Touche CTRL + Bouton

Bonjour à tous,

Et ceci ?:
Code:
Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Shift = 2 Then
  MsgBox "Ctrl appuyé"
Else
  MsgBox "No control"
End If
End Sub

nota : Maj -> 1, Ctrl -> 2, Alt ->4. On peut cumuler. Par exemple si on veut Maj+Ctrl, remplacer Shift =2 par Shift =3
 

Pièces jointes

  • Magic_Doctor- Touche CTRL- v1.xlsm
    15.9 KB · Affichages: 30
Dernière édition:

job75

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonjour Magic_Doctor, Papou-net, mromain, mapomme, le forum,

L'API Windows de mromain appliquée à la touche "Ctrl" est la solution la plus simple.

Il suffit ensuite d'écrire dans ChangeEtat :

Code:
f.Shapes("Pulpo").Visible = Not test And CtrlIsPressed
Fichier joint.

Bonne journée.

A+
 

Pièces jointes

  • Compteur (6).xlsm
    192.5 KB · Affichages: 38
  • Compteur (6).xlsm
    192.5 KB · Affichages: 41

Magic_Doctor

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Bonjour mapomme, job, le forum,

job, je viens d'essayer à l'instant, effectivement ça marche très bien et c'est "laconique".
Je n'ai plus que l'embarras du choix.

Merci pour votre aide.
Bonne journée.
 

job75

XLDnaute Barbatruc
Re : Touche CTRL + Bouton

Re,

Notez qu'on peut utiliser directement la fonction GetKeyState :

Code:
f.Shapes("Pulpo").Visible = Not test And InStr("01", GetKeyState(17)) = 0
Fonctionne sur toutes versions Windows/Excel.

Quand on appuie sur "Ctrl", sur les anciennes versions, GetKeyState renvoie une valeur < 0.

Sur les versions récentes, GetKeyState renvoie une valeur > 1.

Fichier (6 bis).

A+
 

Pièces jointes

  • Compteur (6 bis).xlsm
    192.5 KB · Affichages: 44

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…