XL 2019 Impression échelle personnalisée

Julien_m

XLDnaute Junior
Bonjour à tous,

Je bloque depuis quelques temps sur l'impression et de manière générale j'ai toujours des problèmes lorsque je veux automatiser en vba mes impressions.
Cette fois c'est la mise à l'échelle qui me pose problème... j'ai essayé d'ajouter .Zoom=110 mais rien à faire, impression toujours pas à l'échelle.

Voici le code que j'ai écrit :
VB:
Sub Full_impr()

    Set fin = Range("Suivi_Forma!Full_jusquà")
    
    Sheets("Impr.ADC").Select
    Range("B1:F" & fin).Select
    
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.25)
            .RightMargin = Application.InchesToPoints(0.25)
            .TopMargin = Application.InchesToPoints(0.25)
            .BottomMargin = Application.InchesToPoints(0.25)
            .HeaderMargin = Application.InchesToPoints(0.25)
            .FooterMargin = Application.InchesToPoints(0.25)
            .PrintQuality = 300
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .BlackAndWhite = False
            .Zoom = 110
        End With
        If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Selection.PrintOut

End Sub

Merci d'avance de vos retours,

Julien,
 
Solution
Bonjour à tous

Je vous laisse ici un exemple, il vous suffit de l'adapter au code de votre projet


VB:
Private Sub impressionFeuille() ' impression

Dim myWorksheet As Worksheet
Dim iCounter As Long
Dim myCmPointsBase As Single ' pour définir les marges et les tailles de l'image, s'il y a une image
Dim LastRow As Long

Set myWorksheet = Application.ThisWorkbook.Worksheets("Feuille1")
'Set myWorksheet = ActiveSheet

LastRow = myWorksheet.Cells(myWorksheet.Rows.Count, "A").End(xlUp).Row 'si la dernière ligne n'est pas dans la colonne A, changez la lettre de la colonne
Debug.Print LastRow
myCmPointsBase = Application.CentimetersToPoints(0.5) ' Application.CentimeterToPoints méthode convertit 0,5 centimètre en points (calcul des marges)...

Phil69970

XLDnaute Barbatruc
Bonjour Julien, le forum

L’Enregistreur de macro me dit ça ....
ActiveWindow.Zoom = 110
VB:
Sub Full_impr()

    Set fin = Range("Suivi_Forma!Full_jusquà")
   
    Sheets("Impr.ADC").Select
    Range("B1:F" & fin).Select
   
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.25)
            .RightMargin = Application.InchesToPoints(0.25)
            .TopMargin = Application.InchesToPoints(0.25)
            .BottomMargin = Application.InchesToPoints(0.25)
            .HeaderMargin = Application.InchesToPoints(0.25)
            .FooterMargin = Application.InchesToPoints(0.25)
            .PrintQuality = 300
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .BlackAndWhite = False
            '.Zoom = 110
        End With

       ActiveWindow.Zoom = 110

        If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Selection.PrintOut
End Sub

@Phil69970
 

Julien_m

XLDnaute Junior
Bonjour Julien, le forum

L’Enregistreur de macro me dit ça ....
ActiveWindow.Zoom = 110
VB:
Sub Full_impr()

    Set fin = Range("Suivi_Forma!Full_jusquà")
  
    Sheets("Impr.ADC").Select
    Range("B1:F" & fin).Select
  
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.25)
            .RightMargin = Application.InchesToPoints(0.25)
            .TopMargin = Application.InchesToPoints(0.25)
            .BottomMargin = Application.InchesToPoints(0.25)
            .HeaderMargin = Application.InchesToPoints(0.25)
            .FooterMargin = Application.InchesToPoints(0.25)
            .PrintQuality = 300
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .BlackAndWhite = False
            '.Zoom = 110
        End With

       ActiveWindow.Zoom = 110

        If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Selection.PrintOut
End Sub

@Phil69970
merci Phil pour votre réponse,
je n'ai pas l'impression que ça change la moindre chose malheureusement....

