Imprimer une plage sur le recto et une autre sur le verso

Chris57

XLDnaute Occasionnel
Bonjour à tous

j'ai un fichier contenant 2 plages qui se suivent (la première est B4:O62 et la seconde B63:0121)
Je dois imprimer ce document en recto verso, l'imprimante étant prévue pour.

Le problème est que certains utilisateurs modifient la hauteur de certaine lignes, ce qui modifie la plage de la page 1.

Je voudrais figer ces plages par macro.

J'ai tenté un système par saut de page :
Code:
    ActiveSheet.PageSetup.PrintArea = "$B$4:$O$121"
    ActiveSheet.ResetAllPageBreaks
    Set ActiveSheet.HPageBreaks(1).Location = Range("B63")
    Set ActiveSheet.VPageBreaks(1).Location = Range("P121")

mais ça me fait une erreur dans la dernière ligne
En fait lorsqu'il fait le HPageBreaks il modifie automatiquement le zoom de l'impression !


PS : la macro concernée est lancée par le bouton rouge en haut "REFAIRE MISE EN PAGE"
 

Pièces jointes

  • Rapport_simplifié.zip
    291.8 KB · Affichages: 55

job75

XLDnaute Barbatruc
Re : Imprimer une plage sur le recto et une autre sur le verso

Bonjour Chris57,

Pas besoin de sauts de page :

Code:
Sub Imprimer()
With ActiveSheet.PageSetup
  .FitToPagesWide = 1
  .FitToPagesTall = 1
  .PrintTitleRows = "$4:$6" 'en-tête
  .PrintArea = "$B$4:$O$62"
  ActiveSheet.PrintOut
  MsgBox "Retournez la feuille avant d'appuyer sur OK..."
  .PrintArea = "$B$63:$O$121"
  ActiveSheet.PrintOut
End With
End Sub
La MsgBox donne le temps de retourner la feuille.

A+
 

job75

XLDnaute Barbatruc
Re : Imprimer une plage sur le recto et une autre sur le verso

Bonjour Chris57, le forum,

En effet il faut un saut de page :

Code:
Sub Imprimer()
Dim z As Integer
ActiveSheet.ResetAllPageBreaks
ActiveSheet.HPageBreaks.Add Rows(63) 'saut de page
With ActiveSheet.PageSetup
  .PrintTitleRows = "$4:$6" 'en-tête
  For z = 100 To 10 Step -1
    .PrintArea = "$B$4:$O$121"
    .Zoom = z
    If ExecuteExcel4Macro("GET.DOCUMENT(50)") = 2 Then Exit For
  Next
  ActiveSheet.PrintOut
End With
End Sub
La fonction macro Excel 4.0 GET.DOCUMENT(50) renvoie le nombre de pages à imprimer.

A+
 

job75

XLDnaute Barbatruc
Re : Imprimer une plage sur le recto et une autre sur le verso

Re,

Une variante sans doute meilleure :

Code:
Sub Imprimer()
Dim z As Integer
With Feuil1 'CodeName, à adapter
  .ResetAllPageBreaks
  .HPageBreaks.Add Rows(63) 'saut de page
  With .PageSetup
    .PrintTitleRows = "$4:$6" 'en-tête
    For z = 100 To 10 Step -1
      .PrintArea = "$B$4:$O$121"
      .Zoom = z
      If .Parent.HPageBreaks.Count = 1 Then Exit For
    Next
  End With
  .PrintOut 'impression
End With
End Sub
A+
 

Chris57

XLDnaute Occasionnel
Re : Imprimer une plage sur le recto et une autre sur le verso

ça a l'air de coller !!

merci !!!!!!!!!!!


par contre je pige pas la boucle avec le zoom. ça sert à quoi ???


[EDIT] non ça ne marche pas finalement. A la réouverture du classeur la mise en page est corrompue après ta macro.
Il semble qu'il n'arrive pas à trouver le bon zoom. Il devrait être dans le cas actuel à 60% et il se met tout seul à 65%
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 071
Membres
103 110
dernier inscrit
Privé