Macro VBA bloque ouverture fichier sur Internet
Bonjour à tous,
Mon problème est le suivant, j'ai une macro qui se connecte sur un site Internet et ouvre un fichier, et à la fin je souhaite basculer vers ce nouveau fichier avec le code suivant :
Workbooks(Workbooks.Count).Activate
Ci dessous la fin du code de téléchargement :
'On clique sur le bouton export pour génerer le portefeuille de performances historiques
Doc.parentWindow.execScript "getExportgp()", "JavaScript"
'On laisse 30 secondes pour qu'il crée le fichier et propose de l'enregistrer
Attendre (10)
'Ouverture de la fenetre de téléchargement
Touche ("^j")
Attendre (2)
Touche ("{RIGHT}")
Attendre (1)
Touche ("{RIGHT}")
Attendre (1)
'On simule la touche Entrée et alt + F4
Touche ("~")
Touche ("%{F4}")
'Ferme Internet Explorer
FermerIE
'Empêche la création d'une nouvelle instance
Application.Wait Now + TimeValue("00:00:05")
Il n'est pas possible de récupérer une URL due au fait que le site génère le fichier lui même.
Cependant tant que la macro tourne le fichier ne s'ouvre pas.
Si je mets une pause dans ma macro avant le Workbooks(Workbooks.Count).Activate et que je fait f8 (pas à pas), à ce moment là ça fonctionne et il bascule correctement sur mon nouveau fichier.
Ma question est : comment dire à VBA d'attendre que le nouveau fichier soit ouvert avant de continuer le code ? J'ai essayé sleep, des boucles, Application.Wait, ça ne fonctionne pas car tant qu'un code est en train de tourner il n'ouvre pas le fichier.
Merci par avance pour votre aide.
Vincent.
En gros actuellement la macro exécute tout son code et donne seulement la main au système pour l'ouverture du fichier une fois que il n'y a plus rien à exécuter, ou qu'elle est en pause ("Stop" ou bouton d'arrêt).
Je voudrais pouvoir donner la possibilité au système de lancer son ouverture de fichier sans attendre que la macro soit terminée ou en pause.
J'ai essayé :
'début de la macro on enregistre le nombre de classeurs ouverts
NombreClasseurs = Workbooks.Count
'execution de la macro, ouverture du fichier sur internet, etc
'Tant que le classeur est pas détecté, la boucle continu
While NombreClasseurs = Workbooks.Count
Wend
'suite de la macro
MAIS la boucle tourne en continue sans jamais laisser le pauvre petit fichier s'ouvrir, quelqu'un a une idée ?
Merci.
Bonsoir Vincent,
à tout hasard, regarde l'instruction DoEvents
(j'ai pas d'autre idée)
dhany
Bonjour,
Merci beaucoup de ton idée, malheureusement j'ai essayé mais ça ne fonctionne pas
Merci quand même
j'aurais p't'être dû préciser de faire le test en mettant DoEvents
dans la boucle While, comme ceci :
While NombreClasseurs = Workbooks.Count
'tes instructions (partie 1)
DoEvents 'demande à Windows de traiter les événements en cours (autres que ce classeur Excel)
'tes instructions (partie 2)
DoEvents 'on passe la main à Windows (par exemple pour ouvrir le fichier avant fin macro)
'tes instructions (partie 3)
Wend
note bien que DoEvents
n'a aucun argument (aucun paramètre, si tu préfères).
l'aide VBA de DoEvents te sera peut-être utile :
comme j'm'y connais pas en réseau, j'peux pas t'aider plus.
dhany
Merci.
En fait la boucle While sert juste à faire "patienter" la macro VBA tant qu'il ne détecte pas de nouvelle fenêtre, il n'y a rien dedans.
Je vais essayer de mettre un DoEvents dedans comme tu l'as montré mais après m'être renseigné je pense qu'il s'agit d'un problème de conception.
Je m'explique, pour pouvoir travailler sur le fichier Excel ouvert j'ai besoin qu'il soit dans la même instance Excel, ça j'y arrive en faisant juste après avoir cliqué sur ouvrir dans IE :
'Empêche la création d'une nouvelle instance
Application.Wait Now + TimeValue("00:00:05")
Cependant malheureusement il semble que comme le fichier s'ouvre dans la même instance, son ouverture est mise en attente jusqu'à ce que la macro s'arrête, quelque soit le code qu'il y a dedans.
Du coup pour le moment je me rabats vers un enregistrement du fichier quelquepart et un Workbooks.Open, pas la solution que j'aurais préféré mais j'ai l'impression qu'il n'y a pas de solution pour ce problème d'ouverture