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

Fermé
papalulu2 - 28 mai 2021 à 10:15
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 - 5 juin 2021 à 13:42
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
A voir également:

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
1
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
5 juin 2021 à 13:42
peux-tu alors marquer la discussion comme résolue?
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
28 mai 2021 à 11:20
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
0
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
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
29 mai 2021 à 08:39
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()
0