Pause VBA idem point d'arrêt

tchernosplif Messages postés 714 Statut Membre -  
tchernosplif Messages postés 714 Statut Membre -
Bonjour,

J'aurai besoin de faire une pause de même type qu'un point d'arrêt.

Je pilote internet explorer avec VBA ie.navigate("htt...mapage") pour ouvrir une page internet, puis ouvrir un fichier excel via une commande javascript. ie.navigate("javascript:ouvrefichier();")

Si je met un point d'arrêt dans le code, le fichier s'ouvre bien.

J'ai essayé de remplacer le point d'arrêt par une pause avec une msgbox, avec Sleep, avec application.wait; mais aucune de ces méthodes ne m'apporte le résultat souhaité.

Merci d'avance pour votre aide.

4 réponses

  1. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonjour,

    comment s'ouvre ton fichier excel?
    Dans IE ou dans excel?
    Ne peux- tu pas tester le chargement de ce fichier dans l'une ou l'autre appli et attendre avec une simple boucle while -wend?

    As-tu un exemple à nous transmettre sur cjoint?

    Cordialement
    0
  2. cousinhub29 Messages postés 1112 Date d'inscription   Statut Membre Dernière intervention   383
     
    Bonsoir,

    A tout hasard...

    Do Until IE.ReadyState = READYSTATE_COMPLETE
    DoEvents
    Loop


    Pour attendre le chargement complet....

    Bonne soirée
    0
  3. tchernosplif Messages postés 714 Statut Membre 249
     
    Bonjour,

    J'avais déjà essayé d'utiliser une boucle et de vérifier ie.readystate, mais le problème est que pour ouvrir un autre fichier via IE , il faut impérativement que la macro soit arrêtée.

    En fait j'ai contourné le problème en coupant ma macro en 2.

    A la fin de la première partie, je génère un fichier vbs qui s'exécute juste après.

    le fichier vbs commence par une longue pause; pendant ce temps le fichier à ouvrir s'ouvre. (il faudrait que j'essaie une boucle pour vérifier que le fichier est complétement ouvert plutôt que faire une pause)

    Ensuite le fichier vbs sélectionne le fichier de départ et lance la deuxième partie via un raccourci clavier prédéfini. (modification, enregistrement et fermeture du deuxième fichier)

    Pour finir, je reprends la main sur la fenêtre IE déjà ouverte, car l'url est connue, et je finalise le traitement: ie.navigate("javascript:uploadfichier();") .

    Bonne journée, soirée, nuit. (rayez les mentions inutiles)
    0
  4. tchernosplif Messages postés 714 Statut Membre 249
     
    Bonjour,

    Pour info, voici la macro qui génère le fichier vbs.
    Je me demande si la boucle pour vérifier que le fichier a fini de s'ouvrir fonctionne vraiment.
    fichier est déclaré dans une variable de type public et correspond à l'emplacement du fichier à ouvrir.

    Sub pause()

    Open "c:\pause.vbs" For Output As #1

    'obligé de laisser une pause pour laisser le temps à la page IE de commencer à ouvrir le fichier
    Print #1, "WScript.Sleep (1000)"

    Print #1, "Dim objFSO"
    Print #1, "OWB = """ & fichier & """"
    Print #1, "Set objFSO = CreateObject(""Scripting.FileSystemObject"")"

    'boucle en attendant fichier existe
    Print #1, "while objFSO.FileExists(OWB) = false"
    Print #1, "Wend"

    Print #1, "Set xl = CreateObject(""excel.application"")"

    'boucle pour vérifier que le fichier a fini de s'ouvrir
    Print #1, "While xl.Ready = False"
    Print #1, "Wend"
    Print #1, "WScript.Sleep (1000)"

    'sélectionne le fichier maitre
    Print #1, "Dim oShell"
    Print #1, "Set oShell = CreateObject(""WScript.Shell"")"
    Print #1, "oShell.AppActivate """ & ThisWorkbook.Name & """"

    'lancement de la deuxième partie avec raccourci clavier Ctrl+y
    Print #1, "WScript.Sleep (1000)"
    Print #1, "oShell.SendKeys ""^y"""
    Print #1, "Set oShell = Nothing"

    Print #1, "wscript.Quit"
    Close #1

    Sleep 100

    Set oWsh = CreateObject("Shell.Application")
    oWsh.ShellExecute "c:\dodo.vbs"
    Set oWsh = Nothing

    Sleep 1000
    Kill ("c:\pause.vbs")

    End Sub


    Pour reprendre la main sur la fenêtre IE dans la deuxième partie, j'utilise le code suivant:
    'Active Microsoft Forms 2.0 Object Library
    'Active Microsoft HTML Object Library
    'Active Microsoft Internet Controls
    Dim WinShell As New ShellWindows
    Dim IE As InternetExplorer

    'détecte la page IE et sauvegarde le fichier
    For Each IE In WinShell
    If IE.LocationURL = "htt...mapage" Then IE.Navigate ("javascript:sauvegarde();")
    Next IE


    Vos avis sont bienvenus. ça fait une sacrée usine à gaz pour une simple pause !
    0