Bonjour, après avoir difficilement lâché Excel 2003 puis 2010 pour passer à la 2019 depuis 2-3 ans, j'avais vu que mes scripts VBA étaient devenus particulièrement mous. Je finalise un projet et j'ai pu faire des mesures sans trouver de solutions malgré le nombre de retours négatifs sur ce point.

Tout d'abord mon script ne travaille que sur un nombre limité de cellules : intersection d'environ 65 colonnes et 40 lignes. Aucune données et aucun script en dehors ou sur ligne ou colonne entière.
Mon script agit visuellement pour l'utilisateur avec réglage de la vitesse d'exécution géré par un Timer. Donc j'ai besoin du ScreenUpdating et xlCalculationAutomatic. Les désactiver est effectivement très efficace, mais ça n'a plus aucun sens dans le cas de mon projet.

Pour que vous compreniez l'idée :

Sur la feuille :

Sub Worksheet_Change(ByVal Target As Excel.Range)
Call Modifier(Target)
End Sub

Dans un module :

Sub Modifier(ByVal Target As Excel.Range)
ThisColumn = Target.Column
Select Case ActiveSheet.Cells(7, ThisColumn).Value
Case "0"
ActiveSheet.Cells(5, ThisColumn).Interior.Color = RGB(244, 176, 132)
ActiveSheet.Cells(5, ThisColumn).Borders.LineStyle = xlContinuous
ActiveSheet.Cells(5, ThisColumn).Borders.Weight = xlMedium
...

J'ai enregistré mon fichier au format XLSM et au format XLS 2003.

Même ordinateur (PC fixe), même configuration matérielle (bonne), même disque d'exécution (clé USB)... A vitesse d'exécution 1ms - idem si je court-circuite le Timer qui n'est pas la cause du problème, mais bien la gestion graphique en temps réel :

XLS sous WinXP 32 - Excel 2010 : 2 minutes 14 secondes
XLS sous Win10 64 - Excel 2019 : 4 minutes 50 secondes
XLSM sous Win10 64 - Excel 2019 : 15 minutes 47 secondes

Le script est donc 7x plus lent, ce qui n'est pas sans conséquence, car ce n'est pas pareil d'attendre 3 minutes et 16 minutes, surtout si on doit relancer le script plusieurs fois.

Même soucis et temps sur un DELL portable avec une quadro et un i7 fichier directement sur SSD.

Au boulot, j'ai cru voir que sur certains postes, ça allait plutôt vite alors que sur d'autres c'était encore plus lent.

Si vous avez des idées, y compris modification système. Dois-je plustôt privilégier le format XLS 2003 ? C'est ce que je faisais, constatant la disparition des macros dans le XLSX et avant de découvrir le XLSM. Aujourd'hui, j'ai plutôt tendance à convertir en XLSM, mais c'est peut-être une 1ère erreur, j'ai rarement besoin de plus de 2^16 lignes.

Merci,

Olivier.