XL 2010 Editer en pdf dernière page Sans "les lignes à répéter du haut"

cathodique

XLDnaute Barbatruc
Bonjour:),

Une feuille à éditer en PDF (ou imprimer ), sur laquelle une entête à reproduire sur toutes les pages sauf la dernière qui contient un petit encadré.
Je parvins à gérer les sauts de page mais je n'ai aucune idée pour ne pas imprimer l’entête sur la dernière page.
VB:
Option Explicit
Sub mep()
    Dim dl As Long, col As Byte, HPage As Integer, VPage As Byte, x As Integer
    ActiveWindow.View = xlPageBreakPreview

    With ActiveSheet
        dl = .UsedRange.Rows.Count
        .ResetAllPageBreaks
        .PageSetup.PrintArea = "A1:k" & dl
        .PageSetup.PrintTitleRows = "$1:$4"
        HPage = .HPageBreaks.Count
        VPage = .VPageBreaks.Count
      
        If VPage >= 1 Then .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
      
        If HPage >= 1 Then
            For x = dl To 1 Step -1
                If .Cells(x, 9).Borders(xlEdgeTop).LineStyle = xlContinuous Then
                    .HPageBreaks.Add Before:=Range("A" & x - 1)
                    Exit For
                End If
            Next x
        End If
    End With
    ActiveWindow.View = xlNormalView
End Sub
Merci pour votre aide.
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour Cathodique, le forum

Essaye quelque chose comme ça : (non testé)

VB:
   With ActiveSheet
        dl = .UsedRange.Rows.Count
        .ResetAllPageBreaks
        .PageSetup.PrintArea = "A1:k" & dl
        .PageSetup.PrintTitleRows = "$1:$4"
        HPage = .HPageBreaks.Count
        VPage = .VPageBreaks.Count

'********'
'Ici la modif
        ActiveSheet.PrintOut from:=1, To:=dl - 1 'On imprime tout jusqu'à l'avant dernière page

        .PrintTitleRows = ""  'on enlève les entêtes
        ActiveSheet.PrintOut from:=dl, To:=dl    'On imprime la dernière page

'*******'       
'Le reste de ton code .......

@Phil69970
 

cathodique

XLDnaute Barbatruc
Bonjour Cathodique, le forum

Essaye quelque chose comme ça : (non testé)

VB:
   With ActiveSheet
        dl = .UsedRange.Rows.Count
        .ResetAllPageBreaks
        .PageSetup.PrintArea = "A1:k" & dl
        .PageSetup.PrintTitleRows = "$1:$4"
        HPage = .HPageBreaks.Count
        VPage = .VPageBreaks.Count

'********'
'Ici la modif
        ActiveSheet.PrintOut from:=1, To:=dl - 1 'On imprime tout jusqu'à l'avant dernière page

        .PrintTitleRows = ""  'on enlève les entêtes
        ActiveSheet.PrintOut from:=dl, To:=dl    'On imprime la dernière page

'*******'     
'Le reste de ton code .......

@Phil69970
Bonjour Phil;),

Merci pour ton retour. Sans tester ta proposition ne fonctionnera pas. Car dl représente le nombre de lignes et non pas le nombre de pages.
ActiveSheet.PrintOut from:=1, To:=dl - 1 'avec cette ligne j'aurai beaucoup de feuilles vides

En fait faudrait que l'on puisse soit éditer (enregistrer), soit imprimer en pdf.
Je te remercie beaucoup, je vais quand même tester ta proposition.

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
bonjour @cathodique , @Phil69970
j'ai pas testé mais ceci me parait logique
VB:
With ActiveSheet
    'dl = .UsedRange.Rows.Count    'Attention c'est pas bon si le usedrange ne commence pas en ligne 1
    dl = .UsedRange.Cells(.UsedRange.Cells.Count).Row    'Là on est sur dans tout les cas !!!!

    .PageSetup.PrintArea = "A1:k" & dl
    '
    'ton arrangement ici
    '
    'on compte le nombre de pages
    NbPages = (.HPageBreaks.Count + 1) * (.VPageBreaks.Count + 1)
  
    'impression des pages (le count-1)
    .PageSetup.PrintTitleRows = "$1:$4"
    ActiveSheet.PrintOut from:=1, To:=NbPages - 1    'On imprime tout jusqu'à l'avant dernière page

    'impression de la dernière page
    .PageSetup.PrintTitleRows = ""  'on enlève les entêtes
    ActiveSheet.PrintOut from:=NbPages, To:=NbPages    'On imprime la dernière page

End With

j'ai juste un doute sur le printarea
si les lignes 1 à 4 sont les entêtes;comment ton print area peut commencer en "A1"???
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
ok testé on est bons
j'ai donc raison
Alors Attention !!!!!!!le print area ne doit pas contenir les ligne de l'entete
vue du resultat:
demo8.gif


Attention aussi!!!
je ne sais pas quelle imprimante virtuelle PDF tu utilise
mais par exemple moi j'utilise bullzip
et il faut cocher "Ajouter au document si existant " dans la fenêtre de l'imprimante qui s'affiche

faudrait voir comment on peut faire avec saves As pdf
 
Dernière édition:

cathodique

