[VBA] Macro à la saisie d'une touche

8 réponses
Avatar
HD
Bonjour,

Sur une feuille, Je voudrais qu'à la saisie de la touche "+" une macro
se déclenche.

J'ai donc mis mon code avec Application.OnKey dans
Workbook_SheetActivate.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Saisie" Then
Application.OnKey "{+}", "TouchePlus"
Else
Application.OnKey "{+}"
End If
End Sub

Mon souci est que la fonction "TouchePlus" ne se lance pas lorsque l'on
est sur la feuille "Saisie" et que j'appuie sur la touche "+".

L'argument "{+}" correspond il bien à la touche "+" ?
Si oui, pourquoi cela ne fonctionne pas ?

Merci d'avance pour votre aide,

Cordialement,

HD

8 réponses

Avatar
MichD
Bonjour,

Si tu veux que la touche "+" soit détectée sur toutes les feuilles dès l'ouverture du classeur et
pour ce classeur en particulier, utilise le code suivant dans le thisworkook du projetVBA de ton
classeur.

La touche + dans cette situation précise à la valeur 107, c'est ce que tu dois utiliser au lieu de
la touche + dans la commande "Application.OnKey".

Évidemment, tu peux utiliser d'autres événements selon les objectifs que tu poursuis.

'--------------------------------------------------------------------
Private Sub Workbook_Activate()
Application.OnKey "{107}", "Module4.TouchePlus"
End Sub
'--------------------------------------------------------------------
Private Sub Workbook_Deactivate()
Application.OnKey "{107}"
End Sub
'--------------------------------------------------------------------


MichD
Avatar
MichD
Je précise, la valeur 107 est pour la touche + du pavé numérique du clavier.
Avatar
Geo
Bonjour

Excuse-moi, mais on ne passe dans le sub qu'au moment où le classeur
devient actif.

'--------------------------------------------------------------------
Private Sub Workbook_Activate()
Application.OnKey "{107}", "Module4.TouchePlus"
End Sub



Il faudrait que l'appui sur la touche soit effectué juste à ce
moment-là.
C'est la même chose d'ailleurs pour Sheet_Activate.

Ce que j'ai compris de la demande initiale c'est que la frappe sur la
touche + doit déclencher une macro uniquement si la frappe a lieu dans
une feuille donnée. Elle doit se faire autant de fois que le + sera
tapé dans cette feuille.
Le code initial ne peut pas marcher, il faut analyser toute la saisie
et ne faire un traitement particulier que si la feuille est active.
Avatar
HD
Je précise, la valeur 107 est pour la touche + du pavé numérique du
clavier.


Un grand MERCI à toi MichD.

Effectivement cela fonctionne bien mieux avec {107}.

Cordialement,

HD
Avatar
HD
Merci Geo. L'aide de MichD m'a bien aidée car mon souci était plus au
niveau de la capture de la touche "+" qui n'était pas prise en compte.

Mon script avec la modif :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Saisie" Then
Application.OnKey "{107}", "TouchePlus"
Else
Application.OnKey "{107}"
End If
End Sub

Fonctionne parfaitement.

"TouchePlus" est une fonction placé dans un module.

Cordialement,

HD
Avatar
Geo
Bonjour

Fonctionne parfaitement.



Habituellement un truc ne marche pas sans qu'on comprenne pourquoi.
L'inverse est rare, c'est le cas cette fois.
L'important est que ça fonctionne.
Avatar
HB
Bonsoir,

Le 27/05/2016 à 13:59, Geo a écrit :
Habituellement un truc ne marche pas sans qu'on comprenne pourquoi.
L'inverse est rare, c'est le cas cette fois.
L'important est que ça fonctionne.



Je ne comprends pas cette remarque
(mais peut-être était-ce de l'humour)
puisque le code me semble très clair.

HB



---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
Geo
Bonjour

(mais peut-être était-ce de l'humour)



oui

puisque le code me semble très clair.



Pas pour moi, mais ce n'est pas important.