Macro de réglage des marges d'impression

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gecanosaga

XLDnaute Nouveau
Bonjour à toutes et à tous,

Dans un de mes documents Excel, j'ai créé une macro dont un morceau permet de régler les marges d'impression de chaque feuille dont voici le code :

Code:
For k = start_sheet To (Sheets.Count)
        'Définition de la zone d'impression
        FinZoneImpression = Sheets(k).Cells(65535, 5).End(xlUp).Row      'identification de la fin du fichier
        ' initialisation des marges d'impression
        If print_set Then
            With Sheets(k).PageSetup
               .LeftMargin = Application.InchesToPoints(0.7)
               .RightMargin = Application.InchesToPoints(0.7)
               .TopMargin = Application.InchesToPoints(0.5)
               .BottomMargin = Application.InchesToPoints(0.5)
               .HeaderMargin = Application.InchesToPoints(0.5)
               .FooterMargin = Application.InchesToPoints(0.5)
               .Orientation = xlPortrait
               .PaperSize = xlPaperA4
               .PrintTitleRows = "$36:$37"
             End With
        End If
        'Définition de la zone d'impression.
        Sheets(k).PageSetup.PrintArea = Range(Cells(1, 1), Cells(FinZoneImpression, 10)).Address
        Sheets(k).PageSetup.FitToPagesWide = 1
    Next k

Etant donné que je peux avoir jusqu'à 60 feuilles dans le fichier, le code est extremement long à se dérouler (entre 5 et 10 minutes 🙁).

Est ce que vous sauriez comment l'optimiser ?

De plus la fonction "Sheets(k).PageSetup.FitToPagesWide = 1" ne fonctionne plus... elle ne génère pas d'erreurs mais ne fait rien😕.

Merci d'avance pour votre aide.
 
Re : Macro de réglage des marges d'impression

Bonjour

Il est possible de régler les marge de toutes les feuilles voulues en une fois en utilisant une commande du type
Code:
    Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select

Pas de problème chez avec FitToPagesWide
 
Re : Macro de réglage des marges d'impression

Merci Chris pour ta réponse, par contre je ne comprends pas comment utiliser cette sélection..
en effet si je fais
Code:
    Sheets(Array("Header", "List of Screens", "Import Attribute")).Select
    
     With Selection.PageSetup
        .LeftMargin = Application.InchesToPoints(0.7)
        .RightMargin = Application.InchesToPoints(0.7)
        .TopMargin = Application.InchesToPoints(0.5)
        .BottomMargin = Application.InchesToPoints(0.5)
        .HeaderMargin = Application.InchesToPoints(0.5)
        .FooterMargin = Application.InchesToPoints(0.5)
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .PrintTitleRows = "$36:$37"
        .FitToPagesWide = 1
    End With

J'ai le droit à un message comme quoi l'objet ne supporte pas cette méthode à la ligne du "with".

Comment as tu fait ?
 
Re : Macro de réglage des marges d'impression

Re

Le plus simple : fais la manip avec l'enregistreur de macros.
Tu déclenches l'enregistreur, tu sélectionnes tes onglets, tu règles tes marges : tu auras le code de base.
 
Re : Macro de réglage des marges d'impression

Re

Chez moi la cela fonctionne et la limitation évoquée ne concerne pas la mise en page.
De façon générale le VBA a les mêmes possibilités et limites que les manips manuelles.

Il faut définir l'array comme indiqué dans mon post précédent et activer la 1ère feuille de ce groupe avant d'agir sur la mise en page :
Code:
   Sheets(Array("Feuil4", "Feuil5", "Feuil6")).Select
   Sheets("Feuil4").Activate
 
Re : Macro de réglage des marges d'impression

Chris,

Je ne comprends pas pourquoi ça marche chez toi et pas chez moi... c'est pourtant bien ce que j'avais fait mais malheureusement chez moi ça se cantonne à appliquer les modification uniquement sur la page activée.😕
Code:
    Sheets(Array("Header", "List of Screens", "Import Attribute")).Select
    Sheets("Header").Activate
    
    With ActiveSheet.PageSetup
      .LeftMargin = Application.InchesToPoints(0.7)
      .RightMargin = Application.InchesToPoints(0.7)
      .TopMargin = Application.InchesToPoints(0.5)
      .BottomMargin = Application.InchesToPoints(0.5)
      .HeaderMargin = Application.InchesToPoints(0.5)
      .FooterMargin = Application.InchesToPoints(0.5)
      .Orientation = xlPortrait
      .PaperSize = xlPaperA4
      .PrintTitleRows = "$36:$37"
    End With
 
Re : Macro de réglage des marges d'impression

Bonjour

Il faut enlever la ligne
Code:
.PrintTitleRows = "$36:$37"
qui n'es pas paramétrable en multi feuilles
et ajouter
Code:
Application.PrintCommunication = False
avant With ActiveSheet.PageSetup et remettre à True après End with

En mono onglet ces lignes ne semblent pas avoir d'incidence mais a priori en multi onglets cela semble expliquer ton PB.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
164
Retour