VBA EXCEL Manipulation des en-t&#234;tes et pieds de pages

Fred (fring)

Compléter les en-têtes et pieds de pages peut devenir une tâche fastidieuse lorsque le classeur comporte un nombre important d'onglets.
Il est possible d'effectuer, via un bout de code en VBA, cette tâche une seule fois et de l'appliquer automatiquement à l'ensemble des onglets.

- Titre : VBA EXCEL Manipulation des en-t&#234;tes et pieds de pages

- Auteur : Fred (fring)

- Parution : 27 avril 2008

- Mise à jour : 4 juin 2008

- Licence : Copyright © 2008 fring. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300.000 € de dommages et intérêts. Cette page est déposée à la SACD.

Sommaire

- 1. Introduction

- 2. Les syntaxes

- 2-1. Généralités

- 2-1-1. Syntaxes concernant l'en-tête de page

- 2-1-2. Syntaxes concernant le pied de page

- 2-2. Appliquer à la feuille active

- 2-3. Appliquer à toutes les feuilles

- 3. Les codes d'insertions automatiques

- 4. Les codes de mise en forme

- 5. Insertion d'une image

- 6. Remerciements

- 7. Téléchargements

1 - Introduction

Lorsque l'on complète l'en-tête et le pied de page d'une feuille, seules les pages de cette feuille auront l'en-tête et le pied de page contenant des informations.
Si l'on souhaite que les autres feuilles possèdent également les infos dans leurs en-têtes et pieds de page, il faut répéter cette opération pour chacune d'elles, ce qui peut se révéler fastidieux si le classeur comporte un nombre important de feuilles (onglets).
Nous allons voir dans cet article qu'il est possible d'automatiser cette tâche pour l'ensemble des feuilles.

2 - Les syntaxes

2-1 - Généralités

L'en-tête et le pied de page sont composés chacun de 3 sections ; gauche, centrale et droite.
Le texte introduit dans les différentes sections, sera automatiquement aligné (gauche, centré, droite) selon la section.
Dans chaque section, il est possible d'insérer un texte sur plusieurs lignes. Le saut de ligne s'obtient par le code Chr(10), entouré du signe de concaténation &

2-1-1 - Syntaxes concernant l'en-tête de page

- Section gauche = PageSetup.LeftHeader

- Section centrale = PageSetup.CenterHeader

- Section droite = PageSetup.RightHeader

2-1-2 - Syntaxes concernant le pied de page

- Section gauche = PageSetup.LeftFooter

- Section centrale = PageSetup.CenterFooter

- Section droite = PageSetup.RightFooter

2-2 - Appliquer à la feuille active

Code VBA

Sub feuille_active()

With ActiveSheet.PageSetup
'en-tête de page
.LeftHeader = "texte section gauche"
.CenterHeader = "texte section centrale"
.RightHeader = "texte section droite"
'pied de page
.LeftFooter = "texte section gauche"
.CenterFooter = "texte section centrale"
.RightFooter = "texte section droite"
End With

End Sub

2-3 - Appliquer à toutes les feuilles

Code VBA

Sub toutes_feuilles()
Dim x As Byte

For x = 1 To Sheets.Count
With Sheets(x).PageSetup
'en-tête de page
.LeftHeader = "texte section gauche"
.CenterHeader = "texte section centrale"
.RightHeader = "texte section droite"
'pied de page
.LeftFooter = "texte section gauche"
.CenterFooter = "texte section centrale"
.RightFooter = "texte section droite"
End With
Next x

End Sub

3 - Les codes d'insertions automatiques

Une série de codes vont permettre d'insérer automatiquement la date, l'heure, le nom du fichier, etc.

Désignations

Codes

Date

"&D"

Heure

"&T"

Nom du fichier

"&F"

Nom de la feuille

"&A"

Numéro de page

"&P"

Nombre total de pages

"&N"

- Exemple d'utilisation :

Code VBA

Sub exemple_codes_auto()