De plus je viens de me rendre compte que mon code ne fonctionne pas... je comprends rien au vba pour imprimer 😩
J'ai essayé de lancer une impression manuellement en mettant des paramètres totalement contraire à ce que je veux (format paysage par exemple) avec le vba. Et lorsque je lance mon code ça reste sur ces paramètres (paysage ... alors que je veux portrait).
Une idée ?
 

Rhysand

XLDnaute Junior
Bonjour à tous

Je vous laisse ici un exemple, il vous suffit de l'adapter au code de votre projet


VB:
Private Sub impressionFeuille() ' impression

Dim myWorksheet As Worksheet
Dim iCounter As Long
Dim myCmPointsBase As Single ' pour définir les marges et les tailles de l'image, s'il y a une image
Dim LastRow As Long

Set myWorksheet = Application.ThisWorkbook.Worksheets("Feuille1")
'Set myWorksheet = ActiveSheet

LastRow = myWorksheet.Cells(myWorksheet.Rows.Count, "A").End(xlUp).Row 'si la dernière ligne n'est pas dans la colonne A, changez la lettre de la colonne
Debug.Print LastRow
myCmPointsBase = Application.CentimetersToPoints(0.5) ' Application.CentimeterToPoints méthode convertit 0,5 centimètre en points (calcul des marges)
Debug.Print myCmPointsBase

With myWorksheet
    .ResetAllPageBreaks ' réinitialiser toutes les pages "breaks"
'--------------------------------------------------------------------------
' faites attention aux lignes suivantes, changez la ligne de rupture si nécessaire, faites attention à l'orientation de la feuille
'--------------------------------------------------------------------------
    For iCounter = LastRow To 1 Step 50 ' ajoute un page "break" toutes les 50 lignes de la ligne 1 à la dernière ligne définie (lastrow)
        .HPageBreaks.Add .Cells(iCounter, 1)
    Next iCounter
'--------------------------------------------------------------------------
        With .PageSetup
            .PrintArea = "A1:k" & LastRow ' zone d 'impression (changez la lettre de la dernière colonne si nécessaire)
            .PaperSize = xlPaperA4 ' taille de papier
'--------------------------------------------------------------------------
' choisissez une option
'--------------------------------------------------------------------------
            .Orientation = xlPortrait ' orientation de la feuille
'            .Orientation = xlLandscape ' orientation de la feuille
'--------------------------------------------------------------------------
            .Zoom = False '  (1/3)... si faux -> pour que la feuille soit dimensionnée en fonction des propriétés FitToPagesTall et FitToPagesWide
            .FitToPagesTall = False '  (2/3)... si faux -> permet de déterminer la mise à l'échelle par une seule propriété: FitToPagesWide
            .FitToPagesWide = 1 '   (3/3)... Échelle de la feuille à 1 page de large
            .PrintGridlines = False ' si vrai (imprime les bordures de cellule) // si faux (ne s'imprime pas)
            .PrintHeadings = False ' si vrai (les titres des lignes et des colonnes sont imprimés) // si faux (ne s'imprime pas)
            .PrintTitleRows = myWorksheet.Rows(12).Address ' (row 12)... spécifie qu'une ligne est répétée comme ligne d'en-tête en haut de chaque page imprimée
'--------------------------------------------------------------------------
' faites attention à la ligne suivante ... dépend de chaque PC et imprimante, pour des raisons de sécurité, faites un test, si cela fonctionne, ok, sinon, laissez-le désactivé
'--------------------------------------------------------------------------
'            .PrintQuality = -3 ' changer la valeur
'--------------------------------------------------------------------------
            .FooterMargin = myCmPointsBase * 2 ' marge de pied de page
            .HeaderMargin = myCmPointsBase * 2 ' Marge d'en-tête
            .AlignMarginsHeaderFooter = True ' si vrai (Aligne les en-têtes et les pieds de page avec les marges droite et gauche) // si faux (ne s'aligne pas)
            .TopMargin = myCmPointsBase * 5 ' Marge supérieure
            .RightMargin = myCmPointsBase * 3 ' Marge droite
            .BottomMargin = myCmPointsBase * 5 ' marge inférieure
            .LeftMargin = myCmPointsBase * 3 ' Marge de gauche
            .CenterHorizontally = True ' centre de la feuille horizontalement
            .CenterVertically = False ' centrer la feuille verticalement
            .CenterFooter = "&Imon texte ici" ' définit le pied de page central pour afficher le texte "Imprimé par ordinateur". Utilisez le code de formatage & B pour activer / désactiver l'impression en gras
            .RightFooter = "Page  &P de &N" ' définit le pied de page droit pour afficher le numéro de page à partir du nombre total de pages ... utiliser les codes & P et & N. & P imprime le numéro de page. & N imprime le nombre total de pages
