Bonjour,
j'avais développé une macro VBA de mise en page automatique sous Excel 2003 qui visait, entre autres à optimiser le zoom sans changer le nombre de pages pour l'impression de la feuille.
Le code précédent était le suivant:
On a récemment basculé sous Excel 2010, et pour une raison qui m'échappe, ce code a fonctionné très bien pendant quelques temps. Mais depuis quelques jours, j'ai eu des erreurs dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 'On optimise le zoom zoomOptimise = 0 nbPagesAuto = ThisWorkbook.Sheets("DAS").HPageBreaks.Count + 1 zoomAuto = ThisWorkbook.Sheets("DAS").PageSetup.Zoom zoomActuel = zoomAuto While zoomOptimise = 0 And zoomActuel < 400 zoomActuel = zoomActuel + 1 ThisWorkbook.Sheets("DAS").PageSetup.Zoom = zoomActuel nbPagesZoom = ExecuteExcel4Macro("GET.DOCUMENT(50)") If nbPagesZoom > nbPagesAuto Then zoomOptimise = zoomActuel - 1 End If Wend ThisWorkbook.Sheets("DAS").PageSetup.Zoom = zoomOptimise
Du coup, j'ai adapté mon code avec les objets Excel 2010:
Et ça marche pour la plupart de mes impressions automatiques, sauf une... Il faut reconnaître que a feuille est peut-être un peu lourde pour la mémoire de ce pauvre Excel (la zone d'impression est A1:AK478), mais je ne peux pas faire autrement hélas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 'On optimise le zoom zoomOptimise = 0 nbPagesAuto = ThisWorkbook.Sheets("Descriptif").PageSetup.Pages.Count zoomAuto = ThisWorkbook.Sheets("Descriptif").PageSetup.Zoom zoomActuel = zoomAuto While zoomOptimise = 0 And zoomActuel < 400 zoomActuel = zoomActuel + 1 ThisWorkbook.Sheets("Descriptif").PageSetup.Zoom = zoomActuel DoEvents 'un appel de ThisWorkbook.Sheets("Descriptif").PrintPreview irait, mais ça arrête le code nbPagesZoom = ThisWorkbook.Sheets("Descriptif").PageSetup.Pages.Count If nbPagesZoom > nbPagesAuto Then zoomOptimise = zoomActuel - 1 End If Wend ThisWorkbook.Sheets("Descriptif").PageSetup.Zoom = zoomOptimise
Donc, ce qu'il me faudrait c'est une instruction à la place du DoEvents, qui recalculerait l'aperçu avant impression (enfin juste son nombre de pages). J'espérais trouver ça dans les méthodes de l'objet PageSetup, mais il n'y a pas de méthodes pour cet objet.
Quant à la méthode PrintPreview de l'objet Worksheet, elle ouvre une autre fenêtre et bloque mon exécution (en plus c'est lent...).
Si quelqu'un a une idée, je suis preneur...
Cordialement,
Thomas
Partager