Attendre la fin du chargement d'un fichier avant de poursuivre ma macro

Signaler
-
Messages postés
15980
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
-
Bonjour,

je n'arrive pas à résoudre le problème suivant : ma macro lance le chargement d'un fichier (stocké sur mon disque) afin de travailler sur ce fichier. Cette ouverture (MonApplication.Open ("chemin et nomdefichier")
prend quelques secondes pour être effectiive, pendant lesquelles ma macro se poursuit avant que ce fichier ne soit chargé, ce qui produit des résultats erronés.

Comment faire pour que ma macro ne puisse se poursuivre que lorsque mon fichier est complètement ouvert et/ou affiché ?

D'une façon plus générale, existe-t-il en VBA d'EXCEL 2016 une façon de prescrire une exécution strictement séquentielle : une instruction ne peut être exécutée que lorsque la précédente est complètement exécutée ?

Merci de votre aide...!

papalulu2


Configuration: Windows / Edge 90.0.818.66

3 réponses

Merci !
Ma question était incomplète et mal posée, mais ta réponse m'a mis sur la bonne piste, en me permettant de comprendre mes erreurs.

Merci encore. Papalulu2
Messages postés
15980
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
866
peux-tu alors marquer la discussion comme résolue?
Messages postés
15980
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
866
bonjour,
quel genre de fichier ouvres-tu?
quel travail y fais-tu?
n'hésite pas à partager ton code, en tenant compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci beaucoup de ton intérêt pour mon problème, que je précise donc un peu mieux.

Je suis en EXCEL 2016 sur Windows.

La macro que j'exécute est située dans un fichier appelé "outils.xlsx". Dans le cours de son exécution, alors que le fichier "outils.xlsx" est l'ActiveWorkbook, cette macro rencontre une instruction :

MonApplication.Open (repertoire2021 & "\_Modèle2021.xlsm")

Ce fichier "_Modèle2021.xlsm" met quelques secondes à se charger, mais, sans attendre la fin du chargement, la macro se poursuit sur une instruction pour sauvegarder "_Modèle2021.xlsm" sous un autre nom :

ActiveWorkbook.SaveAs (repertoire2021 & "\" & NomResident & " temporaire")

Mais, à ce moment là, le fichier "_Modèle2021.xlsm" n'est pas encore fini de charger, et l'ActiveWorkbook est toujours "outils" et non pas "_Modèle.xlms" comme il faudrait... Résultat, c'est l'ActiveWorkbook "outils.xlsx" qui se trouve sauvegardé en "NomResident temporaire", ce qui n'est pas le but recherché.

J'ai essayé de mettre un :

Application.Wait Now + TimeValue("00:00:10")

après l'instruction de chargement, mais ça ne donne rien : ca semble geler toute la macro pendant 10 sec... y compris le processus d'ouverture de "_Modèle2021.xlsm"...

J'ai aussi essayé de mettre dans le ThisWorkbook de "_Modèle2021.xlsm" une gestion d'évènement :

Private Sub Workbook_Open()
MsgBox "Le fichier-modèle 2021 est ouvert"
Beep
End Sub

Ca marche très bien quand j'ouvre ce fichier "à la main", mais le MsgBox ne s'affiche pas quand l'ouverture de "_Modèle2021.xlsm" est commandée par ma macro.

Merci de ton aide
Messages postés
15980
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
11 juin 2021
866
tu ne nous montres pas ce qu'est MonApplication. Le open() que tu as choisi d'utiliser n'est pas le bon choix dans ton cas. Il déclenche l'ouverture de n'importe quel fichier, sans indiquer que c'est un fichier à ouvrir par Excel.
utilise plutôt:
workbooks.open()

il est également préférable d'éviter d'utiliser "active"
exemple:
dim wbmod as workbook
set wbmod = workbooks.open()
wbmod.SaveAs()