J'ai fait tellement d'essais que je me suis mélangé les pinceaux, et mon message n'est pas très clair.
En fait, dessiner des Txt box est tellement lent que j’ai remplacé celles-ci par des rectangles. J’en fais dessiner 500.
Code :
- Sub MesureDureeRectangles()
- Dim i As Long, Boite As Shape, Debut As Date
- Application.ScreenUpdating = False
- ActiveDocument.Windows(1).Visible = False
- Debut = Time
- For i = 1 To 500
- Set Boite = ActiveDocument.Shapes.AddShape(msoShapeRectangle, 4 * i, 72.75, 4, 19.5)
- Boite.Fill.ForeColor.RGB = RGB(2 * i, 2 * i, 2 * i)
- Next i
- ActiveDocument.Windows(1).Visible = True
- Application.ScreenUpdating = True
- MsgBox CStr((Time - Debut) * 24 * 3600) & " s"
- End Sub
|
La macro s'exécute en 4 secondes.
Si je désactive les lignes 3 et 13, en laissant actives les lignes 4 et 12, la macro s'exécute en 4 secondes.
Si je désactive les lignes 4 et 12 en laissant actives les lignes 3 et 13, on passe à 80 secondes.
Si je désactive toutes ces lignes, 104 secondes.
Chez moi, le ScreenUpdating employé seul fait donc passer de 104 secondes à 80 secondes. C'est certes un gain, mais cela n'a rien de renversant.
Si maintenant je remplace les lignes 3 et 4 par ActiveDocument.DowngradeDocument, et les lignes 12 et 13 par ActiveDocument.Convert, le document passe au format Word 2003, et les 500 rectangles sont dessinés en 0 seconde.
On passe donc de 104 secondes à 0 seconde.
Sous Excel 2010, la macro débarrassée des lignes 3, 4, 12 et 13 s'exécute en moins d'une seconde.
Bref, il y a quelques problèmes avec Word 2010. Dessiner est devenu une vraie galère.