XL 2013 saut de page et mise en page automatique

don julio

XLDnaute Nouveau
Bonjour

Je souhaiterai automatiser une impression après avoir inseré des sauts de pages de façon a avoir toutes les colonnes sur une page et autant de pages que de saut de pages

J'ai mis en exemple ce que j'ai écris, mais je ne trouve pas la solution :(.

Merci de votre aide.

Bonne journée
 

Pièces jointes

  • test mise en page.xlsm
    81.3 KB · Affichages: 2
Solution
bonjour
rien de plus simple
tu détermine la plage utilisées (tu veux l'arrêter a "M" visiblement)
ensuite te reste plus qu'a déplacer les sauts de pages
on vire les marge les header et tout y cointi
bref le pagesetup on fait le minimum
et voila terminé tes tableaux seront chacun dans une page
même si ils n'auront pas la même dimension
et cette macro est valable pour toutes tes feuilles (test...)
VB:
Sub ImpressionModulé()
'patricktoulon (solution sur pc (2))
    Dim cel As Range, Plage As Range, hp&
    With ActiveSheet
        Set Plage = .UsedRange.Resize(, 13)    'on s'arrête a "M"
       
        'le minimum pour le page setup
        With .PageSetup
            .PrintArea = Plage.Address
            .PaperSize = xlPaperA4...

Dudu2

XLDnaute Barbatruc
Bonjour,
1712927717856.png
 

patricktoulon

XLDnaute Barbatruc
bonjour
rien de plus simple
tu détermine la plage utilisées (tu veux l'arrêter a "M" visiblement)
ensuite te reste plus qu'a déplacer les sauts de pages
on vire les marge les header et tout y cointi
bref le pagesetup on fait le minimum
et voila terminé tes tableaux seront chacun dans une page
même si ils n'auront pas la même dimension
et cette macro est valable pour toutes tes feuilles (test...)
VB:
Sub ImpressionModulé()
'patricktoulon (solution sur pc (2))
    Dim cel As Range, Plage As Range, hp&
    With ActiveSheet
        Set Plage = .UsedRange.Resize(, 13)    'on s'arrête a "M"
       
        'le minimum pour le page setup
        With .PageSetup
            .PrintArea = Plage.Address
            .PaperSize = xlPaperA4
            .LeftMargin = 0
            .RightMargin = 0
            .TopMargin = 0
            .BottomMargin = 0
            .HeaderMargin = 0
            .FooterMargin = 0
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
        End With
        DoEvents
       
        'on déplace les sauts de pages au niveau des cellules fusionnées (titre de tableau)
        For Each cel In Plage.Columns(1).Cells
            If cel.MergeCells = True And cel.Row > 2 Then
                hp = hp + 1: Set .HPageBreaks(hp).Location = cel
            End If
        Next
        .PrintPreview
    End With
End Sub

et si tu veux les faires toutes sauf bien évidemment la feuille "x"

Code:
Sub GoPrintAll()
    Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.Name <> "x" Then
            sh.Activate: ImpressionModulé
        End If
    Next
End Sub

voila te reste plus qu'a remplacer "printpreview" par "printout" pour imprimer vraiment
;)
demo.gif
 
Dernière édition:

don julio

XLDnaute Nouveau
bonjour
rien de plus simple
tu détermine la plage utilisées (tu veux l'arrêter a "M" visiblement)
ensuite te reste plus qu'a déplacer les sauts de pages
on vire les marge les header et tout y cointi
bref le pagesetup on fait le minimum
et voila terminé tes tableaux seront chacun dans une page
même si ils n'auront pas la même dimension
et cette macro est valable pour toutes tes feuilles (test...)
VB:
Sub ImpressionModulé()
'patricktoulon (solution sur pc (2))
    Dim cel As Range, Plage As Range, hp&
    With ActiveSheet
        Set Plage = .UsedRange.Resize(, 13)    'on s'arrête a "M"
      
        'le minimum pour le page setup
        With .PageSetup
            .PrintArea = Plage.Address
            .PaperSize = xlPaperA4
            .LeftMargin = 0
            .RightMargin = 0
            .TopMargin = 0
            .BottomMargin = 0
            .HeaderMargin = 0
            .FooterMargin = 0
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlLandscape
        End With
        DoEvents
      
        'on déplace les sauts de pages au niveau des cellules fusionnées (titre de tableau)
        For Each cel In Plage.Columns(1).Cells
            If cel.MergeCells = True And cel.Row > 2 Then
                hp = hp + 1: Set .HPageBreaks(hp).Location = cel
            End If
        Next
        .PrintPreview
    End With
End Sub

et si tu veux les faires toutes sauf bien évidemment la feuille "x"

Code:
Sub GoPrintAll()
    Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.Name <> "x" Then
            sh.Activate: ImpressionModulé
        End If
    Next
End Sub

voila te reste plus qu'a remplacer "printpreview" par "printout" pour imprimer vraiment
;)
Regarde la pièce jointe 1194953
Au top merci beaucoup !!!!
Bonne journée!
 

Discussions similaires

Statistiques des forums

Discussions
313 258
Messages
2 096 614
Membres
106 685
dernier inscrit
phob