Attendre la fin du chargement d'un fichier avant de poursuivre ma macro
papalulu2
-
yg_be Messages postés 24281 Statut Contributeur -
yg_be Messages postés 24281 Statut Contributeur -
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
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:
- Vba attendre ouverture fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
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
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
yg_be
Messages postés
24281
Statut
Contributeur
1 584
peux-tu alors marquer la discussion comme résolue?
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
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
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
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:
il est également préférable d'éviter d'utiliser "active"
exemple:
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()