Pb activation/déactivation num lock (Verr Num)
Bonsoir le forum,
Suite a des contraintes technique je me retrouve à faire fonctionner mon petit fichier qu'avec un clavier numérique (17 touches)
Mon problème est que je dois désactivé la touche verr num lorsque la Colonne "C" est sélectionnée ( activation d'un userform à contrôler avec les flèches directionnelles du pavé numérique)
Après quelques recherche sur le net j'ai trouvé ceci ( sur un forum code vb et non vba) que j'ai mis dans un module de classe,
Je pense qu'il faut que je garde la Private Const VK_NUMLOCK = &H90 mais on ne sais jamais je garde tout pour l'instant
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As _
Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) _
As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As _
Integer
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" _
(ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Const VK_NUMLOCK = &H90
Private Const VK_SCROLL = &H91
Private Const VK_CAPITAL = &H14
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Public Sub SetKeyState(ByVal Key As Long, ByVal State As Boolean)
keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or 0, 0
keybd_event Key, MapVirtualKey(Key, 0), KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
If Key = 20 And State = False Then
keybd_event 16, 0, 0, 0
keybd_event 16, 0, 2, 0
End If
End Sub
Public Property Get CapsLock() As Boolean
CapsLock = GetKeyState(VK_CAPITAL) = 1
End Property
Public Property Let CapsLock(ByVal Value As Boolean)
SetKeyState VK_CAPITAL, Value
End Property
Public Property Get NumLock() As Boolean
NumLock = GetKeyState(VK_NUMLOCK) = 1
End Property
Public Property Let NumLock(ByVal Value As Boolean)
SetKeyState VK_NUMLOCK, Value
End Property
Public Property Get ScrollLock() As Boolean
ScrollLock = GetKeyState(VK_SCROLL) = 1
End Property
Public Property Let ScrollLock(ByVal Value As Boolean)
SetKeyState VK_SCROLL, Value
End Property
Autant vous dire que c'est du charabia pour moi,
Donc dans ma feuille1 j'ai mis ceci pour que le verr num se désactive lors de la sélection de la colonne C et se réactive lors de l'arrivé sur la colonne D
Private Sub Worksheet_SelectionChange(ByVal target As Range)
If Not Application.Intersect(target, Range("C:C")) Is Nothing Then
If NumLock = True Then NumLock = False
If target.Value = "" Then
Load formimg
formimg.Show
End If
End If
If Not Application.Intersect(target, Range("D:D")) Is Nothing Then
If NumLock = False Then NumLock = True
End If
End Sub
je me retrouve avec NumLock = vide
Si quelqu'un à une idée ou une solution pour résoudre mon problème,
je vous laisse mon fichier pour avoir une meilleur idée Merci
Rebonsoir à tous,
Ne trouvant pour l'instant aucune solution je me demandais si je pouvais réattribué à la touche 2 du pavé numérique (par exemple) l'action de la flèche du bas mais je n'ai pas trouvé de les correspondances des keycode du clavier en vba.
Je sais que enter = 13 mais je trouve rien sur le net qui corresponde à la valeur du keycode pour le clavier numérique.
il doit bien y avoir une table de correspondance entre la touche pressé et la valeur de du keycode ??
Du coup on pourrait faire un code du style if keycode " paveniumerique2" = true then listbox.index = listbox.index+1
je ne suis pas certain que cela fonctionne mais c'est peut êtres une piste à suivre? qu'en pensez vous?
Si un GP passe dans le secteur pour m'infirmer ou non mon idée je suis preneur
- Messages
- 2'415
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonsoir
le lien ci-dessous peut être utile
https://msdn.microsoft.com/fr-fr/VBA/Language-Reference-VBA/articles/keycode-constants
un échantillon du lien ci-dessus:
Les constantes suivantes représentent les touches du pavé numérique :
[...]
Constante | Valeur | Description |
vbKeyNumpad0 0 x 60 Touche 0
vbKeyNumpad1 0x61 Touche 1
vbKeyNumpad2 0x62 Touche 2
vbKeyNumpad3 0 x 63 Touche 3
vbKeyNumpad4 0 x 64 Touche 4
vbKeyNumpad5 0 x 65 Touche 5
vbKeyNumpad6 0x66 Touche 6
vbKeyNumpad7 0 x 67 Touche 7
vbKeyNumpad8 0x68 Touche 8
vbKeyNumpad9 0x69 Touche 9
vbKeyMultiply 0x6A Touche multiplication (*)
vbKeyAdd 0x6B SIGNE PLUS ( + ) clé
vbKeySeparator 0x6C Touche Entrée
vbKeySubtract 0x6D SIGNE moins ( - ) clé
vbKeyDecimal 0x6E Clé de virgule décimale ( **** )
vbKeyDivide 0x6F SIGNE DIVISION ( / ) clé
[...]
/////
Et le lien ci-dessous la gestion des touches que, je trouve très intéressant
http://users.skynet.be/micdub/vba6.htm
crdlt,
André
Merci andre13 effectivement je venais de tombé sur un article similaire sur l'utilisation sendkey
Donc mon code fonctionne nickel mais je ne comprend pourquoi
Dans ma feuille 1 j'ai ecrit ce code ( avec trop de if je pense mais bon ca fonctionne) et je lance ma sub VerrNum
Private Sub Worksheet_SelectionChange(ByVal target As Range)
i = ActiveCell.Column
If i = 3 Then
If ActiveCell.Value <> "" Then Exit Sub
If Not Application.Intersect(target, Range("C:C")) Is Nothing Then
If i <> 2 Then
VerrNum
If target.Value = "" Then
Load formimg
formimg.Show
End If
End If
End If
Else
If i = 4 Then
If ActiveCell.Value <> "" Then Exit Sub
VerrNum
End If
End If
End Sub
Mais ma sub VerrNum pour qu'elle déactive ou réactive la touche je suis obligé de faire 2 fois le sendkeys ??????
Sub VerrNum()
i = ActiveCell.Column
' If i = 3 Or i = 4 Then
If ActiveCell.Value <> "" Then
Exit Sub
Else
If i = 2 Then Exit Sub
SendKeys "{NUMLOCK}"
SendKeys "{NUMLOCK}"
End If
End Sub
Si quelqu'un est capable de me dire pourquoi en lançant 2 fois de suite le sendkeys ça fonctionne je suis preneur !!