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 :

Convertir touche clavier en code


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut Convertir touche clavier en code
    Bonsoir,
    Je voudrais savoir s'il existe un moyen rapide de convertir chaque touche du clavier en Code.

    Par exemple, la touche entrée = &HD
    Avec Asc("A") j'arrive à convertir les lettre de A à Z, mais pour les numéros, et les caractères spéciaux, je n'arrive pas à le faire...

    Avez vous une idée?

    Je ne vais quand même pas faire un truque du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If touche = "%" Then
    ...
    ElseIf Touche = "ù" Then
    ...
    ElseIf Touche = ")" Then
    ....
    Merci de votre aide.

    Cordialement,
    Jojo

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    Asc fonctionne avec tous les caractères
    Asc("%") retourne bien 37
    Asc("ù") retourne 249
    Asc("2") retourne 50
    etc

  3. #3
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Salut,
    Je vois bien, mais mon SendInput ne prend pas en compte les caractères speciaux...

    Et oui c'est confirmé... SendInput ne prend pas les caractères autre que les numeros, touches de fonctions et alphabetiques...

    Comment faire pour envoyer des accents et autres en sendInput?

  4. #4
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Et oui c'est confirmé... SendInput ne prend pas les caractères autre que les numeros, touches de fonctions et alphabetiques...
    Bonjour,

    Je dois avoir un problème, impossible de trouver une aide VBA sur la fonction, méthode... SendInput ? API tant pis, quelqu'un a peut-être oublié de préciser quelque chose...

    Bon on peut toujours aller voir de ce côté là :

    http://www.kbdedit.com/manual/low_level.html

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Oui c'est une API,

    Je ne comprend pas le principe de KBEdit, peut être une explication serait-elle la bienvenue?

    Merci beaucoup.

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je ne comprend pas le principe de KBEdit
    Peut-être ici

    Sinon plutôt qu'une structure avec des if partout, tu peux faire un tableau de correspondance, que faut il que SendInput envoie pour avoir un caractère spécial?

    Tu as également SendKey. Et la tu peux envoyé des caractères spéciaux en spécifiant Shift, Alt ou Ctrl dnas le code de ta touche.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Merci, mais je suis obligé de passer par le send Input, c'est pour une aplication citrix, et il n'y a que ça qui marche...

  8. #8
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonsoir,

    en donnant tous les paramètres dès le départ, ça serait plus pratique pour tout le monde et ferais preuve de respect envers les contributeurs

    .
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Si je comprend bien le fonctionnement de sendInput, tu dois utiliser une structure tableau de KeyInput.

    Dans ce tableau tu dois spécifier l’enchaînement que tu souhaites
    Par exemple pour faire un @, la combinaison est AltGr+0

    Donc tu dois avoir dans ton tableau de KeyInput
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TabKey(3) as KeyInput
    TabKey(0) -> AltGr KeyDown
    TabKey(1) -> Touche 0 KeyDown
    TabKey(2) -> Touche 0 KeyUp
    TabKey(3) -> AltGr KeyUp

    Pour faire cela tu dois définir wVk qui représente la touche (AltGr ou 0) et dwFlags qui représente l’état que tu veux simuler pour la touche wVk.

    Pour te facilité le travail et pouvoir réaliser un fonction qui fasse tout le boulot en luis transmettant juste une string, tu auras surement besoin de VkKeyScan

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Je n'ai eu aucun probleme pour faire marcher sendInput... Le soucis c'est que sendInput ne Prend pas les touches autres que A-Z, 0-9, Ctrl, alt, tab, shift, return, F1-F12....

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    t oui c'est confirmé... SendInput ne prend pas les caractères autre que les numeros, touches de fonctions et alphabetiques...

    Comment faire pour envoyer des accents et autres en sendInput?


    Relit mon message, ou alors reformule le problème qui motive ton post.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Mon problème c'est qu'avec SendInput j'arrive à simuler les touche de A à Z et de 0 à 9 puis les touche F1 à F12.
    J'arrive à simuler des majuscules ou minuscules en simulant l'appui sur Shift.
    Si maintenant j'envois le code de la touche % en simulant l'appui sur Shift (ou non) et bien je n'ai rien du tout qui sort...

    Pareil pour les accents et autres...

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    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
    63
    Option Explicit
     
    Const VK_H = 72
    Const VK_E = 69
    Const VK_L = 76
    Const VK_O = 79
    Const KEYEVENTF_KEYUP = &H2
    Const INPUT_MOUSE = 0
    Const INPUT_KEYBOARD = 1
    Const INPUT_HARDWARE = 2
     
    Private Type MOUSEINPUT
    dx As Long
    dy As Long
    mouseData As Long
    dwFlags As Long
    time As Long
    dwExtraInfo As Long
    End Type
     
    Private Type KEYBDINPUT
    wVk As Integer
    wScan As Integer
    dwFlags As Long
    time As Long
    dwExtraInfo As Long
    End Type
     
    Private Type HARDWAREINPUT
    uMsg As Long
    wParamL As Integer
    wParamH As Integer
    End Type
     
    Private Type GENERALINPUT
    dwType As Long
    xi(0 To 23) As Byte
    End Type
     
    Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Long, pInputs As GENERALINPUT, ByVal cbSize As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
     
    Private Sub SendKey(ByVal bKey As Byte)
    Dim GInput(0 To 1) As GENERALINPUT
    Dim KInput As KEYBDINPUT
    KInput.wVk = bKey 'the key we're going to press
    KInput.dwFlags = 0 'press the key
    'copy the structure into the input array's buffer.
    GInput(0).dwType = INPUT_KEYBOARD ' keyboard input
    CopyMemory GInput(0).xi(0), KInput, Len(KInput)
    'do the same as above, but for releasing the key
    KInput.wVk = bKey ' the key we're going to realease
    KInput.dwFlags = KEYEVENTF_KEYUP ' release the key
    GInput(1).dwType = INPUT_KEYBOARD ' keyboard input
    CopyMemory GInput(1).xi(0), KInput, Len(KInput)
    'send the input now
    Call SendInput(2, GInput(0), Len(GInput(0)))
    End Sub
     
    Sub tetse()
    SendKey 55 
     
    End Sub
    Essai les 255 valeurs les autres caractères doivent être quelque part

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Bon ok... j'ai minimisé ton problème, je viens de faire plus d'essais et ça n'est pas si simple que ça...

    Le code ascii transmis ne sont pas interprété comme on pourrait l'attendre.

    Par contre, le but étant de prendre la main sur Internet explorer (je suppose que c'est toujours le même thème?). Ton fichier Excel est lancé en local ou en distant? c'est important, car si tu peux faire les 2, il serait peut-être mieux de lancer ton Excel en distant, car ainsi, il se retrouverait sur le même environnement (sur le server distant) et ainsi lors de l'appelle a GetObjet, il devrait trouver ton instance d'IE).
    Je suis quand même étonne que tu ai tant de soucis de prise en main, nous avons une appli intranet pour la saisi de nos pointage d'activité et j'arrive à récupérer les données saisi pour faire des suivis de "portefeuilles" horaire (avec code que j'ai fait en VBa sur Excel).
    D'ailleurs c'est mon responsable de service qui l'utilise et il a un portable qui a Excel installé en local et il est obligé d'ouvrir sa session IE en local pour que ça fonctionne... sinon en distant ça plante.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  15. #15
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    C'est pour envoyer des touches sur SAP, ouvert par Citrix, avec une class Transparent window.
    Bref, en somme, je ne peux pas controler ces fenêtres autre que par les touches tabulation et return...

    C'est du bricolage, mais impossible de toucher directement à ces fenêtres...

    C'est Bien IE qui est ouvert, mais en Distant et sous le nom de processus : wfica32.exe...

Discussions similaires

  1. Code touches clavier
    Par bob456 dans le forum C#
    Réponses: 2
    Dernier message: 28/06/2010, 11h31
  2. code hexa des touches claviers
    Par darkwall_37 dans le forum Débuter
    Réponses: 4
    Dernier message: 24/03/2009, 09h52
  3. [gtk/gdk] Codes des touches clavier
    Par drKzs dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 27/02/2008, 12h21
  4. remplacement des codes touches clavier
    Par compas dans le forum Périphériques
    Réponses: 4
    Dernier message: 22/08/2006, 08h29
  5. [TP] Problème code touche clavier
    Par phildeb dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 02/12/2005, 22h44

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