TL;DR —
Worksheet.PageSetupdéfinit la page : ce qu'elle contient (PrintArea), dans quel sens elle est orientée (Orientation), comment elle est mise à l'échelle (ZoomouFitToPagesWide/FitToPagesTall), ses marges, ses lignes de titre répétées, son en-tête et son pied de page. PrintOut comme l'enregistrement en PDF produisent ces pages : c'est donc ici que se corrigent les problèmes de disposition. La règle qui fait trébucher tout le monde : l'ajustement à la page ne fonctionne qu'après avoir réglé.Zoom = False.
Sub SetUpReportPage()
With Worksheets("Report").PageSetup
.PrintArea = "$A$1:$H$60"
.Orientation = xlLandscape
.Zoom = False ' obligatoire, sinon les deux lignes suivantes sont ignorees
.FitToPagesWide = 1
.FitToPagesTall = False ' autant de pages en hauteur que les donnees l'exigent
.PrintTitleRows = "$1:$2"
End With
End Sub
Voici la base d'une série de trois articles consacrée à la sortie des données d'Excel. PageSetup,
traité ici, décide de ce qu'est une page. PrintOut envoie ces pages à une
imprimante, et ExportAsFixedFormat envoie les mêmes pages dans un PDF. Les
commandes de sortie tiennent chacune en une ligne ; le vrai travail, c'est la page. Quand une
impression ou un PDF a l'air faux, la correction se trouve presque toujours ici, pas dans la commande
qui l'a produit.
Ce que vous allez apprendre
- Pourquoi la définition de la page commande à la fois le papier et le PDF
- Définir et effacer la zone d'impression, y compris à partir d'un
Range - Orientation, format du papier et centrage
- Mise à l'échelle :
Zoomcontre ajustement aux pages, et la règle qui les relie - Répéter les lignes de titre, et des en-têtes et pieds de page avec numéros de page
- Des marges en pouces ou en centimètres
- Accélérer la mise en page avec
PrintCommunication
Le modèle mental : la page est le produit
Quand Excel imprime ou exporte, il n'imprime pas un tableau — il découpe la feuille en pages et produit
ces pages. PageSetup contient toutes les règles de ce découpage : la zone à inclure, le papier, le
sens, l'échelle, les marges et ce qui se répète sur chaque page. PrintOut et
ExportAsFixedFormat ne sont que deux destinations pour le résultat.
Considérez donc la mise en page comme le produit, et la commande de sortie comme la livraison. Une
macro de rapport qui règle explicitement la page donne le même résultat sur toutes les machines ; celle
qui se fie à ce qui traînait là depuis la dernière fois, non.
La zone d'impression
PrintArea est une chaîne contenant une adresse de style A1, pas un Range. Pour la définir à
partir d'une plage, passez l'Address de cette plage :
Dim ws As Worksheet
Set ws = Worksheets("Report")
ws.PageSetup.PrintArea = ws.Range("A1").CurrentRegion.Address ' le bloc de donnees
ws.PageSetup.PrintArea = "" ' l'effacer : tout imprimer
La définir à partir de CurrentRegion ou de la dernière ligne, c'est ce qui permet à un rapport d'imprimer exactement ses données, quel que soit le nombre de lignes ce mois-ci. L'effacer avec une chaîne vide est tout aussi important : une zone d'impression héritée d'une ancienne exécution tronque en silence le rapport suivant.
Orientation, format du papier et centrage
With ws.PageSetup
.Orientation = xlLandscape ' ou xlPortrait
.PaperSize = xlPaperA4 ' ou xlPaperLetter
.CenterHorizontally = True
End With
PaperSize dépend de ce que prend en charge le pilote d'imprimante ; un format absent de l'imprimante
déclenche une erreur. Pour un classeur destiné à la fois à l'Europe et aux États-Unis, fixez-le
délibérément plutôt que de le supposer.
Mise à l'échelle : Zoom contre ajustement aux pages
Il existe deux façons de mettre à l'échelle, et elles s'excluent mutuellement. Zoom est un
pourcentage de 10 à 400. FitToPagesWide et FitToPagesTall laissent Excel choisir l'échelle pour
tenir dans un nombre de pages. Excel n'utilise les réglages d'ajustement que lorsque Zoom vaut
False — tant que Zoom contient un nombre, ils sont ignorés sans bruit. C'est pour cela que tant de
macros « ajuster à une page » ne font rien :
With ws.PageSetup
.Zoom = False
.FitToPagesWide = 1 ' toutes les colonnes sur une page en largeur
.FitToPagesTall = False ' laisser les lignes s'etendre sur autant de pages que necessaire
End With
FitToPagesWide = 1 avec FitToPagesTall = False, c'est le réglage que veulent la plupart des
rapports : ne jamais couper les colonnes, laisser les lignes s'écouler. Mettre les deux à 1 comprime
tout sur une seule page, ce qui convient à une synthèse et rend une longue liste illisible.
Lignes de titre, en-têtes et pieds de page
PrintTitleRows répète des lignes d'en-tête en haut de chaque page ; elle reçoit une adresse de lignes
sous forme de chaîne. Les en-têtes et pieds de page acceptent du texte avec des codes : &P est le
numéro de page, &N le nombre de pages, &D la date, &A le nom de la feuille.
With ws.PageSetup
.PrintTitleRows = "$1:$2"
.CenterFooter = "Page &P sur &N"
.RightHeader = "&A - imprime le &D"
End With
Comme & introduit un code, une esperluette littérale dans le texte d'un en-tête doit être doublée :
"R&&D Report" s'imprime R&D Report.
Des marges en pouces ou en centimètres
Les marges se mesurent en points, pas en pouces. Convertissez avec Application.InchesToPoints ou
Application.CentimetersToPoints :
With ws.PageSetup
.LeftMargin = Application.CentimetersToPoints(1.5)
.RightMargin = Application.CentimetersToPoints(1.5)
.TopMargin = Application.InchesToPoints(0.75)
End With
Écrire .LeftMargin = 1 règle une marge d'un point — environ un tiers de millimètre — ce qui explique
souvent qu'une impression se mette soudain à mordre jusqu'au bord du papier.
Accélérer la mise en page avec PrintCommunication
Chaque affectation de PageSetup dialogue avec le pilote d'imprimante, si bien qu'un bloc de dix
réglages peut prendre plusieurs secondes, et davantage dans une boucle sur de nombreuses feuilles.
Coupez ce dialogue pendant les réglages, et rétablissez-le à la fin :
Application.PrintCommunication = False
With ws.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
End With
Application.PrintCommunication = True ' applique les reglages regroupes
Rétablissez-le toujours — les réglages ne sont validés qu'au retour à True. La même logique vaut pour
ScreenUpdating : empêchez Excel de faire un travail inutile pendant que
la macro s'exécute.
Comment ExcelMaster aide
La mise en page est l'endroit où les macros de rapport échouent en silence : un Zoom qui désactive
sans bruit l'ajustement à la page, une marge réglée en points au lieu de centimètres, une zone
d'impression restée du mois dernier, un pied de page dont l'esperluette disparaît. Rien de tout cela ne
déclenche d'erreur — le rapport sort simplement faux, sur papier ou en PDF.
ExcelMaster vous laisse décrire
la page — « A4 en paysage, une page de large, répéter les deux premières lignes, numéros de page dans
le pied de page » — et écrit le bloc PageSetup complet en tenant compte de la règle du zoom, de la
conversion d'unités et du mode rapide, puis affiche l'aperçu des pages pour que vous voyiez la
disposition avant toute impression ou tout export.
Questions fréquentes
Comment définir la zone d'impression en VBA ?
Affectez une chaîne d'adresse à PageSetup.PrintArea, par exemple
Worksheets("Report").PageSetup.PrintArea = "$A$1:$H$60". Pour utiliser une plage, passez son
Address : .PrintArea = Range("A1").CurrentRegion.Address. Affectez "" pour effacer la zone
d'impression et imprimer toute la feuille.
Pourquoi FitToPagesWide ne fonctionne-t-il pas ?
Parce que Zoom contient encore un pourcentage. Excel ignore FitToPagesWide et FitToPagesTall
tant que PageSetup.Zoom = False n'est pas réglé. Mettez d'abord Zoom à False, puis les réglages
d'ajustement, typiquement FitToPagesWide = 1 et FitToPagesTall = False.
Comment passer en orientation paysage en VBA ?
Utilisez Worksheets("Report").PageSetup.Orientation = xlLandscape, et xlPortrait pour revenir en
arrière. Le réglage s'applique à la fois à l'impression et à l'export PDF, car les deux reprennent la
mise en page de la feuille.
Comment répéter les lignes d'en-tête sur chaque page imprimée ?
Affectez à PageSetup.PrintTitleRows une chaîne d'adresse de lignes, par exemple "$1:$2" pour
répéter les lignes 1 et 2. Pour répéter des colonnes à gauche de chaque page, utilisez
PrintTitleColumns avec une adresse de colonnes comme "$A:$A".
Pourquoi ma macro PageSetup est-elle si lente ?
Chaque propriété de PageSetup dialogue avec le pilote d'imprimante. Encadrez les réglages par
Application.PrintCommunication = False et Application.PrintCommunication = True ; Excel les
applique alors en un seul lot. Pensez à le remettre à True, sinon les réglages ne sont pas validés.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — dernière vérification le 29/09/2026.
Guides associés : VBA Save as PDF · VBA PrintOut · VBA CurrentRegion · VBA Last Row · VBA Used Range · VBA ScreenUpdating · VBA Workbook BeforePrint
