Impression de plage de cellule défini en recto-verso.
yulione
Messages postés
58
Date d'inscription
Statut
Membre
Dernière intervention
-
yulione Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
yulione Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Impression de plage de cellule défini en recto-verso.
- Spouleur d'impression - Guide
- Comment imprimer en livret recto-verso word - Guide
- Image de manchots sur une image de plage. - Forum Graphisme
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? ✓ - Forum Windows
- Excel cellule couleur si condition texte - Guide
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.