XL 2019 VBA impression sheets sélectionnées

Julien_m

XLDnaute Junior
Bonjour à tous,

J'essaie donc d'imprimer avec des onglets que j'ai sélectionné (tous sauf les 3 premiers).
J'ai l'impression que ce n'est pas possible de le faire avec PageSetup (solution qui permet beaucoup de paramètre) donc j'ai fini par trouver et faire avec PrintOut... mais trop peu de paramètres de trouve (à première vue).

VB:
Sub Impr2()
    If Sheets.Count > 3 Then
        Dim WB1 As Workbook
        Dim MyArray() As String
        Dim i As Integer, X As Byte
 
        Set WB1 = ThisWorkbook
 
        For i = 4 To Sheets.Count
            ReDim Preserve MyArray(X)
            MyArray(X) = Sheets(i).Name
            X = X + 1
        Next
            WB1.Worksheets(MyArray).Select
            ActiveWindow.SelectedSheets.PrintOut Collate:=True, Preview:=True
    Else
         MsgBox "Il n'y a aucune feuille à imprimer, veuillez  en générer avant de lancer l'impression !"
    End If
End Sub

J'aimerais pouvoir paramétrer le format de papier (A3, A4...), la disposition (paysage, portrait), le zoom, les marges... et que l'utilisateur n'ait plus qu'à choisir son imprimante pour lancer le processus.

Merci d'avance,
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Julien, le forum

Solution 1 :
Elle permet de gérer séparément chaque feuille des zones à imprimer et les marges.
VB:
Sub Solution_Impression_V1()

Application.ScreenUpdating = False

Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet
Dim Sh4 As Worksheet

Set Sh1 = Feuil1                'A adapter en fonction du codename de la feuille 1
Set Sh2 = Feuil2                'A adapter en fonction du codename de la feuille 2
Set Sh3 = Feuil3                'A adapter en fonction du codename de la feuille 3
Set Sh4 = Feuil4                'A adapter en fonction du codename de la feuille 4

With Sh1.PageSetup              'On regle touts les parametres de la feuille 1
    .PrintArea = "A4:X50"       'Zone d'impression à adapter de la feuille 1
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    'Réglage des marges
    .LeftMargin = Application.InchesToPoints(0.1)   'Marge gauche
    .RightMargin = Application.InchesToPoints(0.1)  'Marge droite
    .TopMargin = Application.InchesToPoints(0.1)    'Marge haut de page
    .BottomMargin = Application.InchesToPoints(0.1) 'Marge bas de page
    .Orientation = xlLandscape                      'Paysage
'    .Orientation = xlPortrait                       'Portrait
End With

With Sh2.PageSetup              'On regle touts les parametres de la feuille 2
    .PrintArea = "C4:M26"       'Zone d'impression à adapter
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    'Réglage des marges si marge différentes
    .LeftMargin = Application.InchesToPoints(0.8)   'Marge gauche
    .RightMargin = Application.InchesToPoints(0.1)  'Marge droite
    .TopMargin = Application.InchesToPoints(0.8)    'Marge haut de page ou top
    .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
    .Orientation = xlLandscape                      'Paysage
    '.Orientation = xlPortrait                       'Portrait
End With

With Sh3.PageSetup              'On regle touts les parametres de la feuille 3
    .PrintArea = "D5:N27"       'Zone d'impression à adapter
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    'Réglage des marges si marge différentes
    .LeftMargin = Application.InchesToPoints(0.8)   'Marge gauche
    .RightMargin = Application.InchesToPoints(0.1)  'Marge droite
    .TopMargin = Application.InchesToPoints(0.8)    'Marge haut de page ou top
    .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
    .Orientation = xlLandscape                      'Paysage
    '.Orientation = xlPortrait                       'Portrait
End With

With Sh4.PageSetup              'On regle touts les parametres de la feuille 4
    .PrintArea = "E6:O28"       'Zone d'impression à adapter
    .FitToPagesWide = 1
    .FitToPagesTall = 1
    'Réglage des marges si marge différentes
    .LeftMargin = Application.InchesToPoints(0.8)   'Marge gauche
    .RightMargin = Application.InchesToPoints(0.1)  'Marge droite
    .TopMargin = Application.InchesToPoints(0.8)    'Marge haut de page ou top
    .BottomMargin = Application.InchesToPoints(0.8) 'Marge bas de page si nécessaire
    .Orientation = xlLandscape                      'Paysage
    '.Orientation = xlPortrait                       'Portrait
End With

Sheets(Array(Sh1.Name, Sh2.Name, Sh3.Name, Sh4.Name)).PrintPreview            'Selectionne les feuille à imprimer

Set Sh1 = Nothing               'Decharge la feuille 1
Set Sh2 = Nothing               'Decharge la feuille 2
Set Sh3 = Nothing               'Decharge la feuille 3
Set Sh4 = Nothing               'Decharge la feuille 4

Application.ScreenUpdating = True

End Sub

Solution 2 :
Toutes les feuilles ont les mêmes marges et zones à imprimer.
Code:
Sub Solution_Impression_V2()

Application.ScreenUpdating = False

Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet
Dim Sh4 As Worksheet

Set Sh1 = Feuil1                'A adapter en fonction du codename de la feuille 1
Set Sh2 = Feuil2                'A adapter en fonction du codename de la feuille 2
Set Sh3 = Feuil3                'A adapter en fonction du codename de la feuille 3
Set Sh4 = Feuil4                'A adapter en fonction du codename de la feuille 4

For Each Sh In Worksheets 'Reglage impr pour toutes les feuilles si reglages identiques
    'Réglage des marges
    Sh.PageSetup.LeftMargin = Application.InchesToPoints(0.8)       'Marge gauche
    Sh.PageSetup.RightMargin = Application.InchesToPoints(0.1)      'Marge droite
    Sh.PageSetup.TopMargin = Application.InchesToPoints(0.8)        'Marge haut de page ou top
    Sh.PageSetup.BottomMargin = Application.InchesToPoints(0.8)     'Marge bas de page si nécessaire
    Sh.PageSetup.Orientation = xlLandscape                          'Paysage
   'sh.PageSetup.Orientation = xlPortrait                           'Portrait
Next Sh

Sheets(Array(Sh1.Name, Sh2.Name, Sh3.Name, Sh4.Name)).PrintPreview            'Selectionne les feuille à imprimer

Set Sh1 = Nothing               'Decharge la feuille 1
Set Sh2 = Nothing               'Decharge la feuille 2
Set Sh3 = Nothing               'Decharge la feuille 3
Set Sh4 = Nothing               'Decharge la feuille 4

Application.ScreenUpdating = True

End Sub

Il est possible d'exporter en PDF les feuilles avec les options précédentes.
Par exemple comme cela :
Code:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "ImpresTest.pdf"

@Phil69970
 

Statistiques des forums

Discussions
312 041
Messages
2 084 828
Membres
102 685
dernier inscrit
med_remi021