VBA. Savoir si le pavé numérique est verrouillé ou non

modus57

XLDnaute Occasionnel
Bonjour à tous. ☼:cool:
Je vous sollicite encore car à l'utilisation de la commande SendKeys "%{DOWN}"pour dérouler automatiquement une liste déroulante lorsque la cellule concernée est sélectionnée fonctionne, sauf qu'à chaque clic ça verrouille ou déverrouille le pavé numérique…
J'ai trouvé sur l'aide de Microsoft la procédure suivante mais elle ne fonctionne pas :
Code:
Declare Function GetKeyState Lib "USER" (ByVal nVirtKey As Integer) As Integer
'Déclaration de Constante
Const VK_NUMLOCK = &H90 ' ou 144
 
Function toucheEstActivée(ByVal codeTouche As Integer) As Boolean
toucheEstActivée = CInt(GetKeyState(codeTouche)) = 1
End Function
 
'Procédure testant l'état de la touche de verrouillage du pavé numérique
Sub test()
    If toucheEstActivée(VK_NUMLOCK) = 1 Then
        MsgBox "Le pavé numérique est activé"
    Else
        MsgBox "Le pavé numérique n'est pas activé"
        toucheEstActivée(VK_NUMLOCK) = 1
    End If
End Sub
Je souhaiterai adapter cette macro de façon à pouvoir verrouiller le pavé numérique s'il est déverrouillé.
Merci pour votre aide.
 

modus57

XLDnaute Occasionnel
Re : VBA. Savoir si le pavé numérique est verrouillé ou non

Bonjour poulpor78.:)

Merci de ton intérêt à cette discussion et ton lien.
Code:
Declare Function GetKeyboardState Lib "user32" (lpKeyState As pByte) As Long
Declare Function SetKeyboardState Lib "user32" (lpKeyState As pByte) As Long
Type pByte
touche(0 To 255) As Byte
End Type
Dim clavier As pByte
 
Sub pavnum()
Call GetKeyboardState(clavier)
clavier.touche(vbKeyNumlock) = 1 - clavier.touche(vbKeyNumlock)
Call SetKeyboardState(clavier)
End Sub

Après avoir copié le code dans un nouveau classeur, le pavé numérique est bien activé la saisie de chiffres dans les cellules se fait normalement.
VBA. Savoir si le pavé numérique est verrouillé ou non image 1.jpg

Après désactivation du pavé numérique seul la saisie alphabétique dans les cellules est possible.
VBA. Savoir si le pavé numérique est verrouillé ou non image 2.jpg

Après lancement de la macro le pavé numérique la barre d'état n'affiche plus l'information "Verr.num"
VBA. Savoir si le pavé numérique est verrouillé ou non image 3.jpg

Il est plus possible de saisir un chiffre dans les cellules et la barre d'état affiche les l'information "Verr.num" et "Mode Fin"
VBA. Savoir si le pavé numérique est verrouillé ou non image 4.jpg

Globalement cette procédure ne fonctionne pas bien.
 

modus57

XLDnaute Occasionnel
Re : VBA. Savoir si le pavé numérique est verrouillé ou non

Bonjour, retour sur cette discussion.

J'ai beau chercher je ne trouve pas de solution.

Ci-joint fichier pour simuler le problème.

A chaque sélection dans la liste déroulante si le pavé numérique est verrouillé il se déverrouille automatiquement et inversement.

Les liens VBA : Connaître l'état d'une touche du clavier et BOGUE : Plusieurs SendKeys, instruction désactive touche VERR. NUM qui qui en parle.

Comment vérifier si le pavé numérique est verrouillé ou déverrouillé.

Personne n'aurait une petite idée ??...

Cordialement.

Modus57
 

Pièces jointes

  • VerrouillePavéNum .xlsm
    18.9 KB · Affichages: 110

modus57

XLDnaute Occasionnel
Re : VBA. Savoir si le pavé numérique est verrouillé ou non

Bonjour à tous, david84 .:)

Merci pour le lien, j'ai lu la discussion mais elle ne répond pas tout à fait à ma question.

