Le model Excel / VBA ralentit par plusieurs tirages

J'ai un model basé sur Excel que j'utilise pour ma dissertation. Je l'ai modifié un peu de l'original afin de l'accélérer, mais je l'ai déjà abandonné pour l'optimiser maintenant. Le model ouvre des classurs Excel et copy datatables et les ferme, etc.

Je cherche à essayer de faire environ 1000-2000 simulations avec ce model, mais le time pris pour que le model s'exécute va d'environ 60 secondes pour les premières courses jusqu'à plus de 100 secondes après environ 60 exécutions. Si je ferme et réouvre Excel, le time baisse encore. J'ai lu dans l'optimization du code VBA et essayé de mettre en œuvre autant que possible. J'ai mis en place

Application.CutCopyMode = False 

à la fin de chaque boucle pour effacer le presse-papiers à chaque fois. J'ai alors tenté de contourner le presse-papiers par des choses comme

 Workbooks("Master").Range().value = Workbooks("Module").Range().value 

plutôt que de copyr et coller. Pourtant, tout cela semble avoir eu peu d'impact sur le fonctionnement de mon model qui s'améliore encore plus lentement.

Des idées sur ce que je peux essayer ensuite?

========= Modifier ===================

Voici deux pastebins pour le code:

La feuille de calcul principale contient le code qui parcourt et exécute chaque module

Le module de sous-traitance est un module d'exemple exécuté par le maître

À l'extérieur, voici les problèmes que je vois:

  1. vous utilisez les methods Activer et Sélectionner, à la fois lentes et peu fiables,

  2. les classurs peuvent avoir un code de leur propre fonctionnement lorsqu'ils sont ouverts ou activés,

  3. vous ne désactivez pas les calculs, ce qui est à la fois lent et tend à entraîner exactement le type de «time d'exécution en fuite» que vous voyez pour les classurs avec des calculs réticulés très complexes

  4. vous utilisez des noms de string potentiellement incohérents pour les classurs d'ouvrage ouverts / activés / exécutés au lieu d'une seule variable de classur pour chacun d'eux, ce qui rend incertain s'ils sont tous fermés quand ils devraient être et

  5. vous n'avez pas de traitement ou de détection d'erreur, mais vous désactivez les rapports d'erreur dans différents endroits, et vous ne pouvez donc pas avoir d'idée réelle si quelque chose se dégrade au milieu de votre boucle.

C'est tout à première vue. Je ne suis pas enclin à passer plus de time à aller plus loin, lorsque toutes ces questions sont ouvertes et elles-mêmes suffisantes pour expliquer toute quantité de problèmes.