Impression de plage de cellule défini en recto-verso.

Fermé
yulione Messages postés 39 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 27 octobre 2019 - 30 sept. 2015 à 14:42
yulione Messages postés 39 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 27 octobre 2019 - 2 oct. 2015 à 12:40
Bonjour à tous, je sollicite à nouveau votre aide.

Mon problème du jour est de l'impression par VBA, mais pas tout à fait classique.

Je m'explique. j'ai un woorkbook, avec plusieurs onglet (variable) représentant chacun une étude clinique. le fichier arrive rapidement à 50 onglets.

Dans chacun de ces onglets, j'ai un tableau qui fait entre 40 et 100 lignes, trop long pour une page A4 (et je ne veux pas de A3). J'ai donc un code qui sélectionne la moitié supérieur de mon tableau et qui lance une impression, puis qui recommence avec la seconde moitié inférieur du tableau, le tout adapté à une feuille A4 pour ne pas déborder ou prendre sur une autre feuille.
Seulement voila, faisant cela, il envoi deux impressions séparées, qui sont donc imprimées chacune sur une page différente, sans recto-verso (et en plus cette façon de faire est beaucoup plus longue à l'exécution).

Ayant une âme écologiste et ne souhaitant pas griller le budget de l'entreprise en feuille, j'aimerai que les deux moitiés de mon tableau soient imprimé sur le recto-verso d'une même feuille.

voici le code en question :



Private Sub CommandButton4_Click()
Dim i As Integer
Dim lignen As Integer
Dim lignefin As Integer
Dim nometude As String
Dim nbligne As Integer
Dim nbetude As Integer
Dim colmax As Integer


Application.ScreenUpdating = False

nbetude = Application.WorksheetFunction.CountA(Sheets("ind. études").Range("A:A"))
colmax = Application.WorksheetFunction.CountA(Sheets("ind. études").Range("2:2"))

With Sheets("ind. générals").PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = "Compte-rendu promoteur"
.CenterFooter = Format(Date, "dd/mm/yyyy")
.RightFooter = nometude
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.4)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With

With Sheets("ind. générals")
.Activate
.Range(.Cells(1, 1), .Cells(16, 12)).Select
Selection.PrintOut Copies:=1, Collate:=True

End With



With Sheets("ind. études").PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = "Compte-rendu promoteur"
.CenterFooter = Format(Date, "dd/mm/yyyy")
.RightFooter = nometude
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.4)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With

With Sheets("ind. études")
.Activate

If nbetude < 20 Then
.Range(.Cells(1, 1), .Cells(nbetude, colmax)).Select
Selection.PrintOut Copies:=1, Collate:=True
Else
.Range(.Cells(1, 1), .Cells(nbetude / 2, colmax)).Select
Selection.PrintOut Copies:=1, Collate:=True
.Range(.Cells(nbetude / 2 + 1, 1), .Cells(nbetude, colmax)).Select
Selection.PrintOut Copies:=1, Collate:=True
End If
End With


For i = 3 To nbetude
nometude = Sheets("ind. études").Cells(i, 1).Value


With Sheets(nometude).PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = "Compte-rendu promoteur"
.CenterFooter = Format(Date, "dd/mm/yyyy")
.RightFooter = nometude
.LeftMargin = Application.InchesToPoints(0.3)
.RightMargin = Application.InchesToPoints(0.3)
.TopMargin = Application.InchesToPoints(0.3)
.BottomMargin = Application.InchesToPoints(0.5)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.4)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = xlPrintErrorsDisplayed
End With

With Sheets(nometude)
.Activate
lignen = CInt(.Range("A:A").Find("N°", , xlValues).Row)
lignefin = CInt(.Range("A:A").Find("Fin", , xlValues).Row)
nbligne = Application.WorksheetFunction.CountA(.Range("J:J"))
.Range(.Cells(1, 1), .Cells(lignen - 2, 8)).Select
Selection.PrintOut Copies:=1, Collate:=True
.Range(.Cells(lignen - 1, 1), .Cells(lignefin, 8)).Select
Selection.PrintOut Copies:=1, Collate:=True
End With

With Sheets(nometude).PageSetup
.Orientation = xlLandscape
End With

With Sheets(nometude)
.Activate
.Range(.Cells(1, 10), .Cells(nbligne + 1, 27)).Select
Selection.PrintOut Copies:=1, Collate:=True
End With
Next i

Application.ScreenUpdating = True
End Sub



Je ne peux malheureusement pas vous transmettre le fichier car des informations confidentiel sont à l'intérieur.

Avis aux personnes qui en savent plus long que moi et merci a vous.
A voir également:

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
30 sept. 2015 à 15:02
Bonjour,

Essayez avec un saut de page plutot que deux impressions et le recto-verso est a parametrer au niveau de l'imprimante pas de ce qui est a imprimer
0
yulione Messages postés 39 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 27 octobre 2019
2 oct. 2015 à 11:47
Bonjour.

j'avais déjà essayé cette idée sans arriver à un résultat satisfaisant. je n'ai peut-être pas poussé mes recherches assez loin cependant... le problème c'est que jusqu'à maintenant, le saut de page fonctionnait bien, mais l'ajustement à la page ne fonctionnait pas, ce qui fait que j'avais toujours un bout de tableau sur une page supplémentaire...
je vais réessayer.
0
yulione Messages postés 39 Date d'inscription mardi 25 février 2014 Statut Membre Dernière intervention 27 octobre 2019
2 oct. 2015 à 12:40
Ce n'est franchement pas très pratique je trouve. Il se trouve que les sauts de page ne sont pas utilisable lorsque l'on ajuste automatiquement la taille du tableau à la feuille. J'ai donc effectivement plusieurs feuilles...or je veux que mes 2 parties de tableau, avant et après le saut de page, soit dimensionnée pour entré dans une feuille A4... ce qui ne fonctionne pas...
0