David administre une élection pour une société professionnelle et la liste des électeurs éligibles est une feuille de travail. Il y a environ 1 200 électeurs éligibles, donc l’impression fait plus de vingt pages. David a un pied de page avec le numéro de page – ce qui est utile – mais ce serait bien s’il pouvait avoir, dans l’en-tête de chaque page, le prénom sur la page et le nom de famille sur la page.

Dans Excel, il n’existe aucun moyen natif de le faire. Cependant, il s’agit d’un accrochage relatif à faire dans Word, donc une solution consiste à coller les noms triés dans un document Word, puis à ajouter l’en-tête souhaité qui affiche les noms.

Bien que cela puisse fonctionner, il devient difficile de s’assurer que la version Word de la liste est toujours synchronisée avec la version Excel de la liste, et vice-versa.

Si vous décidez de conserver une seule version de la liste électorale dans Excel, la meilleure façon d’aborder le problème est d’utiliser une macro pour insérer le prénom et le nom dans l’en-tête. Le code d’une telle macro, évidemment, devrait être adapté à la mise en page des données dans votre feuille de calcul. La macro suivante suppose que les noms sont dans les colonnes A à C, avec les noms (ceux que vous souhaitez utiliser pour les en-têtes) sont dans la colonne C.

Sub PrintNamesInHeader()

Dim iPages As Integer     Dim iPage As Integer     Dim iHorPgs As Integer     Dim iHP As Integer     Dim iHPNext As Integer     Dim iCol As Integer     Dim iColLast As Integer     Dim lRow As Long     Dim lRowLast As Long     Dim sPrtArea As String

iCol = 1        'Col A     iColLast = 3    'Col C     With ActiveSheet         iPages = ExecuteExcel4Macro("Get.Document(50)")

iHorPgs = .HPageBreaks.Count + 1         sPrtArea = .PageSetup.PrintArea

For iPage = 1 To iPages             iHP = ((iPage - 1) Mod iHorPgs)

iHPNext = iHP + 1             If iHP = 0 Then                 If sPrtArea = "" Then                     lRow = 1                 Else                     lRow = .Range(sPrtArea).Cells(1).Row                 End If             Else                 lRow = .HPageBreaks(iHP).Location.Row             End If             If iHPNext > .HPageBreaks.Count Then                 lRowLast = .Cells(lRow, iColLast).End(xlDown).Row             Else                 lRowLast = .HPageBreaks(iHPNext).Location.Row - 1             End If             .PageSetup.LeftHeader = .Cells(lRow, iCol).Value & _               " - " & .Cells(lRowLast, iColLast)

.PrintOut From:=iPage, To:=iPage, preview:=True         Next     End With End Sub

Lorsque vous exécutez la macro, il parcourt chaque page de la feuille de calcul. Les en-têtes sont définis pour la page, puis la page unique est imprimée, puis la page suivante est examinée et traitée.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (9542) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-First_and_Last_Names_in_a_Page_Header [Prénom et nom dans un en-tête de page].