Bonjour,
Il y a quelques aberrations dans ton code alors que tu souhaites optimiser la durée !
Il faut savoir que VBA est du code interprété donc chaque ligne est lue par le compilateur et exécutée donc, la ligne ci-dessous ralentit inutilement le code puisque le compilateur doit appeler des fonctions (Format, Timer) et effectuer des calculs et ça, 11517 fois :
1 2
|
Application.StatusBar = (k - 8) * 100 / 11509 & "%" & " " & Format$(Timer - StartTime) & "s ecoulées " & " Temps restant estimé :" & (11517 - k) * Format$(Timer - StartTime) / k & "s" & "Durée total d'éxecution " & Format$(Timer - StartTime) + (11517 - k) * Format$(Timer - StartTime) / k |
L'instruction "DoEvents" permet de laisser la main donc, le compilateur fait une pause pour que des actions puissent être exécutées par Excel.
La copie de valeurs (ici, tu demande la ligne entière alors que tu as probablement que quelques dizaines de cellules) prend plus de temps que l'affectation de valeurs.
Si tu as de nombreuses fonction dans tes feuilles, il serait préférable de paramétrer le calcul en manuel en début de code et le remettre en automatique en la fin.
Et toujours sur un grand nombre de valeurs il est préférable d'affecter ces valeurs à un tableau en mémoire puis une fois les modifications apportées directement dans le tableau, coller ce dernier dans la feuille plutôt que de travailler directement sur les cellules.
Partager