'--------------------------------------------------------------------------
'* ligne suivante, les procédures pour l'image sont désactivées, il suffit de mettre ici pour la démonstration - step(1/3)
'--------------------------------------------------------------------------
'            .CenterHeader = "&G" ' Définir l'en-tête central (Autoriser l'image)
'--------------------------------------------------------------------------
            .CenterHeader = "&D" & " - " & "&T" ' Définir l'en-tête de texte central
'--------------------------------------------------------------------------
'* lignes suivantes, les procédures pour l'image sont désactivées, il suffit de mettre ici pour la démonstration - step(2/3)
'--------------------------------------------------------------------------
            With .CenterHeaderPicture
'                .FileName = "C:\...\image.jpg"
'                .ColorType = msoPictureAutomatic
'                .LockAspectRatio = msoTrue
'                .Height = myCmPointsBase * 2
            End With
'--------------------------------------------------------------------------
            .OddAndEvenPagesHeaderFooter = True ' si vrai (l'en-tête et les pieds de page diffèrent entre les pages paires et impaires) // si faux (ne diffèrent pas)
                With .EvenPage
                    .CenterFooter.Text = "&Bmon texte ici" ' définir le centre des pages paires
                    .RightFooter.Text = "mon texte ici &P de &N" ' définir le "pied de page" pour les pages paires
                    With .CenterHeader
'                        .Text = "&G"
                        .Text = "mon texte ici"
'--------------------------------------------------------------------------
'* lignes suivantes, les procédures pour l'image sont désactivées, il suffit de mettre ici pour la démonstration - step(3/3)
'--------------------------------------------------------------------------
                        With .Picture
'                            .FileName = "C:\...\image.jpg"
'                            .ColorType = msoPictureAutomatic
'                            .LockAspectRatio = msoTrue
'                            .Height = myCmPointsBase * 2
                        End With
'--------------------------------------------------------------------------
                    End With
                     .RightHeader.Text = "mon texte ici" ' texte qui n'apparaîtra que sur les pages paires
                End With
        End With
'        Unload Me ' dans le cas des formulaires utilisateur, pour afficher l'aperçu avant impression
'        .PrintPreview ' aperçu avant impression
    .PrintOut ' imprimer
End With

If Not myWorksheet Is Nothing Then Set myWorksheet = Nothing

'-------------------------------------------------------------------------------------------------------
'                                     INDICE
'-------------------------------------------------------------------------------------------------------
'Propriétés (LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter, and RightFooter)
'-------------------------------------------------------------------------------------------------------
'VBA code       /       La Description
'_______________/____________________________________________________________________________________
    '&D             Imprime la date actuelle.
    '&T             Imprime l 'heure actuelle.
    '&F             Imprime le nom du document.
    '&A             Imprime le nom de l'onglet du classeur.
    '&P             Imprime le numéro de page.
    '&P+number      Imprime le numéro de page plus le numéro spécifié.
    '&P-number      Imprime le numéro de page moins le numéro spécifié.
    '&&             Imprime une seule "ampersand".
    '&N             Imprime le nombre total de pages dans le document.
    '&Z             Imprime le chemin du fichier.
    '&G             Insère une image.
    
    
