Pause VBA idem point d'arrêt

tchernosplif Messages postés 600 Date d'inscription   Statut Membre Dernière intervention   -  
tchernosplif Messages postés 600 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   858
 
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 1060 Date d'inscription   Statut Membre Dernière intervention   359
 
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   Statut Membre Dernière intervention   246
 
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   Statut Membre Dernière intervention   246
 
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