XLDnaute Barbatruc
bonjour @cathodique , @Phil69970
j'ai pas testé mais ceci me parait logique
VB:
With ActiveSheet
    'dl = .UsedRange.Rows.Count    'Attention c'est pas bon si le usedrange ne commence pas en ligne 1
    dl = .UsedRange.Cells(.UsedRange.Cells.Count).Row    'Là on est sur dans tout les cas !!!!

    .PageSetup.PrintArea = "A1:k" & dl
    '
    'ton arrangement ici
    '
    'on compte le nombre de pages
    NbPages = (.HPageBreaks.Count + 1) * (.VPageBreaks.Count + 1)
 
    'impression des pages (le count-1)
    .PageSetup.PrintTitleRows = "$1:$4"
    ActiveSheet.PrintOut from:=1, To:=NbPages - 1    'On imprime tout jusqu'à l'avant dernière page

    'impression de la dernière page
    .PageSetup.PrintTitleRows = ""  'on enlève les entêtes
    ActiveSheet.PrintOut from:=NbPages, To:=NbPages    'On imprime la dernière page

End With

j'ai juste un doute sur le printarea
si les lignes 1 à 4 sont les entêtes;comment ton print area peut commencer en "A1"???
Bonjour PatrickToulon ;),

Tu es matinal pour un week-end. Merci beaucoup, je viens de tester et ça fonctionne très bien pour l'impression. Pour "PrintAera", j'ai utilisé en fait l'enregistreur de macro.

En te remerciant encore et pas assez. Mais comment faire pour créer un PDF. N'ayant pas d'imprimante à portée de main, j'ai utilisé l'imprimante virtuelle Microsoft XPS. Or, à l’exécution du code, j'ai 2 messages pour l'enregistrement. Et donc, saisir à 2 reprises le nom du fichier. Franchement, je ne vois pas comment faire pour créer un seul PDF. Aurais-tu une astuce dans ton sac à archive?☺️

Bonne journée.
 

cathodique

XLDnaute Barbatruc
re
ok testé on est bons
j'ai donc raison
Alors Attention !!!!!!!le print area ne doit pas contenir les ligne de l'entete
vue du resultat:
Regarde la pièce jointe 1093512


Attention aussi!!!
je ne sais pas quelle imprimante virtuelle PDF tu utilise
mais par exemple moi j'utilise bullzip
et il faut cocher "Ajouter au document si existant " dans la fenêtre de l'imprimante qui s'affiche

faudrait voir comment on peut faire avec saves As pdf
Ok, merci. C'est noté.
 

patricktoulon

XLDnaute Barbatruc
re
Phil69970 oui
VB:
'on compte le nombre de pages
  with activesheet
  NbPages = (.HPageBreaks.Count + 1) * (.VPageBreaks.Count + 1)
end with

et attention a l'utilisation de usedrange.rows.count pour determiner la fin de page
c'est pas bon
d'une part par ce que justement on a une partie en haut de feuille qui va servir d'entete
et secondo même si ça n’était pas le cas( pas d’entête) si le usedrange commence pas en ligne 1 on a un mauvais nombre de ligne forcement

donc en l'occurence dans cet exercice tel que le presente cathodique
le print area sera
Code:
with activesheet
dl = .UsedRange.Cells(.UsedRange.Cells.Count).Row    'Là on est sur!!!!
     .PageSetup.PrintArea = "A5:K" & dl
end with

je regarde aussi si on peut faire avec save As aussi normalement tout le monde l'a (pour 2007 il existe le complément) si on l'a pas
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ok tu a donc save As pdf mais j'ai regardé je suis pas sur que l'on puisse shunter l'entete sur la derniere page
j'ai regarder aussi l'imprimante virtuelle pdf de W10 (disponible pour W7 sous le nom de 'PDF pro virtual printer) sur la version gratuite les option sont disabled donc pas bon

c'est pas pour faire de la pub mais
le seul gratuiciel pdf printer que je connaisse (avec les options enabled) c' est bullzip


perso j'ail' install en version BullzipPDFPrinter_7_2_0_1304.exe
aujourd'hui dispo en version 10........

c'est un outils très puissant il peut compiler dé compiler des pdf et tout plein de chose et c'est une imprimante virtuelle pdf en même temps

en parallèle je fait toujours des recherche avec Save As voir si c'est possible de faire


demo8.gif
 

cathodique

XLDnaute Barbatruc
ok tu a donc save As pdf mais j'ai regardé je suis pas sur que l'on puisse shunter l'entete sur la derniere page
j'ai regarder aussi l'imprimante virtuelle pdf de W10 (disponible pour W7 sous le nom de 'PDF pro virtual printer) sur la version gratuite les option sont disabled donc pas bon

c'est pas pour faire de la pub mais
le seul gratuiciel pdf printer que je connaisse (avec les options enabled) c' est bullzip


perso j'ail' install en version BullzipPDFPrinter_7_2_0_1304.exe
aujourd'hui dispo en version 10........

c'est un outils très puissant il peut compiler dé compiler des pdf et tout plein de chose et c'est une imprimante virtuelle pdf en même temps

en parallèle je fait toujours des recherche avec Save As voir si c'est possible de faire


Regarde la pièce jointe 1093519
Merci beaucoup pour le lien. Je t'avoue que je préfère utiliser le 'Save As' PDF de Windows.
 

Statistiques des forums

Discussions
312 228
Messages
2 086 417
Membres
103 204
dernier inscrit
alaa20dine01