Pause VBA idem point d'arrêt [Fermé]

Signaler
Messages postés
602
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
21 juin 2015
-
Messages postés
602
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
21 juin 2015
-
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

Messages postés
1938
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
16 août 2019
786
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
Messages postés
587
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
11 novembre 2018
275
Bonsoir,

A tout hasard...

Do Until IE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop


Pour attendre le chargement complet....

Bonne soirée
Messages postés
602
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
21 juin 2015
209
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)
Messages postés
602
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
21 juin 2015
209
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 !