Bonjour,
Je travaille actuellement sur un traitement relativement simple de multiples fichiers (environ 900) au sein d'une arborescence.
Le processus
-Ouverture du fichier
-Traitement
-Fermeture du fichier
...est résolu dans une boucle sur un classeur témoin. (vide : 16 ko)
Dans ce contexte, l'ensemble du processus et le traitement lui-même du classeur témoin est instantané .
Le problème est que dans la réalité chaque fichier (.xlsx) cible fait 18 Mo...
Même en mode de "Calcul sur ordre" l'ouverture, puis l'enregistrement puis la fermeture de chaque classeur prend une petite minute...
J'imagine assez facilement que la lecture de la totalité mon programme sera largement terminé avant même que le premier fichier soit complètement ouvert...
Je vais donc certainement être obligé d'intégrer dans ma boucle une (ou plusieurs...) instructions DoEvents permettant d'attendre :
Que le classeur soit ouvert
puis ...
Que le classeur soit enregistré et fermé avant de continuer le traitement.
Ce que je conceptualise de la manière suivante (en pseudo code) :
La question est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Workbooks.Open("blabla.xlsx") While "le classeur n'est pas prêt" DoEvents Wend ...Traitement proprement dit puis : While "le classeur actif n'est pas enregistré et fermé" DoEvents Wend Next ouverture de classeur.
Comment conditionner l'exécution des boucles DoEvents jusqu'à ce que la macro puisse se poursuivre.
C'est à dire en étant certain qu'aucun processus en cours ne bloque l'exécution...
Hum... Suis-je clair ?
Partager