En appliquant les conseils du support Microsoft (liens BOGUE : Plusieurs SendKeys, instruction désactive touche VERR. NUM) ça semble fonctionner.
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, [B4]) Is Nothing Then
        SendKeys "%{UP}"
        DoEvents
        SendKeys "{DOWN}"
    End If
End Sub
Mais je ne sais pas comment faire pour savoir dans une macro si le pavé numérique est verrouillé où déverrouillé.

La procédure recommandée par le lien Aide et Support de Microsoft VBA : Connaître l'état d'une touche du clavier ne fonctionne pas (voir mon premier post).

Un peu de lumière pour éclairer ma lanterne svp.
 
Dernière édition:

modus57

XLDnaute Occasionnel
Re : VBA. Savoir si le pavé numérique est verrouillé ou non

Bonsoir à tous.

Finalement j'ai trouvé la solution pour vérifier l'état de la touche "Verr Num", et changer son statut si elle n'est pas verrouillée voir ce lien Excel Num Lock key
Code:
Public Const VK_NUMLOCK = &H90
Public Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As Long
 
Sub VérifEtatNumlock()
If GetKeyState(VK_NUMLOCK) = 1 Then
    MsgBox "Pavé numérique activé"
Else
    MsgBox "Pavé numérique désactivé"
    SendKeys "{NUMLOCK}", True
End If
End Sub


Et pour ceux que cela intéresse voici comment intercepter l'évènement généré avant la fermeture d'un userform par la croix ou par le code.
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        MsgBox "Fermeture de l'userform à partir de la croix "
    ElseIf CloseMode = vbFormCode Then
        MsgBox "Fermeture de l'userform par le code"
    End If
End Sub

Merci infiniment pour votre aide.
 
H

Hawat

Guest
Bonjour est merci pour ton code modus57
en revanche la ligne

Public Declare Function GetKeyState Lib "User32" (ByVal nVirtKey As Long) As Long

se met en rouge, je pense que quelques chose m'échappe, quelqu'un aurait une idée?
Bonjour Alexandre : Ecrit "PtrSafe " devant Function GetkeyState etc... c'est pour la compatibilité des systèmes 64 bits.
Par contre la routine écrite plus haut pour l'activation de la touche Num en fonction de son état ne fonctionne pas... Tu pourrais revoir ça stp ?
 
H

Hawat

Guest
salut, voir ici à titre d'info
merci mais ça génère l'erreur suivante dans le module mTimer sur la routine TimerOn:
Sub TimerOn(Interval As Long)
TimerID = SetTimer(0, 0, Interval, AddressOf Maj)
End Sub
==>ça surligne "AdressOf Maj" et affiche un message d'erreur "Incompatibilité de type"...
De plus dans les déclarations de Function, il a fallu rajouter PtrSafe pour le pb de compatibilité avec les systèmes bits...
 

kiki29

XLDnaute Barbatruc
Salut, à toi de voir et appliquer : Développer avec Office 64 bits

Même Microsoft déconseille l'installation d'une version 64 bits d'Office.
Office 32 bits est recommandé pour la plupart des utilisateurs
Nous recommandons la version 32 bits d’Office pour la plupart des utilisateurs, car elle offre une plus grande compatibilité avec la plupart des autres applications, en particulier les compléments tiers. C’est la raison pour laquelle la version 32 bits d’Office est installée par défaut, même sur les systèmes d’exploitation Windows 64 bits. Sur ces systèmes, le client Office 32 bits est pris en charge en tant qu’installation Windows-32-on-Windows-64 (WOW64). WOW64 est l’émulateur x86 qui permet l’exécution de façon transparente des applications Windows 32 bits sur les systèmes Windows 64 bits. Cela permet aux utilisateurs de continuer à utiliser les contrôles ActiveX et les compléments COM Microsoft avec la version 32 bits d’Office.
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
660

Statistiques des forums

Discussions
312 213
Messages
2 086 307
Membres
103 174
dernier inscrit
OBUTT