With ActiveSheet.PageSetup
'en-tête de page
.LeftHeader = ""
.CenterHeader = "fring"
.RightHeader = ""
'pied de page
.LeftFooter = "&D / &T" '<-- date / heure
.CenterFooter = "&A" & Chr(10) & "&F" '<-- nom feuille + saut de ligne + nom fichier
.RightFooter = "&P/&N" '<-- numéro de page / nombre de pages
End With

End Sub

4 - Les codes de mise en forme

Une série de codes permettent d'appliquer une mise en forme au texte (police de caractères, taille, italique, gras, etc.).

Désignations

Codes

Police de caractères
(exemple : Comic Sans Ms)

"&""Comic Sans Ms""Texte"

Taille
(exemple : taille 12)

"&12Texte"

Style Gras

"&GTexte"

Style Italique

"&ITexte"

Soulignement simple

"&UTexte"

Soulignement double

"&ETexte"

Texte barré

"&STexte"

Style Exposant

"&XTexte"

Style Indice

"&YTexte"

Il est bien sûr possible d'enchaîner plusieurs codes afin par exemple de mettre le texte en gras/italique/taille 12 ("&G&I&12Texte")

- Exemple d'utilisation :

Code VBA

Sub exemple_codes_mise_en_forme()

With ActiveSheet.PageSetup
'en-tête de page
.LeftHeader = Sheets(1).Range("A1") '<-- contenu de la cellule A1 (sans précision = style par défaut)
.CenterHeader = "&G&12&""Comic Sans Ms""fring" '<-- texte (style gras + taille 12 + style police)
.RightHeader = "P.WQ.156&Yind.A" '<-- texte + indice'pied de page
.LeftFooter = "&I&D / &T" '<-- date / heure (style italique)
.CenterFooter = "&G&A" & Chr(10) & "&G&F" '<-- nom feuille (activation style gras) + saut de ligne + nom fichier (désactivation style gras)
.RightFooter = "&8&P/&N" '<-- numéro de page / nombre de pages (taille 8)
End With

End Sub

5 - Insertion d'une image

Depuis la version Excel 2002, il est possible d'insérer une image (un logo d'entreprise par exemple) dans une des sections de l'en-tête ou du pied de page.

La syntaxe (pour la section gauche de l'en-tête) est la suivante : PageSetup.LeftHeaderPicture

Les propriétés associées à cette syntaxe sont :

- Filename = Chemin complet et Nom de l'image

- Height = Hauteur de l'image

- Width = Largeur de l'image

Les propriétés Height et Width sont facultatives, sans les préciser l'image aura sa taille initiale.

Remarque : afin que l'image s'affiche, il est nécessaire d'ajouter le code "&G" dans la section concernée (info issue de l'aide en ligne d'Excel).
ActiveSheet.PageSetup.LeftHeader = "&G"

- Exemple d'utilisation :

Code VBA

Sub insertionImage_EntetePage()

With ActiveSheet.PageSetup.LeftHeaderPicture
.Filename = "C:\Documents and Settings\Moi\Dossier\Temp\Image.jpg"
.Height = 40 '<-- redéfinit la largeur de l'image
.Width = 80 '<-- redéfinit la hauteur de l'image
End With

ActiveSheet.PageSetup.LeftHeader = "&G" '<-- ajout du code &G

End Sub

L'exemple ci-dessus affichera une image dans la section gauche de l'en-tête de page.
Pour insérer l'image dans une autre section, il suffit de remplacer LeftHeader (voir le point 2.1 ci-dessus).
L'insertion d'une image a été testée avec les types de fichiers suivants : jpg, jpeg, gif et bmp

6 - Remerciements

Merci à :
Antoun pour la relecture de cet article
Silkyroad pour l'info complémentaire concernant l'insertion d'une image
mon ami Lomi pour m'avoir assisté dans les essais, Jean-Pierre49 pour avoir testé les différents types de fichier image.

7 - Téléchargements

Le fichier "démo" disponible ci-dessous est constitué d'un UserForm permettant une manipulation rapide des en-têtes et pieds de pages.

Fichier Demo