Pause VBA idem point d'arrêt

Fermé
tchernosplif Messages postés 600 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 21 juin 2015 - Modifié par tchernosplif le 19/06/2015 à 23:08
tchernosplif Messages postés 600 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 21 juin 2015 - 21 juin 2015 à 12:40
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

JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
19 juin 2015 à 23:55
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
cousinhub29 Messages postés 977 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 21 décembre 2024 348
20 juin 2015 à 00:08
Bonsoir,

A tout hasard...

Do Until IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop


Pour attendre le chargement complet....

Bonne soirée
0
tchernosplif Messages postés 600 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 21 juin 2015 245
Modifié par tchernosplif le 20/06/2015 à 13:04
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
tchernosplif Messages postés 600 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 21 juin 2015 245
21 juin 2015 à 12:40
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