Réinitialisation de traitement

Bonjour à tous !

J'ai développé un gros traitement, qui reste à optimiser, mais qui en l'état prend 21 minutes à s'exécuter...

J'ai utilisé, à la fin de ce traitement, une instruction END sensée remettre à zéro l'ensemble de mes variables...

Mon problème est que si je relance ce traitement dans la même session Excel, il met 52 minutes à s'exécuter. Je n'ose pas le lancer une troisième fois !!!

Avez-vous des pistes ? Merci aux contributeurs !

Cordialement, Daniel

Salut Dan,

oserais-je...

Bonjour Curulis57,

En fait, c'est une question générique : existe t'il d'autre solutions que l'instruction END pour réinitialiser l'utilisation de la mémoire entre deux traitements identiques ? (à part bien sûr fermer Excel et le rouvrir !).

A partir de là, je ne suis pas sûr que joindre le fichier soit d'un grand secours à quiconque...

Merci néanmoins de t'être intéressé à mon problème.

Je reviendrai peut-être parler d'optimisation de macros par la suite, lorsque j'aurai réglé ce point fâcheux...

Cordialement, Daniel

Nouveau test, avec un traitement (très) partiel et toujours END à la fin :

  • 1er lancement : 9 secondes
  • 2ème lancement : 11 secondes, puis 14 secondes, 17 secondes, etc...

Bonjour,

Le End Sub le fait déjà, je ne pense pas que ton End ajoute grand chose.

Il reste un doute sur les objets que tu dois vider avec Set ton_objet = Nothing

eric

Bonjour Eriic,

Je viens de tester "Set ton_objet = Nothing" sur deux objets de type Range utilisés dans la procédure principale : rien n'y fait, le temps de traitement continue à progresser...

Merci quand même ! J'ai pas mal de variables publiques : j'ai lu quelque part que cela pouvait poser des problèmes ?

Cordialement, Daniel

Elles sont conservées tant que le fichier est ouvert oui.

Mais ce sont les mêmes qui utilisées, elles ne sont pas redéclarées et n'occupent pas plus de mémoire à chaque lancement de ta macro.

1) as-tu suffisamment de mémoire pour ne pas utiliser de mémoire virtuelle ?

2) 21 mi..., à mon avis tu travailles sur les cellules. Charge les plages de données en une fois dans une variable tableau et travaille avec ce tableau. Pour l'écriture même principe : un tableau que tu inscris en une fois sur ta feuille.

En attendant ajoute Application.Screenupdating=False au début des macros qui écrivent sur la feuille.

eric

Eriiic,

Merci pour tes conseils... J'avais déjà exploité les consignes d'optimisation (ScreenUpdating, Calculation et consorts)...

Je viens de transformer l'écriture dans les cellules par l'écriture dans un Range : c'est sûr que ça fait tomber les temps (de 20 minutes à 20 secondes !) et j'avais ça en projet de toutes façons.

Mais le plus bizarre, c'est que ça a apparemment aussi résolu le problème d'allongement du temps de traitement !

Je clos le post, merci encore Eriiic...

Rechercher des sujets similaires à "reinitialisation traitement"