Pied de page variable

Bonjour,

Je souhaite ajouter à mon document un pied de page (ou un en-tête) variable, c'est à dire que pour chaque page il affiche le premier et le dernier mot du tableau de la page (dans l'idée: faire comme un dictionnaire où en haut de la page on voit le premier et le dernier mot de la page).

Sauriez-vous m'aider?

D'avance merci.

Bonjour. Bienvenue sur le forum

Merci de joindre lors de tes futures demandes, un fichier Excel en exemple de ce que tu souhaites.

Un exemple de Code pour insérer en entête le contenu de A1 et L20 de chaque Feuille du classeur

Code dans un Module

Option Explicit
 Sub Entetes()
Dim Ws As Worksheet
Application.ScreenUpdating = False
 For Each Ws In Worksheets
     Ws.Select
ActiveSheet.PageSetup.CenterHeader = Range("A1").Value & " " & Range("L20").Value
 Next Ws
End Sub

Cordialement

Tout d'abord merci.

Mais est-il possible que l'en-tête soit différent pour chaque page du fichier (c'est un bloc, pas des feuilles).

Du principe:

Si numero_page == 1 { afficher dans l'en-tête les cellules A1 et L20 }

Ou Si numero_page == 2 { la suite }

Ou Si numero_page == 3 { la suite }

etc

(Je n'ai pas de fichier explicite, qui soit clair )

Bonjour

Tu peux définir pour chaque Feuille

Sub Entetes()
Application.ScreenUpdating = False
 Sheets("Feuil1").Activate
ActiveSheet.PageSetup.CenterHeader = Range("A1").Value & " " & Range("L20").Value
 Sheets("Feuil2").Activate
ActiveSheet.PageSetup.CenterHeader = Range("A6").Value & " " & Range("L25").Value
 Sheets("Feuil3").Activate
ActiveSheet.PageSetup.CenterHeader = Range("B2").Value & " " & Range("J16").Value
End Sub

Cordialement

Et si l'on utilise pas de feuilles?

Bonjour

Et si l'on utilise pas de feuilles?

On n'a plus de problème à règler puisqu'on n'a plus de pied de page, ni d'entête!

Cordialement

Ce que je veux dire, c'est que je n'utilise pas de feuilles. Mon fichier est composé de plusieurs pages qui se suivent, mais je n'utilise pas de feuilles. Or si j'ai bien compris ta solution, il faut qu'il y ai des feuilles non?

Bonjour

Je commençais à sombrer dans l'humour...

Le quiproquo est limpide et non signalé au premier exemple.

Si personne ne se penche sur ton sujet, je m'y remettrai..voir si..

Cordialement

Merci, et d'avance encore merci.

Bonjour,

Ce code devrait répondre à ta demande :

Sub ImprPageSetupPerso()
   Dim rPremCell As Range, rDernCell As Range
   Dim LigDeb As Long, LigFin As Long, ColDeb As Long, ColFin As Long
   Dim l As Long, c As Long, Sh As Worksheet, lPage As Long

   Set Sh = ActiveSheet

   Sh.PageSetup.OddAndEvenPagesHeaderFooter = False ' Pied de page différent pour la première page
  Sh.PageSetup.DifferentFirstPageHeaderFooter = False ' Pide de page différent entre les pages paires et impaires
  Set rPremCell = Sh.Range(Split(Sh.PageSetup.PrintArea, ":")(0)) ' Première cellule de la zone d'impression
  Set rDernCell = Sh.Range(Split(Sh.PageSetup.PrintArea, ":")(1)) ' Dernière cellule de la zone d'impression

   Select Case ActiveSheet.PageSetup.Order
      Case xlDownThenOver ' Impression vers le bas puis la droite
        For c = 1 To Sh.VPageBreaks.Count + 1
            If c = 1 Then ColDeb = rPremCell.Column Else ColDeb = Sh.VPageBreaks(c - 1).Location.Column ' Colonne de début de la page
           If c = Sh.VPageBreaks.Count + 1 Then ColFin = rDernCell.Column Else ColFin = Sh.VPageBreaks(c).Location.Offset(0, -1).Column ' Colonne de fin de la page
           For l = 1 To Sh.HPageBreaks.Count + 1
               If l = 1 Then LigDeb = rPremCell.Row Else LigDeb = Sh.HPageBreaks(l - 1).Location.Row ' Ligne de début de page
              If l = Sh.HPageBreaks.Count + 1 Then LigFin = rDernCell.Row Else LigFin = Sh.HPageBreaks(l).Location.Offset(-1, 0).Row ' Ligne de fin de page
              lPage = lPage + 1
              ' Ligne à personnaliser en fonction de tes besoins
               Sh.PageSetup.LeftFooter = "De " & Sh.Cells(LigDeb, ColDeb) & " à " & Sh.Cells(LigFin, ColDeb)
               Sh.PrintOut lPage, lPage
            Next l
         Next c
      Case Else ' Impression vers la droite puis le bas
        For l = 1 To Sh.HPageBreaks.Count + 1
            If l = 1 Then LigDeb = rPremCell.Row Else LigDeb = Sh.HPageBreaks(l - 1).Location.Row ' Ligne de début de page
           If l = Sh.HPageBreaks.Count + 1 Then LigFin = rDernCell.Row Else LigFin = Sh.HPageBreaks(l).Location.Offset(-1, 0).Row ' Ligne de fin de page
           For c = 1 To Sh.VPageBreaks.Count + 1
               If c = 1 Then ColDeb = rPremCell.Column Else ColDeb = Sh.VPageBreaks(c - 1).Location.Column ' Colonne de début de la page
              If c = Sh.VPageBreaks.Count + 1 Then ColFin = rDernCell.Column Else ColFin = Sh.VPageBreaks(c).Location.Offset(0, -1).Column ' Colonne de fin de la page
              lPage = lPage + 1
              ' Ligne à personnaliser en fonction de tes besoins
               Sh.PageSetup.LeftFooter = "De " & Sh.Cells(LigDeb, ColDeb) & " à " & Sh.Cells(LigFin, ColDeb)
               Sh.PrintOut lPage, lPage
            Next c
         Next l
   End Select
End Sub

Le programme se comporte différemment en fonction de l'ordre des pages (Mise en page/Feuille/Ordre des pages), c'est la raison pour laquelle il y a deux boucles inversées.

A+

Benoît Marchand

[Benead]

Bonjour tout le monde

@ Benoît

Je me suis intéressé à ce sujet dès le début et j’ai enfin eu le temps de tester ton code. Parfois il fonctionne sans problème et parfois, selon différents essais, il ne génère plus les résultats attendus.

C’est assez rageant car je n’arrive pas à définir à quelles conditions exactes ça créé des problèmes et je ne sais trop comment t’expliquer cela.

Par exemple si je rajoute ou que j’enlève des lignes et que je corrige la zone d’impression avant de lancer le code - dans cet exemple ma feuille à finalement 3 pages - j’ai parfois la page 1 qui est imprimée avec son pied de page correct, la page 2 avec le pied de page qui indique la première cellule de la page 2 suivi de la dernière cellule de la page 3 (!) et la page 3 n’est pas imprimée.

Parfois j’ai aussi eu d’anciens pieds de page qui étaient restés comme bloqués, qui n’étaient pas renouvelés en fonction de la nouvelle zone d’impression inscrite manuellement.

Tu verras dans le code du fichier ci-joint que j’ai également fait l'essai de supprimer l’ancien pied de page afin d’en forcer le renouvellement (pas très concluant) et l'essai d’actualiser automatiquement la zone d’impression (pas très concluant non plus). A propos de ce dernier essai, aurais-tu une idée afin de mettre en place cette option ?

A te relire.

Bonjour Yvouille,

Désolé pour le retard.

J'ai regardé et je pense avoir trouvé. Le problème numéro un est que dès que l'on touche à l'impression, à la mise en page on fait appel au pilote d'impression qui gère implicitement les sauts de page, les marges... Et là je t'avoue que cela devient très compliqué.

Pour répondre à ta problématique, d'après mes tests, et aussi bizarre que cela puisse paraître, le fait d'imprimer un nombre de pages qui semble aléatoire dépend principalement de l'emplacement de la cellule active, si elle est positionnée sur la première page, la macro n'imprime que la première page, si elle est sur la seconde, on imprime les 2 premières pages....

Un autre problème qui a certainement perturbé tes tests d'impression, est que tu avais mis la macro ImprPageSetupPerso dans l'événement Workbook_BeforePrint, elle devenait donc récursive si tu lançais le programme d'impression via le bouton.

Quand on imprime avec le bouton imprimer, Excel me sort deux fois l'impression une fois avec la macro + plus une fois car tu n'as pas arrêté l'évenement après l'exécution de la macro d'impression. Il faut mettre un Cancel=True la ligne suivante du Call dans l'événement Workbook_BeforePrint.

Voici le fichier corrigé :

Tu verras, pour que la macro fonctionne correctement, on change simplement la vue (vue des sauts de pages) pour qu'Excel charge dans les PageBreaks tous les sauts de page ; je ne sais pas trop pourquoi on est obligé de faire cela mais je pense que c'est en relation avec le pilote d'impression.

A+

Benoît Marchand

[Benead]

Salut Benoît et merci d'être revenu à la charge sur ce fil pour répondre à mes questions.

Je suis actuellement en vacances dans un chalet sans imprimante, mais je me réjouis de pouvoir effectuer des tests dès la semaine prochaine. Si nécessaire, je me permettrai de te contacter à nouveau.

Encore merci et bonne continuation.

Rechercher des sujets similaires à "pied page variable"