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 :

Problèmes sur Sendkeys et Wait


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut Problèmes sur Sendkeys et Wait
    Bonjour,

    J'ai appris le VBA sur le tas, et je galère un brin sur l'utilisation de la fonction SendKeys... Le problème est simple : Quoi que je fasse, les fonctions SendKeys n'entre en application dans mon fichier Excel que lorsque la Macro est finie. Pour faciliter mes essais avec quelque chose de visuel j'ai pris un exemple basique trouvé sur un forum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
     
        For I = 1 To 3
            Cells(I, 4).Select
            SendKeys "{F2}", True
            SendKeys "A", True
            SendKeys "{ENTER}", True
        Next I
     
    End Sub
    J'ai changé la valeur du Wait, mis des tempos, remplacé par des Application.SendKeys... Rien à faire. Systématiquement, ce code arrive en case D3, puis remplit les cases D3 à D5 de "A".

    Mon soucis final vient du fait que je veut entrer puis sortir de chacune des cases du plage, et j'ai trouvé l'info sur le net que cette action n'est réalisable en VBA que via SendKeys{"F2"}. Recalculer ma feuille ne fonctionnera pas dans mon cas, puisque j'aimerais permettre sur une grande plage d'activer le Renvoi automatique à la ligne uniquement quand un alt+enter a été tapé, pas quand la chaine de caractère est trop longue pour être affichée.

    Mon programme initial fonctionne pour ça d'ailleurs, il est même ultra basique, mais vu que les SendKeys s'effectue après la fin du programme, le ScreenUpdating est réactivé, et les grandes plages prennent une éternité à tourner... Rendant la fonction inutilisable. Pour info :
    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
    Dim Cible As Range
    Sub In_N_Out()
     
        Application.ScreenUpdating = False
     
        For Each Cible In Selection
     
            SendKeys "{F2}"
            SendKeys "{Enter}"
     
        Next Cible
     
        Application.ScreenUpdating = True
     
    End Sub
    Je n'ai trouvé de solutions ni sur les forums ni sur les site dédiés au VBA. Est-ce que quelqu'un aurait une idée?

    Merci par avance!

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 370
    Par défaut
    Bonjour,

    permettre sur une grande plage d'activer le Renvoi automatique à la ligne uniquement quand un alt+enter a été tapé
    Ce code devrait effectuer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Alt_Enter()
        '--- Alt-Entrée = Chr(10) --- WrapText = Renvoi à la ligne automatique
        Dim cible As Range
        Application.ScreenUpdating = False
        For Each cible In Selection
            If InStr(cible, Chr(10)) > 0 Then
                cible.WrapText = True
            Else
                cible.WrapText = False
            End If
        Next cible
        Application.ScreenUpdating = True
    End Sub
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut
    Bonjour EricDgn,

    Simple, efficace et élégant... J'adore! Super idée plus pertinente que la mienne, Merci beaucoup!

    En revanche, si quelqu'un a une réponse à la question sur les SendKeys, je suis preneur! Ça me turlupine vachement, et si j'ai besoin de m'en servir un jour j'aimerais bien comprendre ce que je fais faux dans ces macros!

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 181
    Par défaut
    Hello,
    Citation Envoyé par Daxyj Voir le message
    Bonjour EricDgn,

    Simple, efficace et élégant... J'adore! Super idée plus pertinente que la mienne, Merci beaucoup!

    En revanche, si quelqu'un a une réponse à la question sur les SendKeys, je suis preneur! Ça me turlupine vachement, et si j'ai besoin de m'en servir un jour j'aimerais bien comprendre ce que je fais faux dans ces macros!
    avec ce code cela a l'air de fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
    Dim i As Integer
        For i = 1 To 3
            Cells(i, 4).Select
            SendKeys "{F2}", True
            DoEvents
            SendKeys "A", True
            DoEvents
            SendKeys "{ENTER}", True
            DoEvents
        Next i
    End Sub
    DoEvents cède le contrôle au système d’exploitation. Lorsque ce dernier à fini de traiter les événements de la file d’attente et que toutes les clés de la file d’attente SendKeys ont été envoyées, le processeur reprend le contrôle.
    Ami calmant, J.P

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut
    Bonjour J.P.

    Magnifique, je garde l'astuce en stock ça marche au poil! Pour le coup, on peut même ne laisser qu'un seul DoEvents avant le Next dans cet exemple.

    Nom : 26c.jpg
Affichages : 60
Taille : 63,8 Ko

    Mais bon, à l'avenir, je vais essayer de m'abstenir de sendkeyer mes codes... Toutes les aides en lignes parlent d’instabilité, je ne peux qu’acquiescer...!

    Merci beau cou!

    Nom : JWE_Screenshot_Brachiosaurus_1993_06-scaled.jpg
Affichages : 81
Taille : 365,1 Ko

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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