IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Bloquer la touche Verr.Num


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut Bloquer la touche Verr.Num
    Bonjour a toutes et tous, forum bonjour

    Je recherche svp un code VBA pour verrouiller la touche "Verr.Num" du clavier numérique.

    Car j'utilise le code ci-dessous et aléatoirement cela verrouille ou déverrouille la touche dans le cours d'utilisation du programme et cela est très ennuyant car je n'ai pas toujours l'oeil sur le voyant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SendKeys "{ENTER}"             ' Simule l'appui sur la touche "ENTER"
    SendKeys "{NUMLOCK}"
    Je souhaiterai svp que lors de l'ouverture de mon fichier de compta verrouiller efficacement la touche "VERR.Num"

    Merci a vous et de votre temps
    Bonne après midi a vous
    Cdlt

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir ici, en l'allégeant tu devrais y arriver.

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Salut

    Merci pour ta réponse, j'ai regarder le code et fait quelques essais comme conseiller mais bon ça marche pas

    pas réussi a trier et garder ce qu'il faut comme code pour aboutir

    C'est pas grave avoir essayer au moins

    A plus tard et encore merci

    Cordialement Ray

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Re,
    • Sur la base d'un Timer ici vérif toutes les 500 ms
    dans Module ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        TimerOff
    End Sub
     
    Private Sub Workbook_Open()
        TimerOn 500
    End Sub
    Dans un module standard nommé mTimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Option Explicit
     
    Dim Cls As New clsKeyboard
     
    Private Declare Function SetTimer Lib "User32" (ByVal hWnd As Long, _
                                                    ByVal nIDEvent As Long, _
                                                    ByVal uElapse As Long, _
                                                    ByVal lpTimerFunc As Long) As Long
     
    Private Declare Function KillTimer Lib "User32" _
                                       (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
     
    Dim TimerID As Long
     
    Sub TimerOff()
        KillTimer 0, TimerID
    End Sub
     
    Sub TimerOn(Interval As Long)
        TimerID = SetTimer(0, 0, Interval, AddressOf Maj)
    End Sub
     
    Private Sub Maj()
        If Cls.NumLock = False Then Cls.NumLock = True
        If Cls.CapsLock = True Then Cls.CapsLock = False
        If Cls.ScrollLock = True Then Cls.ScrollLock = False
        If Cls.PauseLock = True Then Cls.PauseLock = False
    End Sub
    Dans un module de classe à nommer clsKeyboard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    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 VK_PAUSE = &H13
     
    Private Const KEYEVENTF_EXTENDEDKEY = &H1
    Private Const KEYEVENTF_KEYUP = &H2
     
    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
     
    Public Property Get PauseLock() As Boolean
        PauseLock = GetKeyState(VK_PAUSE) = 1
    End Property
     
    Public Property Let PauseLock(ByVal Value As Boolean)
        SetKeyState VK_PAUSE, Value
    End Property
     
    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
    • La version vraiment allégée ... enfin presque sans Timer : vérif à l'ouverture seulement
    même chose pour le module de classe clsKeyboard

    Dans module de ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
     
    Private Sub Workbook_Open()
        Maj
    End Sub
    le module mTimer renommé en mMAJ et allégé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Dim Cls As New clsKeyboard
     
    Sub Maj()
        If Cls.NumLock = False Then Cls.NumLock = True
        If Cls.CapsLock = True Then Cls.CapsLock = False
        If Cls.ScrollLock = True Then Cls.ScrollLock = False
        If Cls.PauseLock = True Then Cls.PauseLock = False
    End Sub
    Si ensuite tu ne veux que le NumLock tu pourras supprimer les codes
    correspondant à CapsLock ScrollLock PauseLock dans mMAJ et clsKeyboard

  5. #5
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re Salut Kiki29

    Merci pour le code et pour l'explication, c'est gentil.

    Pour résumer avant de me lancer dans la mise en oeuvre de ton code.

    Car seule les touches Verr.Num et une simulation sur la touche "ENTER" m'interresse pour mon programme.

    Je souhaite svp voir la touche Verr.Num toujours allumer

    auquel cas si celle-ci s'éteint que le code me la rallume aussitôt, si bien

    sur cela est possible.

    Je regarde de plus près ton code

    Merci pour ton aide

    Raymond

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    re, La version minimale pour NumLock seul, avec une vérif toutes les 500 ms
    Dans module ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        TimerOff
    End Sub
     
    Private Sub Workbook_Open()
        TimerOn 500
    End Sub
    Dans un module standard baptisé mTimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Option Explicit
     
    Dim Cls As New clsKeyboard
     
    Private Declare Function SetTimer Lib "User32" (ByVal hWnd As Long, _
                                                    ByVal nIDEvent As Long, _
                                                    ByVal uElapse As Long, _
                                                    ByVal lpTimerFunc As Long) As Long
     
    Private Declare Function KillTimer Lib "User32" _
                                       (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
     
    Dim TimerID As Long
     
    Sub TimerOff()
        KillTimer 0, TimerID
    End Sub
     
    Sub TimerOn(Interval As Long)
        TimerID = SetTimer(0, 0, Interval, AddressOf Maj)
    End Sub
     
    Private Sub Maj()
        If Cls.NumLock = False Then Cls.NumLock = True
    End Sub
    Dans un module de classe baptisé clsKeyboard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    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 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 KEYEVENTF_EXTENDEDKEY = &H1
    Private Const KEYEVENTF_KEYUP = &H2
     
    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 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

Discussions similaires

  1. [XL-2007] Soucis avec la touche Verr.Num
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 25/10/2013, 18h14
  2. Touche Verr num toujours active.
    Par solika dans le forum Général Java
    Réponses: 6
    Dernier message: 16/03/2012, 12h20
  3. Réponses: 8
    Dernier message: 01/10/2007, 15h19
  4. Réponses: 1
    Dernier message: 22/09/2005, 20h46
  5. [MFC] Comment bloquer lma touche maximiser?
    Par xs_nady dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2004, 20h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo