Lorsque vous travaillez avec de grandes feuilles de calcul, il n’est pas inhabituel d’ajouter des sous-totaux afin de pouvoir regrouper les informations dans la feuille de calcul de manière logique. (L’outil Sous-total se trouve sur l’onglet Données du ruban dans le groupe Plan.) Lors de l’ajout de sous-totaux, vous pouvez spécifier qu’Excel démarre chaque groupe sur une toute nouvelle page. Ceci est très pratique pour tous les types de rapports dans Excel.

Si vous démarrez chaque groupe ou section de sous-total sur une nouvelle page, vous pouvez vous demander s’il existe un moyen de créer des en-têtes personnalisés qui s’impriment différemment pour chaque section, comme vous pouvez le faire avec différentes sections dans un document Word. Malheureusement, il n’existe aucun moyen de le faire dans Excel. Vous pouvez cependant créer une macro qui modifie de manière itérative l’en-tête et imprime chaque groupe d’une feuille de calcul. Considérez la macro suivante:

Sub ChangeSectionHeads()

Dim c As Range, rngSection As Range     Dim cFirst As Range, cLast As Range     Dim rowLast As Long, colLast As Integer     Dim r As Long, iSection As Integer     Dim iCopies As Variant     Dim strCH As String

Set c = Range("A1").SpecialCells(xlCellTypeLastCell)

rowLast = c.Row     colLast = c.Column

iCopies = InputBox( _         "Number of Copies", "Changing Section Headers", 1)



If iCopies = "" Then Exit Sub

Set cFirst = Range("A1")     ' initialization start cell     For r = 2 To rowLast    ' from first row to last row         If ActiveSheet.Rows(r).PageBreak = xlPageBreakManual Then             Set cLast = Cells(r - 1, colLast)

Set rngSection = Range(cFirst, cLast)



iSection = iSection + 1             Select Case iSection             '   substitute your CenterSection Header data ...

Case 1: strCH = "Section 1"

Case 2: strCH = "Section 2"

'   etc             '   Case n: strCH = "Section n"

End Select

ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _                 Copies:=iCopies, Collate:=True

Set cFirst = Cells(r, 1)

End If     Next r

'   Last Section +++++++++++++++++++++++++++



Set rngSection = Range(cFirst, c)



iSection = iSection + 1 '   substitute your Center Header data ...

strCH = "Last Section ..."



ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _         Copies:=iCopies, Collate:=True End Sub

Cette macro est un bon début pour accomplir ce que vous voulez faire. Il commence par vous demander combien de copies vous souhaitez imprimer de chaque section, puis il commence à parcourir chaque ligne pour voir s’il y a un saut de page avant cette ligne.

La vérification de ligne réelle est effectuée en examinant la propriété PageBreak de chaque ligne. Cette propriété est normalement définie sur xlPageBreakNone, mais lorsque vous utilisez la fonctionnalité Sous-totaux d’Excel, toute ligne comportant un saut de page avant que cette propriété ne soit définie sur xlPageBreakManual. Il s’agit du même paramètre qui se produirait si vous avez placé manuellement des sauts de page dans votre feuille de calcul.

Si la macro détecte qu’une ligne a un saut de page avant elle, la plage rngSection est définie comme égale aux lignes du groupe précédent. En outre, la structure Select Case est utilisée pour définir les différents en-têtes utilisés pour les différentes sections de la feuille de calcul. Cet en-tête est ensuite placé au centre de l’en-tête et la plage spécifiée par rngSection est imprimée.

Après avoir parcouru tous les groupes de la feuille de calcul, le groupe final (qui ne se termine pas par un saut de page) est imprimé.

Pour utiliser cette macro, tout ce que vous avez à faire est de spécifier dans la structure Select Case les différents en-têtes souhaités pour chaque section de la feuille de calcul. Vous pouvez également, si vous le souhaitez, modifier l’emplacement de l’en-tête dans l’en-tête. Tout ce que vous avez à faire est de modifier la propriété CenterHeader en LeftHeader ou RightHeader. Vous pouvez également utiliser LeftFooter, CenterFooter et RightFooter, si vous le souhaitez.

_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 (9867) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.