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 :

Fonction send key [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2021
    Messages : 19
    Par défaut Fonction send key
    Bonsoir,

    J'essai d'utiliser la fonction sendkey. J'ai trouvé des réponses sur le forum qui fonctionnent pour les utilisateurs mais pas chez moi.

    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
     
    Sub Validation_num_PDV()
     
        Dim cell As Range
     
        Range(Range("L13"), Range("L13").End(xlDown)).Select
     
        For Each cell In Selection
     
            SendKeys "{F2}"
            Application.SendKeys "{ENTER}", True
            DoEvents
     
        Next
     
    End Sub
    Ce que cela fait chez moi, c'est activer F2 dans la fenêtre VBA. J'ai essayé avec et sans "Application." devant, et avec true / false / omis derrière.
    Mais c'est toujours dans VBA et non dans Excel que le F2 est exécuté.

    Que faire ? (accessoirement j'ai écrit Doevents car je l'ai lu dans un post, mais je ne sais pas si c'est vraiment utile.)

    Merci !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Sendkey ne fonctionne que sur la fenêtre active, hors comme tu exécute ton code depuis l'IDE, la fenêtre du classeur n'est pas active.
    Pour parvenir à tes fins, tu dois déclencher l'exécution du code par un autre moyen (ruban / bouton / évènement ect ...).

    Mais pourquoi aurais-tu besoin de SendKey ?
    Excel est parfaitement pilotable sans cet artifice à la fiabilité douteuse.

  3. #3
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2021
    Messages : 19
    Par défaut
    Pourquoi je fais cela ?

    J'ai une donnée en numérique qui correspond à un numéro de magasin sur 4 ou 5 caractères. Mais toutes les autres infos avec qui je dois croiser les données sont en format texte sur 5 caractères avec un 0 devant si nécessaire.
    J'ai donc converti en texte mon # de magasin en le forçant sur 5 car. Mais cela fait planter ma recherchex().
    Mais j'ai vu que si je faisais F2+entrée ca gardait mon format texte et recherchex() acceptait de fonctionner à nouveau.
    Donc je cherche à automatiser cette combine pas très sérieuse je l'admet.
    J'avais bien pensé à utiliser les collages spéciaux - opérations, mais là, je perd mon format texte avec le 0 devant.

    ******Illumination ************

    Je teste ma macro en mode pas à pas (F8) alors que normalement je l'utiliserais rattachée à un bouton. Donc au vu de ta réponse, ca doit être pour ça que ca fonctionnait sur les autres forums et pas chez moi.
    Je vais tester ca demain matin.

    Merci
    François

    P.S si tu avais soit une explication de pourquoi je dois obliger de faire cette manip, soit une manière plus propre de le faire, je suis toujours ouvert à de nouveaux trucs

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 466
    Par défaut
    Bon ....

    Met toute cette merde de Sendkey dans une boite et jette la clef au fin fond de la fosse des Mariannes !!

    Pour forcer une cellule en texte, il suffit de concaténer une apostrophe avec ta donnée.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 179
    Par défaut
    Hello,
    le souci est que SendKeys envoie les touches à la fenêtre active et dans ton cas c'est la fenêtre de l'éditeur VBA. Tu peux redonner le focus à ta feuille de classeur avec AppActivate comme ceci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Validation_num_PDV()
        Dim cell As Range
        Range(Range("L13"), Range("L13").End(xlDown)).Select
        For Each cell In Selection
            AppActivate Title:=ActiveWorkbook.Name
            DoEvents
            SendKeys "{F2}", True
            SendKeys "{ENTER}", True
            DoEvents
        Next 
    End Sub
    Mais attention si tu fais du pas à pas dans la boucle à chaque instruction le focus est redonné à l'éditeur VBA. En mettant un point d'arrêt sur le Next , et en appuyant sur le Run à chaque fois cela fonctionne car le focus reste sur la feuille du classeur jusqu'au Next

    Ami calmant, J.P

  6. #6
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2021
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2021
    Messages : 19
    Par défaut
    Merci pour vos réponses, ca a parfaitement fonctionné.

    Et j'espère à ne plus avoir à nettoyer d'autres fichiers de cette manière

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [TCP] Taille de buffer, et fonction send()
    Par phraides dans le forum Développement
    Réponses: 4
    Dernier message: 03/06/2007, 14h45
  2. Réponses: 4
    Dernier message: 23/05/2007, 09h12
  3. Question sur les fonctions "send()" et "recv(
    Par damien99 dans le forum MFC
    Réponses: 6
    Dernier message: 10/02/2006, 20h47
  4. Envoyer du texte dans une autre application (ou send key)
    Par Coussati dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 10/02/2006, 15h26
  5. blocage de la fonction : send
    Par fregolo52 dans le forum Réseau
    Réponses: 5
    Dernier message: 20/09/2005, 09h10

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