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 :

screen

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

Rechercher des sujets similaires à "macro vba bloque ouverture fichier internet"