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 :

Vba SendKey method - waiting meilleur méthode. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut Vba SendKey method - waiting meilleur méthode.
    Bonsoir à tous,

    Je dois utiliser les "sales" Sendkey pour automatisation d'un programme.
    Une relique en .exe créer et utiliser en interne dans l entreprise.

    J'aurais besoin de votre aide pour créer des boucles d attentes , mes notions de Vba étant assez restreintes au niveau des api windows.

    Et n ayant pas trouvé mon bonheur sur le forum

    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
     
    Sub Target_Sendkeys()
     For i = 1 to 10
     On Error Resume Next 'Resuming next Statement on Error(5) 
    ' boucle attente fenêtre présente sur le bon nom
     Do 
      Err.Clear 'Reset erreur
      AppActivate "monSoft" 'active ma fenêtre 
      DoEvents
     Loop While Err.Number = 5 
     
     Sendkey "{TAB}"
     SendKeys "xxx"
     SendKeys "~"
    ' ici le timing peut différer entre 1 et 5 secondes
    ' selon si l'action sollicite bcp ou non le soft tiers
     
     Application.Wait DateAdd("s", 1, Now) 'pause une seconde 
     
     Sendkey "{TAB}"
     SendKeys "~"
     
    ' de nouveau pause 1 à 5 sec
    Next i
     
    End Sub
    Je souhaiterais trouver un moyen , autre que application.wait pour attendre la fin du traitement
    J ai bien penser à une fonction sur le statut du curseur ( sablier) pendant le chargement du programme
    Mais je ne trouve pas comment faire

    Quelqu'un aurait une idée

    Merci d avance

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut peut-être reolu ...
    En comparant le curseur de base busy windows avec celui en cours
    Instauré une boucle tant que true

    Si ça intéresse quelqu'un

    Je test demain et fait un retour

    Si d autre idées , je suis preneur

    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
     
    Option Explicit
     
    Private Const IDC_WAIT As Long = 32514
     
    Private Type POINT
        x As Long
        y As Long
    End Type
     
    Private Type CURSORINFO
        cbSize As Long
        flags As Long
        hCursor As Long
        ptScreenPos As POINT
    End Type
     
    Private Declare Function GetCursorInfo _
        Lib "user32" (ByRef pci As CURSORINFO) As Boolean
    Private Declare Function LoadCursor _
        Lib "user32" Alias "LoadCursorA" _
        (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
     
    Public Function IsWaitCursor() As Boolean
     
        ' Get handle to wait cursor
        Dim handleWaitCursor As Long
        handleWaitCursor = LoadCursor(ByVal 0&, IDC_WAIT)
     
        Dim pci As CURSORINFO
        pci.cbSize = Len(pci)
     
        ' Retrieve information about the current cursor
        Dim ret As Boolean
        ret = GetCursorInfo(pci)
     
        If ret = False Then
            MsgBox "GetCursorInfo failed", vbCritical
            Exit Function
        End If
     
        ' Returns true when current cursor equals to wait cursor
        IsWaitCursor = (pci.hCursor = handleWaitCursor)
     
    End Function

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2005, 16h29
  2. Réponses: 4
    Dernier message: 28/10/2005, 21h35
  3. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  4. Meilleur méthode pour stocker mes données
    Par cyberlewis dans le forum Windows
    Réponses: 6
    Dernier message: 03/07/2004, 11h53
  5. Réponses: 3
    Dernier message: 24/06/2004, 11h23

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