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

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 !!

Rechercher des sujets similaires à "activation deactivation num lock verr"