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

Access Discussion :

W7 32 bits et pavé numérique


Sujet :

Access

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut W7 32 bits et pavé numérique
    Bonjour,

    Je gère une application fonctionnant sous MS Access 2010 runtime et Windows 7. Régulièrement, sur les postes W7 32 bits, lors de l'ouverture ou de la fermeture de formulaires le verrouillage du clavier numérique s'inverse. Il suffit bien sur de le repositionner manuellement pour en retrouver les fonctions mais c'est source d'erreurs et particulièrement énervant pour les utilisateurs.

    Cela se produit sur les ordinateurs avec W7 32 bits uniquement, (la même application fonctionne aussi sur des postes XP et W7 64). Je n'ai pas le moyen d'essayer avec une version antérieure d'Access mais j'observe la même chose lorsque j'utilise Access (complet) sur mon poste W7/32.

    Quelqu'un sait-il si Microsoft connait ce problème et si une correction ou un contournement sont proposés ?

    Merci.

  2. #2
    Membre expérimenté Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 116
    Points : 1 618
    Points
    1 618
    Par défaut
    J'utilise ça parce que j'ai eu des soucis à ce sujet :

    Déclaré au démarrage de l'appli :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Declare Sub keybd Lib "user32" Alias "keybd_event" _
      (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
      ByVal dwExtraInfo As Long)
    Forcer NumLock :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        '---------  Forcer NumLock si nécessaire
        If (&H1 And GetKeyState(vbKeyNumlock)) = 0 Then appui_touche (144) '------ NumLock
    La fonction qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub appui_touche(T As Long)
            'appuie sur la touche
            keybd T, 0, 0, 0
            'relache la touche
            keybd T, 0, 2, 0
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut VARIANTE
    Merci Stigma pour le tuyaut,

    Je l'ai essayé mais sans succès (plantage Access 20010 de la fonction GetKeystate !)

    Toutefois ça m'a mis sur une piste recevable que j'ai développée de la manière suivante :

    Dans un module indépendant : déclaration des fonctions API et constantes associées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Const VK_NUMLOCK As Long = &H90
    Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
    Private Const KEYEVENTF_KEYUP As Long = &H2
     
    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.dll" (pbKeyState As Byte) As Long
    Création d'une procédure prenant en charge le basculement d'état de la touche si l'état courant n'est pas conforme à ce qui est demandé (paramètre "activation") :
    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
    Public Function EtatTouche(Optional ByVal Activation As Boolean = True, Optional ByVal Touche As Long = VK_NUMLOCK)
    '======================================================================
    ' Description
    '--------------------------
    '  Active (par défaut) ou désactive (si précisé) le verrouillage de la touche 'Touche'
    '
    '======================================================================
    Dim bytKeys(255) As Byte
    Dim bnumLockOn As Boolean
    Static VersionSystème As Integer
     
    '======================================================================
    '  Récupération de la situation actuelle des touches
    GetKeyboardState bytKeys(0)
     
    If VersionSystème = 0 Then
       '  Identifie la version courante du système
       VersionSystème = MonOsVersion()
    End If
     
    If VersionSystème >= 5 Then '  a partir d'XP uniquement
       '  C'est en comparant à 1 qu'on obtient le bon résultat et non à &H80
       bnumLockOn = ((bytKeys(Touche) And &H1) = &H1)   '  Vrai si NumLock actif
     
       If bnumLockOn <> Activation Then 'if current state <> requested state
             'Simule l'appui sur la touche
             keybd_event Touche, &H45, KEYEVENTF_EXTENDEDKEY Or 0, 0
             'Simule le relâchement de la touche
             keybd_event Touche, &H45, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
             DoEvents
       End If
    End If
     
    EtatTouche = true
    end Function
    Le test de la fonction EtatTouche() à partir de la fenêtre d'exécution est satisfaisant.

    J'ai appelé ensuite la fonction EtatTouche() à chaque ouverture et à chaque fermeture de fenêtre pas drôle quand on a déjà plus de 100 formulaires dans le projet mais ça n'a pas résolu mon problème

    J'ai renforcé en appelant la fonction lors de l'événement Activate du formulaire : toujours sans effet !

    J'insiste encore en rappelant que le phénomène est reproductible et se présente uniquement sur Windows 7 32 bits (Access 2010 rutime ou complet).

  4. #4
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Citation Envoyé par Depite Voir le message
    Quelqu'un sait-il si Microsoft connait ce problème et si une correction ou un contournement sont proposés ?
    J'ai bien lu quelque chose de similaire il y a quelque temps, mais il n'était pas précisé s'il s'agissait d'une version 32 ou 64 bits et pas de solutions, mais le posteur avait semble-t-il trouvé la cause.

    L'emploi d'un SenKeys en VBA. Est-ce ton cas ?

    Domi2

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut Pas de sendkeys
    Bonjour Domi2,

    Non, il n'y pas d'utilisation de SendKeys dans l'application.

    Ma plateforme de développement est sous XP et je n'y ai pas le problème.
    J'ai constaté la même anomalie avec le projet .ADP qu'avec le projet .ADE - ça me semble normal.

    La semaine prochaine je vais pouvoir débugger l'affaire sur un poste Win 7 32bit doté d'access 2010. J'espère en tirer un nouvel éclairage.

    J'ai 2 utilisateurs sur des plateformes Win7-32 et ils comencent à se tirer des plombs sans compter que ce problème engendre des erreurs de saisie (quantités et prix) qui ont des conséquences commerciales et financières !

  6. #6
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    Pas vraiment d'idée, mais je réfléchis un peu à haute voix.

    Quand cela se produit, au niveau de la base de registre, il y a des modifications (je n'ai pas la ou les clés en tête) ?

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut Précision
    ATTENTION :
    Le phénomène consiste en une inversion de la situation des touches NumLock et CapsLock. le témoin lumineux des touches s'inverse systématiquement sur certaines fenêtres - toujours les mêmes et toujours suite aux mêmes actions mais, comme je l'ai dit tout à l'heure je devrais attendre la semaine prochaine pour investiguer plus à fond.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut Renvoi vers une autre discussion
    Bonjour,

    J'avais oublié que j'avais ouvert une discussion sur ce sujet il y a quelques temps et en voulant compléter celle-ci, c'est la première que j'ai renseignée.

    Voici le lien vers cette discussion, j'y apporte le résultat de mes dernières observations avec un exemple premettant de reproduire le phénomène :
    http://www.developpez.net/forums/d1133845/logiciels/microsoft-office/access/vba-access/deverrouillage-pave-numerique/#post6386354

  9. #9
    Candidat au Club
    Homme Profil pro
    développeur par hobby
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : développeur par hobby

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut VersionSystème = MonOsVersion()
    Bonjour,

    Je ne trouve pas le module qui renvoie la VersionSystème (MonOsVersion())

    Pourriez-vous me le faire parvenir.
    Meilleures salutaitons
    PA Gardaz

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut Obtenir la version d'OS
    Bonjour,
    Bien que ce ne soit pas vraiment le sujet de la discussion voici un extrait de code qui répond à ta question.

    Déclarations API et structure (niveau module)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Type OSVERSIONINFO
       dwOSVersionInfoSize As Long
       dwMajorVersion As Long
       dwMinorVersion As Long
       dwBuildNumber As Long
       dwPlatformId As Long
       szCSDVersion As String * 128
    End Type
     
    Private Declare Function GetVersionEx Lib "kernel32" _
    Alias "GetVersionExA" _
    (lpVersionInformation As OSVERSIONINFO) As Long
    Fonction simplifiant l'identification de la version (correspondant à mes besoins personnels)
    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
    Public Function MonOsVersion() As Integer
    '======================================================================
    '  Procédure MonOsVersion
    '  Date de création : 30/08/2011
    '======================================================================
    ' Description
    '--------------------------
    '  Renvoie un numéro d'identification de la version du système d'exploitation
    '--------------------------
    '======================================================================
    Dim typOS As OSVERSIONINFO
     
    '======================================================================
    On Error GoTo ErrMonOsVersion
    '======================================================================
     
    typOS.dwOSVersionInfoSize = Len(typOS)
    GetVersionEx typOS
    '	Description de la structure typOS
    'With typOS
    '   Debug.Print "Version = "; .dwMajorVersion
    '   Debug.Print "Minor ="; .dwMinorVersion
    '   Debug.Print "Build ="; .dwBuildNumber
    '   Debug.Print "Platform = "; .dwPlatformId
    '   Debug.Print "CsdVersion = "; .szCSDVersion
    'End With
     
    Select Case typOS.dwMajorVersion
       Case 5   '  XP
          MonOsVersion = 5
       Case 6   '  Vista ou 7
          Select Case typOS.dwMinorVersion
             Case 0   '  Vista
                MonOsVersion = 6
             Case 1   '  Seven
                MonOsVersion = 7
             Case Else
                '  indéterminé
          End Select
       Case Else
          '  indéterminé
    End Select
     
    '======================================================================
    FinMonOsVersion:
       Exit Function
     
    '======================================================================
    ErrMonOsVersion:
       Resume FinMonOsVersion
     
     
    End Function
    Je livre tel quel mais ça peut aider.

  11. #11
    Candidat au Club
    Homme Profil pro
    développeur par hobby
    Inscrit en
    Janvier 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : développeur par hobby

    Informations forums :
    Inscription : Janvier 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut MonOsVersion
    Merci beaucoup, avec les correction pour access 2010
    Salutaitons.

    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
    Public Function MonOsVersion() As Integer
    '======================================================================
    '  Procédure MonOsVersion
    '  Date de création : 30/08/2011
    '======================================================================
    ' Description
    '--------------------------
    '  Renvoie un numéro d'identification de la version du système d'exploitation
    '--------------------------
    '======================================================================
    Dim typOS As OSVERSIONINFOEX
     
    '======================================================================
    On Error GoTo ErrMonOsVersion
    '======================================================================
     
    typOS.dwOSVersionInfoSize = Len(typOS)
    GetVersionExA typOS
    '   Description de la structure typOS
    With typOS
       Debug.Print "Version = "; .dwMajorVersion
       Debug.Print "Minor ="; .dwMinorVersion
       Debug.Print "Build ="; .dwBuildNumber
       Debug.Print "Platform = "; .dwPlatformId
       Debug.Print "CsdVersion = "; .szCSDVersion
    End With
     
    Select Case typOS.dwMajorVersion
       Case 5   '  XP
          MonOsVersion = 5
       Case 6   '  Vista ou 7
          Select Case typOS.dwMinorVersion
             Case 0   '  Vista
                MonOsVersion = 6
             Case 1   '  Seven
                MonOsVersion = 7
             Case Else
                '  indéterminé
          End Select
       Case Else
          '  indéterminé
    End Select
     
    '======================================================================
    FinMonOsVersion:
       Exit Function
     
    '======================================================================
    ErrMonOsVersion:
       Resume FinMonOsVersion
     
     
    End Function

  12. #12
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    bonjour,

    en parcourant ce post je vois que depite avait indiqué un lien
    Voici le lien vers cette discussion, j'y apporte le résultat de mes dernières observations avec un exemple premettant de reproduire le phénomène :
    http://www.developpez.net/forums/d11...e/#post6386354
    mais ce dernier ne fonctionne pas, car en fait un pôvre docteur, signalait le même problème sur son application.
    Si par hasard quelqu'un retrouvait le post, ça m’intéresse.


    Merci.

  13. #13
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    j'ai trouvé sur http://www.ribbon01.com/tips/numlock...ock_scroll.asp

    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
     
     
    Option Compare Database
    #If VBA7 Then
       'versions 2010 and 2013
       Public Declare PtrSafe Function GetKeyState Lib "user32"(ByVal nVirtKey As Long) As Long
    #Else
       'versions 2007 and previous
       Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
    #End If
     
    '--------------------------------------------------------------------------------------
    Public Sub fncActivateDeactivateKey(lngKey&, blnActivate As Boolean)
    Dim ws As Object
    Dim T$
    Set ws = CreateObject("WScript.shell")
     
    T = Switch(lngKey = 144, "{numlock}", lngKey = 20, "{capslock}", lngKey = 145, "{scrolllock}")
    If blnActivate Then
       'Activate current deactivated key
       If GetKeyState(lngKey) = 0 Then ws.SendKeys T
    Else
       'Deactivate currently activated key
       If GetKeyState(lngKey) = 1 Then ws.SendKeys T
    End If
    Set ws = Nothing
    End Sub
    j'ai testé cela semble fonctionner au moins sur 2007

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function reinit_clavier()
     ' desactive le caps lock
     Call fncActivateDeactivateKey(20, False)
     ' active le nums locks
     Call fncActivateDeactivateKey(144, True)
     ' desactive le scroll locks
     Call fncActivateDeactivateKey(145, False)
     
    End function

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2010
    Messages : 252
    Points : 145
    Points
    145
    Par défaut Ca ne résout pas tout
    Bravo Pyloupylou, j'ai constaté hier que le lien que j'avais déposé ne fonctionnait plus mais par manque de temps je n'ai pas cherché plus loin.

    Effectivement la procédure que tu as récupérée fonctionne correctement mais ça n'explique pas pourquoi l'état du clavier se modifie .

    En ce qui me concerne le phénomène se produit lors de l'exécution d'une application de gestion commerciale, souvent pendant la saisie des commandes (c'est la principale utilisation de l'application par les commerciaux) et peut-être plus particulièrement après avoir cliqué sur un contrôle de saisie de date ou sur un combobox.

    Comme les opérateurs sont habitués à saisir code article puis quantité puis, de nouveau code article, quantité et ainsi de suite, ils ne remarquent pas forcément la modification d'état de leur clavier et se retrouvent à avoir utilisé les flèches de direction au lieu des chiffres... et je me fais eng...!

    Je ne peux pas décemment appeler cette routine de vérification du clavier à chaque réception de focus sur les zones de saisie, le temps consommé par les contrôles de cohérence et les calculs induits est déjà à la limite de l'efficace.

    Dans de précédents posts sur cette discussion j'annonçais reproduire le problème mais finalement non, pas de manière régulière .

    C'est pourquoi je n'ai pas clôturé cette discussion.

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/07/2012, 15h44
  2. [VB.NET]Virgule sur le pavé numérique
    Par jab dans le forum Windows Forms
    Réponses: 6
    Dernier message: 19/06/2006, 09h27
  3. [d7]pavé numérique point et virgule
    Par dleu dans le forum Langage
    Réponses: 8
    Dernier message: 28/04/2006, 03h23
  4. Réponses: 7
    Dernier message: 06/11/2005, 14h47
  5. désactiver le pavé numérique
    Par soad dans le forum C++
    Réponses: 7
    Dernier message: 08/02/2005, 09h32

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