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 SubMerci 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 Withet 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").PrintPreviewQuelle est la différence ???
ceci :
ThisWorkbook.Sheets("test").PrintPreviewcomme 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
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.
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
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:=1pour 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 SubEt ç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