Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

témoin verr num qui s'éteint et s'allume tout le temps

2 réponses
Avatar
Gundt
bonjour à tous,

J'ai un souci avec un phénomène étrange et qui devient vite agaçant car
il engendre des saisies de données erronées.
Dans l'application que j'ai créée sous Access 97, à chaque fois que
l'utilisateur choisit une valeur dans une une liste déroulante qui
s'ouvre automatiquement, 3 fois sur 4 environ, le témoin verr num s'éteint.
J'ai donc ajouté un petit script qui lance l'activation de verr num au
moment du déroulement de la liste : malheureusement, si le témoin verr
num ne s'était pas éteint, c'est l'effet inverse qui se produit.
Comme l'utilisateur doit saisir des quantités juste après avoir choisi
un article dans le déroulant, cela donne souvent des données
incohérentes (le curseur change de ctrl ou d epage écran) ou des
messages d'erreur car le curseur ne se trouve plus sur le ctrl quantité
et que c'est une valeur de saisie obligatoire.

J'ai essayé l'application (qui est faite pour tourner en runtime) sur
XP, sur 2000 et sur 98. J'observe le même phénomène y compris sur mon
poste où est installé Access 97.

Le code que je rajoute à l'ouverture de la liste déroulante, c'est :
Function Ouvreliste()
On Error GoTo Ouvreliste_Err

SendKeys "%{DOWN}"
numk
numk
Ouvreliste_Exit:
Exit Function

Ouvreliste_Err:
MsgBox Error$
Resume Ouvreliste_Exit

End Function

Je mets donc cette fonction =Ouvreliste() en propriété "Sur entrée" du
ctrl déroulant.

Ci-dessous, le code de numk dans le module verrouillage de touches.

Je viens de voir que le code est fait pour 95/98 et NT. Il date un peu
mais pour XP et 2000 : que faudrait-il ajouter ou modifier ?

Comme le code est assez long, je l'ai mis après ma signature.

Connaissez-vous ce problème et si oui, comment l'avez-vous solutionné ?

Merci d'avance.

Gundt


----------------------------------------------------
Option Compare Database
Option Explicit

'déclaration de type pour la version de l'os
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

'déclaration des API
Private Declare Function GetVersionEx Lib "kernel32" Alias _
"GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

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 GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

'déclaration des constantes
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

'déclaration des variables
Dim o As OSVERSIONINFO
Dim numlockstate As Boolean
Dim scrolllockstate As Boolean
Dim capslockstate As Boolean


' verrouillage de la touche numlock
Function numk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

numlockstate = keys(VK_NUMLOCK)
If numlockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_NUMLOCK) = 1
SetKeyboardState keys(0)
''cas de win NT
'dans le cas de NT, enlever les ' ci-après
'ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
' 'simulation de la pression de la touche
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
' 'simulation de la touche relâchée
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function


' verrouillage de la touche capslock
Function capsk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

capslockstate = keys(VK_CAPITAL)
If capslockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_CAPITAL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function

' verrouillage de la touche scrollock
Function scrollk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

scrolllockstate = keys(VK_SCROLL)
If scrolllockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function

2 réponses

Avatar
ze Titi
Salut Gundt !

Le problème viendrai du SendKeys que ça ne m'étonnerait qu'à moitié...

Utilise plutôt:

taListe.DropDown
pour lancer l'ouverture de la liste...

En ce jour exceptionnel du jeudi 08/03/2007, tu nous as très
généreusement gratifié du message suivant:

bonjour à tous,

