Découper une feuille Excel en plusieurs pages par VBA

Bonjour à Tous,

Je fais un programme d'impression de plusieurs feuilles excel avec chacune des feuilles segmentées en plusieurs pages( je définis moi même les zones d'impression).

Mon sujet concerne spécialement l'affichage c'est pourquoi je ne mettrai pas de code d'impression.

Venons donc au fait: je souhaite segmenter un onglet en plusieurs pages avec chacune des pages ayant des propriétés ( zoom...) différentes.

J'ai exploré rapidement quelques forums mais aucun ne convient à mon cas de figure. J'ai donc décidé d'attribuer des noms à mes plages (mes "pages" à imprimer donc, dans formules: page1 (A1:P30) , page2 (A31: P60) ) pour ensuite les définir dans des propriétés PageSetup comme étant des : Range

.PageSetup.PrintArea = "page1" par exemple.

Mais le code reste bloqué sur la dernière plage selectionée (ici page2) comme étant la seule plage à imprimer ( il ne conserve plus la page1).

Vous avez ci-dessous mon code, je n'ai pas réussi à importer le fichier :

Option Explicit

Sub essai()
Dim page1, page2 As Range

'ActiveSheet.DisplayAutomaticPageBreaks = False

ThisWorkbook.Sheets("test").Select

With Sheets("test")
    .Activate
    .ResetAllPageBreaks
    .PageSetup.PrintArea = "page1"
    .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
End With
With ActiveSheet.PageSetup
   .Zoom = 400
   .PrintQuality = 600
End With

With Sheets("test")
    .Activate
    .ResetAllPageBreaks
    .PageSetup.PrintArea = "page2"
    .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
End With
With ActiveSheet.PageSetup
   .Zoom = 200
   .PrintQuality = 600
End With

ThisWorkbook.Sheets("test").PrintPreview

End Sub

Merci de votre aide.

Cordialement,

Bonjour

Ton problème me semble logique !!!!

première partie du code : pour la plage1

With Sheets("test")
    .Activate
    .ResetAllPageBreaks
    .PageSetup.PrintArea = "page1"
    .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
End With
With ActiveSheet.PageSetup
   .Zoom = 400
   .PrintQuality = 600
End With

et pour la plage 2 :

With Sheets("test")
    .Activate
    .ResetAllPageBreaks
    .PageSetup.PrintArea = "page2"
    .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
End With
With ActiveSheet.PageSetup
   .Zoom = 200
   .PrintQuality = 600
End With

ThisWorkbook.Sheets("test").PrintPreview

Quelle est la différence ???

ceci :

ThisWorkbook.Sheets("test").PrintPreview

comme tu ne le fais qu'une seule fois... il est normal que page1 ne soit pas traité à l'impression...

comme si tu faisais "à la main"

je définis une zone d'impression plage1

puis je définis une zone d'impression plage2 donc la plage précédemment définit n'est plus dans la zone d'impression

et je fais ensuite aperçu avant impression... c'est donc comme si tu n'as rien fait avec plage1...

Fred

Bonjour Fred,

Merci pour ton retour. C'est la première fois que j'intègre un forum pour développeur...

Je vois qu'en rajoutant l'option PrintPreview à la première partie, cela sélectionne les deux pages. OK. Toutefois, il me crée par la suite deux pdf au lieu d'un seul.

Aussi, je remarque qu'une fois que le programme lit ce code, il me refait des sauts de pages alors que j'avais supprimé les sauts de pages, dans mes plages dans mes boucles with.

J'ai réussi à importer le fichier excel avec le code dans le "module 1". Peux-tu regarder s'il te plaît ? Merci par avance.

Vanessa.

6classeur2.xlsm (22.94 Ko)

Bonjour....

Je suis un peu occuper pour le moment... je regarde cela ce soir...

Fred

Re Bonjour

Ce que je propose c'est :

on définit la zone d'impression sur A1 P60,

on fixe l'impression à 1 page en largeur et 2 pages en hauteur.

on place le saut de page à la ligne 30..

Voir le fichier joint

25classeur2.xlsm (21.60 Ko)

Fred

Bonjour Fred,

Merci pour ton retour. En effet, ta proposition est la meilleure pour ce que je souhaite faire.

J'ai testé ton code mais j'ai toujours un saut de page en largeur du coup j'ai rajouté ce bout de code :

ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1

pour que ça me donne le résultat attendu. Donc au final je retiens ce code:

Sub Imprime_en_deux_pages()

ThisWorkbook.Sheets("test").Activate
    Sheets("test").ResetAllPageBreaks
With Sheets("test").PageSetup
    .FitToPagesWide = 1 '1 page en largeur
    .FitToPagesTall = 2 '2 pages en hauteur
    .PrintArea = "A1:P60" 'définit la zone d'impression
End With
    'fixe le saut de page à la ligne 30
    Set ActiveSheet.HPageBreaks(1).Location = Range("A31")

    ActiveSheet.VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1

'ThisWorkbook.Sheets("test").PrintPreview

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True

End Sub

Et ça marche bien ! Merci pour ton aide ! .........Peut-être à la prochaine car j'ai un autre sujet à soumettre sous peu...

Bonne journée !!!

Vanessa.

Bonjour ....

Dans ce cas...

Fred

Rechercher des sujets similaires à "decouper feuille pages vba"