🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Page Setup dans Excel — zone d'impression, ajustement à la page et orientation

|

VBA Page Setup dans Excel — zone d'impression, ajustement à la page et orientation

TL;DR — Worksheet.PageSetup définit la page : ce qu'elle contient (PrintArea), dans quel sens elle est orientée (Orientation), comment elle est mise à l'échelle (Zoom ou FitToPagesWide/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 : Zoom contre 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