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 Sub

Je 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

9excel-pratique.xlsm (147.48 Ko)

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 Sub

Si 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.
Cas élémentaire : une procédure Function : Function MaFonction() se termine avant le End Function par : MaFonction = résultat. On récupère ce résultat dans une autre procédure par : x = MaFonction() par exemple...

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 ! Et à éliminer tous les Select, Selection, Activate, etc. éventuels qui ne reproduisent que les mouvements manuels et n'ont pas d'autre utilité...

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

Rechercher des sujets similaires à "mise page impression"