'Format  code    /     La Description
'_______________/____________________________________________________________________________________
    '&L             Gauche aligne les caractères qui suivent.
    '&C             Centre les caractères qui suivent.
    '&R             Aligne à droite les caractères qui suivent.
    '&E             Active ou désactive l'impression à double soulignement.
    '&X             Active ou désactive l'impression en exposant.
    '&Y             Active ou désactive l'impression d'indices.
    '&B             Active ou désactive l'impression en gras.
    '&I             Active ou désactive l'impression en italique.
    '&U             Active ou désactive l'impression de soulignement.
    '&S             Active ou désactive l'impression barrée.
    '&"fontname"    Imprime les caractères qui suivent dans la police spécifiée. Assurez-vous d'inclure les guillemets doubles.
    '&nn            Imprime les caractères qui suivent dans la taille de police spécifiée. Utilisez un nombre à deux chiffres pour spécifier une taille en points.
    '&color         Imprime les caractères dans la couleur spécifiée. L'utilisateur fournit une valeur de couleur hexadécimale.
    '&"+"           Imprime les caractères qui suivent dans la police Heading du thème actuel. Veillez à inclure les guillemets doubles.
    '&"-"           Imprime les caractères qui suivent dans la police Corps du thème actuel. Assurez-vous d'inclure les guillemets doubles.
    '&K xx. S nnn   Imprime les caractères qui suivent dans la couleur spécifiée à partir du thème actuel,
    '                   (xx) est un nombre à deux chiffres de 1 à 12 qui spécifie la couleur du thème à utiliser,
    '                   (S) nnn spécifie la nuance (teinte) de cette couleur de thème. Spécifiez S comme + pour produire une teinte plus claire; spécifiez S comme - pour produire une teinte plus foncée,
    '                   (nnn) est un nombre entier à trois chiffres qui spécifie un pourcentage compris entre 0 et 100.
    '               Si les valeurs qui spécifient la couleur ou la nuance du thème ne sont pas dans les limites décrites, Excel utilisera la valeur valide la plus proche.
'-------------------------------------------------------------------------------------------------------
'                                     INDICE
'-------------------------------------------------------------------------------------------------------
End Sub
 

Phil69970

XLDnaute Barbatruc
Julien

Lance excel avec un nouveau classeur et copie mon code dans un module vba et tu verras que cela fonctionne...le zoom s'adapte.
*Enleve ses 3 lignes avant :
Set fin = Range("Suivi_Forma!Full_jusquà")
Sheets("Impr.ADC").Select
Range("B1:F" & fin).Select

@Phil69970
 
Dernière édition:

Julien_m

XLDnaute Junior
Julien

Lance excel avec un nouveau classeur et copie mon code dans un module vba et tu verras que cela fonctionne...le zoom s'adapte.
*Enleve ses 3 lignes avant :
Set fin = Range("Suivi_Forma!Full_jusquà")
Sheets("Impr.ADC").Select
Range("B1:F" & fin).Select

@Phil69970
Bonjour Phil,

Je viens d'essayer, ton code fonctionne bien mais le zoom RAS. Que je mette ActiveWindow.Zoom = 50 ou ActiveWindow.Zoom = 110 le pdf est identique mis à part que une forme que j'ai mis disparaît 😅
 

Pièces jointes

  • zoom=50.pdf
    1.6 KB · Affichages: 10
  • zoom=110.pdf
    1.7 KB · Affichages: 4

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Ce code fonctionne chez moi sur une nouvelle feuille excel

VB:
Sub Full_impr()

'    Set fin = Range("Suivi_Forma!Full_jusquà")
'
'    Sheets("Impr.ADC").Select
'    Range("B1:F" & fin).Select
  
        Application.PrintCommunication = False
'        With ActiveSheet.PageSetup
'            .PrintTitleRows = ""
'            .PrintTitleColumns = ""
'        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .Zoom = 250
            .LeftMargin = Application.InchesToPoints(0.25)
            .RightMargin = Application.InchesToPoints(0.25)
            .TopMargin = Application.InchesToPoints(0.25)
            .BottomMargin = Application.InchesToPoints(0.25)
            .HeaderMargin = Application.InchesToPoints(0.25)
            .FooterMargin = Application.InchesToPoints(0.25)
            '.PrintQuality = 300
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .BlackAndWhite = False
        End With

       ' ActiveWindow.Zoom = ActiveSheet.PageSetup.Zoom '100

        If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Selection.PrintOut
End Sub

@Phil69970
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 172
Membres
112 676
dernier inscrit
little_b