Mise en page impression
Bonsoir à tous,
J'ai un petit problème pour sélectionner ma zone d'impression,
Voici le code enregistrer en manuel
Sub Macro5()
'
Range(A1).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
End SubJe joins un fichier exemple.
l'utilisateur n'imprimera que l'onglet sélectionné, avec la page en état ( colonnes éventuellement masquée, ligne filtré ect...)
Je pense d’ailleurs à un deuxième problème, si le nombre de ligne dépasse 1 page j'aimerai que le titre ( selection de A1/ à XXX10) puisse se reporter sur les pages suivantes.
Je reste à votre disposition pour toutes questions,
Edlede
Bonsoir,
La zone d'impression se définit par la propriété PrintArea de l'objet PageSetup. Il convient de lui indiquer l'adresse de la plage de cellule à imprimer.
De même pour les lignes à répéter, avec la propriété PrintTitleRows.
Cordialement.
Ok merci pour le PrintTitleRows.
Mais je n'arrive pas à lui faire reporter les entêtes de colonnes de manière dynamique :
Voici mon code complet les problèmes commencent dans la partie TWO qui correspond à l'impression de mon fichier joins
j'ai du faire une erreur de base mais je ne comprend pas ou :
Function Fiche_de_vie_classeur()
Dim Y, y1, y2, y3, y4, y5, y6, reponse, titreCo
With ActiveSheet
y1 = Left(.Name, 8) = "Synthese"
y2 = Left(.Name, 1) = "_"
y3 = Left(.Name, 6) = "Modele"
y4 = Left(.Name, 3) = "CAL"
y5 = Left(.Name, 9) = "Bienvenue"
y6 = Left(.Name, 3) = "Sources"
Y = y1 Or y2 Or y3 Or y4 Or y5 Or y6
If Y Then
If Left(.Name, 8) = "Synthese" Then GoTo TWO
End If
If Not Y Then
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = "A1:H56"
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.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 = 0
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
End With
Application.PrintCommunication = True
reponse = MsgBox("Etes-vous sur de vouloir imprimer ?", vbYesNo, "Demande de confirmation")
If reponse = vbYes Then
ActiveSheet.PrintOut ActivePrinter:=Application.Dialogs(xlDialogPrinterSetup).Show
ElseIf reponse = vbNo Then
End If
GoTo FIN
TWO:
With ActiveSheet.PageSetup
.PrintTitleRows = titreCo
.PrintTitleColumns = ""
End With
Application.PrintCommunication = True
ActiveSheet.PageSetup.PrintArea = ""
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.25)
.RightMargin = Application.InchesToPoints(0.25)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 0
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
End With
Application.PrintCommunication = True
reponse = MsgBox("Etes-vous sur de vouloir imprimer ?", vbYesNo, "Demande de confirmation")
If reponse = vbYes Then
ActiveSheet.PrintOut ActivePrinter:=Application.Dialogs(xlDialogPrinterSetup).Show
ElseIf reponse = vbNo Then
End If
FIN:
End If
End With
End Function
Sub titreCo()
With ActiveSheet
Range("A10").Select
Range(selection, selection.End(xlToRight)).Select
End With
End SubSi vous avez des idées Merci
Code bizarre !
Une Function qui ne renvoie pas de résultat, et une Sub censée en renvoyer un (ça a-priori un peu problématique) !
Si cela te suffit, tant mieux ! Je n'ai aucune envie de travailler sur du code enregistré non épuré (mal indenté de surcroît) et bâti en partie sur des sélections...
Mon problème est justement de sélectionner l’entête des colonnes de manière automatique, j'ai tenté avec des selections mais ca ne marche pas.
d'après tes explications je devrai définir mes entêtes sur ce morceau de code
TWO:
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
Mais ma selection des entêtes de colonne varie pour chaque onglet, et j'aimerai la rendre dynamique.
Y a til un moyen pour cela?
j'ai une autre question, est il possible de définir 2 printarea pour une une impression sur une seule feuille ?
Merci
Bonjour,
Je crois avoir écrit :
Une Function qui ne renvoie pas de résultat, et une Sub censée en renvoyer un (ça a-priori un peu problématique) !J'ai appris au tout début, entre autres choses que :
- une procédure Function, s'exécute et renvoie un résultat,
- une procédure Sub, sexécute et ne renvoie rien.
Il t'appartient de te pencher sur ton code pour voir en quoi ces notions lui sont directement applicables.
Après : épurer un code enregistré, cela consiste à éliminer toutes les propriétés auxquelles on ne touche pas et qui demeurent à leur valeur par défaut, mais que l'enregistreur reproduit de bout en bout gaillardement !
Mais c'est une autre question...
Cordialement.
La réponse est finalement très simple pour sélectionner l'ensemble de mes entêtes, de la ligne 10 il suffit de mettre
.PrintTitleRows = "$10:$10"Et rien de plus il récupère l'ensemble des entêtes jusqu’à la premiere cellule vide.
Merci pour les explications