J'ai un souci avec un phénomène étrange et qui devient vite agaçant car il
engendre des saisies de données erronées.
Dans l'application que j'ai créée sous Access 97, à chaque fois que
l'utilisateur choisit une valeur dans une une liste déroulante qui s'ouvre
automatiquement, 3 fois sur 4 environ, le témoin verr num s'éteint.
J'ai donc ajouté un petit script qui lance l'activation de verr num au moment
du déroulement de la liste : malheureusement, si le témoin verr num ne
s'était pas éteint, c'est l'effet inverse qui se produit.
Comme l'utilisateur doit saisir des quantités juste après avoir choisi un
article dans le déroulant, cela donne souvent des données incohérentes (le
curseur change de ctrl ou d epage écran) ou des messages d'erreur car le
curseur ne se trouve plus sur le ctrl quantité et que c'est une valeur de
saisie obligatoire.

J'ai essayé l'application (qui est faite pour tourner en runtime) sur XP, sur
2000 et sur 98. J'observe le même phénomène y compris sur mon poste où est
installé Access 97.

Le code que je rajoute à l'ouverture de la liste déroulante, c'est :
Function Ouvreliste()
On Error GoTo Ouvreliste_Err

SendKeys "%{DOWN}"
numk
numk
Ouvreliste_Exit:
Exit Function

Ouvreliste_Err:
MsgBox Error$
Resume Ouvreliste_Exit

End Function

Je mets donc cette fonction =Ouvreliste() en propriété "Sur entrée" du ctrl
déroulant.

Ci-dessous, le code de numk dans le module verrouillage de touches.

Je viens de voir que le code est fait pour 95/98 et NT. Il date un peu mais
pour XP et 2000 : que faudrait-il ajouter ou modifier ?

Comme le code est assez long, je l'ai mis après ma signature.

Connaissez-vous ce problème et si oui, comment l'avez-vous solutionné ?

Merci d'avance.

Gundt


----------------------------------------------------
Option Compare Database
Option Explicit

'déclaration de type pour la version de l'os
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type

'déclaration des API
Private Declare Function GetVersionEx Lib "kernel32" Alias _
"GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

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 GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long

Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long

'déclaration des constantes
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_CAPITAL = &H14
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2
Const VER_PLATFORM_WIN32_NT = 2
Const VER_PLATFORM_WIN32_WINDOWS = 1

'déclaration des variables
Dim o As OSVERSIONINFO
Dim numlockstate As Boolean
Dim scrolllockstate As Boolean
Dim capslockstate As Boolean


' verrouillage de la touche numlock
Function numk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

numlockstate = keys(VK_NUMLOCK)
If numlockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_NUMLOCK) = 1
SetKeyboardState keys(0)
''cas de win NT
'dans le cas de NT, enlever les ' ci-après
'ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
' 'simulation de la pression de la touche
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
' 'simulation de la touche relâchée
' keybd_event VK_NUMLOCK, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function


' verrouillage de la touche capslock
Function capsk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

capslockstate = keys(VK_CAPITAL)
If capslockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_CAPITAL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_CAPITAL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function

' verrouillage de la touche scrollock
Function scrollk()

o.dwOSVersionInfoSize = Len(o)
GetVersionEx o
Dim keys(0 To 255) As Byte
GetKeyboardState keys(0)

scrolllockstate = keys(VK_SCROLL)
If scrolllockstate <> True Then
'cas de win95 ou win98
If o.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then
keys(VK_SCROLL) = 1
SetKeyboardState keys(0)
'cas de win NT
ElseIf o.dwPlatformId = VER_PLATFORM_WIN32_NT Then
'simulation de la pression de la touche
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
'simulation de la touche relâchée
keybd_event VK_SCROLL, &H45, KEYEVENTF_EXTENDEDKEY Or
KEYEVENTF_KEYUP, 0
End If
End If

End Function


--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
Gundt
Re bonjour,
Salut Gundt !

Le problème viendrai du SendKeys que ça ne m'étonnerait qu'à moitié...

Utilise plutôt:

taListe.DropDown
pour lancer l'ouverture de la liste...


Effectivement, cela a l'air d'aller mieux : j'ai fait 4 à 5 essais et à
chaque fois, le témoin verr num est resté allumé.

Je vais modifier mes formulaires en ce sens.

Merci bien à ze Titi.

Gundt