Comment insérer dans l'en-tête de page la valeur d'une cellule ou même le résultat d'une formule se
référant à une cellule.
pour ce faire il faut une macro,
Sub Macro1()
ActiveSheet.PageSetup.RightHeader = Evaluate("NO.SEMAINE(A1, 2)")
End Sub
Sub Macro1()
ActiveSheet.PageSetup.RightHeader = Evaluate("NO.SEMAINE(A1, 2)")
End Sub
Isabelle,
Ajouté ou modifié le 25/08/2007 (N°1882)
Ajouté ou modifié le 25/08/2007 (N°1882)
Ma feuille Excel s'imprime en une dizaine de pages. Elle contient un en-tête
qui se répète sur toutes les pages mais je voudrais avoir un en-tête différent pour la première page.
Pour automatiser l'impression de la feuille désignée lorsque tu appuies sur le bouton imprimer de la barre d'outils.
Mets dans le module ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Denis Michon MPFE 2007
Dim Sh As Worksheet
Set Sh = Worksheets("Feuil1")
With Sh
With .PageSetup
'Défiinis les caractéristiques de présentation de ta première page :
.LeftHeader = "Quelle belle journée"
.RightFooter = "Ok, je suis d'accord"
'Cette commande n'imprime que la page 1
Sh.PrintOut 1, 1
'Pour toutes les autres feuilles, tu définis d'autres caractéristiques
.LeftHeader = "J'ai faim"
.RightFooter = "Ok, je vais déjeuner"
'Si une caractéristique a été définie pour la première page et que tu ne veux
'pas l'utiliser sur la seconde, il FAUT que tu la vides de la façon suivante :
.RightFooter = ""
'Commande pour imprimer toutes les autres feuilles à partir de la feuille 2:
Sh.PrintOut 2
End With
End With
End Sub
Mets dans le module ThisWorkbook :
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Denis Michon MPFE 2007
Dim Sh As Worksheet
Set Sh = Worksheets("Feuil1")
With Sh
With .PageSetup
'Défiinis les caractéristiques de présentation de ta première page :
.LeftHeader = "Quelle belle journée"
.RightFooter = "Ok, je suis d'accord"
'Cette commande n'imprime que la page 1
Sh.PrintOut 1, 1
'Pour toutes les autres feuilles, tu définis d'autres caractéristiques
.LeftHeader = "J'ai faim"
.RightFooter = "Ok, je vais déjeuner"
'Si une caractéristique a été définie pour la première page et que tu ne veux
'pas l'utiliser sur la seconde, il FAUT que tu la vides de la façon suivante :
.RightFooter = ""
'Commande pour imprimer toutes les autres feuilles à partir de la feuille 2:
Sh.PrintOut 2
End With
End With
End Sub
Denis Michon,
Ajouté ou modifié le 26/05/2007 (N°1844)
Ajouté ou modifié le 26/05/2007 (N°1844)
Pourrait-on reproduire les entêtes et bas de page sur les pages 1,2 et 3 par exemple puis
imprimer les pages 4,5 sans entêtes ou bas de page.
Oui, il faut utiliser les "vues" (pardon, dans Excel 2000 on appelle ça
"affichages personnalisés"). Tu fais une première mise en page, en
incluant que les pages 1 à 3 dans ta zone d'impression, et en
définissant tes en-têtes/pieds de pages comme désiré. Ensuite tu crées
une première vue, disons "Vue1" (Affichage/Affichages
personnalisés"/Ajouter). Deuxièmement, tu modifies la mise en page en
incluant que les pages 4 à 6 dans la zone d'impression et en effaçant
les en-têtes/pieds de page. Tu crées alors une seconde vue "Vue2".
Pour Imprimer l'ensemble des 6 pages, tu dois maintenant:
activer la vue 1 et l'imprimer
activer la vue 2 et l'imprimer.
C'est raisonnable si c'est occasionnel, mais si c'est fréquent ou si tu
as beaucoup de sections (et non seulement deux), ça devient fastidieux.
Mais j'ai prévu le coup! J'anticipe:
La macro complémentaire Gestionnaire de rapports (Outils/Macros
complémentaires) permet de créer des "rapports". Qu'est-ce qu'un
rapport? c'est (entre autres) un assemblage de "vues", tu me vois
venir!!! Sous XL2000, Affichage/Gestionnaire de rapports, Ajouter, tu
lui donne un nom quelconque et tu ajoute "vue1" et "vue2" comme sections
de rapports.
Attention, l'aperçu avant impression n'est pas disponible pour un
rapport (c'est dommage). Il faut utiliser le bouton Imprimer de la boite
Affichage/Gestionnaire de rapports.
"affichages personnalisés"). Tu fais une première mise en page, en
incluant que les pages 1 à 3 dans ta zone d'impression, et en
définissant tes en-têtes/pieds de pages comme désiré. Ensuite tu crées
une première vue, disons "Vue1" (Affichage/Affichages
personnalisés"/Ajouter). Deuxièmement, tu modifies la mise en page en
incluant que les pages 4 à 6 dans la zone d'impression et en effaçant
les en-têtes/pieds de page. Tu crées alors une seconde vue "Vue2".
Pour Imprimer l'ensemble des 6 pages, tu dois maintenant:
activer la vue 1 et l'imprimer
activer la vue 2 et l'imprimer.
C'est raisonnable si c'est occasionnel, mais si c'est fréquent ou si tu
as beaucoup de sections (et non seulement deux), ça devient fastidieux.
Mais j'ai prévu le coup! J'anticipe:
La macro complémentaire Gestionnaire de rapports (Outils/Macros
complémentaires) permet de créer des "rapports". Qu'est-ce qu'un
rapport? c'est (entre autres) un assemblage de "vues", tu me vois
venir!!! Sous XL2000, Affichage/Gestionnaire de rapports, Ajouter, tu
lui donne un nom quelconque et tu ajoute "vue1" et "vue2" comme sections
de rapports.
Attention, l'aperçu avant impression n'est pas disponible pour un
rapport (c'est dommage). Il faut utiliser le bouton Imprimer de la boite
Affichage/Gestionnaire de rapports.
Laurent Mortézai, (N°943)
J'aimerais reprendre sur chaque page mes légendes de lignes pour imprimer un tableau ne pouvant
tenir sur une seule page.
Fichier / Mise en page / onglet Feuille / Colonnes à répéter à gauche :
$A:$A si tes étiquettes de lignes se trouvent dans la colonne A.
($A:$B pour une répétition sur chaque page de ton édition, des étiquettes se
trouvant dans les colonnes A et B)
Tu peux aussi utiliser, toujours dans la zone "Titres à imprimer" : Lignes à
répéter en haut : (pour une répétition des étiquettes de colonnes, ex :
$1:$1)
$A:$A si tes étiquettes de lignes se trouvent dans la colonne A.
($A:$B pour une répétition sur chaque page de ton édition, des étiquettes se
trouvant dans les colonnes A et B)
Tu peux aussi utiliser, toujours dans la zone "Titres à imprimer" : Lignes à
répéter en haut : (pour une répétition des étiquettes de colonnes, ex :
$1:$1)
ChrisV, (N°942)
Je souhaite que le chemin et le nom du fichier apparaissent automatiquement dans le pied de
page de TOUS les classeurs que je crée. Comment faire ?
Tu enregistres un modèle Classeur.xlt dans le répertoire Xlouvrir.
Dans le module ThisWorkbook de ce modèle, tu inscris les codes suivants :
---------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.LeftFooter = ThisWorkbook.FullName
End Sub
Dans le module ThisWorkbook de ce modèle, tu inscris les codes suivants :
---------------
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.LeftFooter = ThisWorkbook.FullName
End Sub
Jean-Paul Sabatier, (N°941)
Est-il possible dans excel de répéter automatiquement des lignes en bas de la page dans la mise
en page pour imprimer ?
C'est possible avec une macro VBA comme par exemple dans la suivante que
j'utilise pour mettre en bas de page, à gauche mon identification/service et
la date et l'heure et à droite, le chemin, le nom du classeur et la feuille...
Sub PieddePage()
'
' VPAdatepage Macro
' Macro enregistrée le 2000-03-10 par Jean-Pierre Pastinelli
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = "Page &P de &N "
.LeftFooter = "Ce que vous voulez/ &D &T"
.CenterFooter = ""
.RightFooter = ActiveWorkbook.Path & Chr(10) & "&F " & Chr(10) & "&A"
End With
End Sub
j'utilise pour mettre en bas de page, à gauche mon identification/service et
la date et l'heure et à droite, le chemin, le nom du classeur et la feuille...
Sub PieddePage()
'
' VPAdatepage Macro
' Macro enregistrée le 2000-03-10 par Jean-Pierre Pastinelli
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = "Page &P de &N "
.LeftFooter = "Ce que vous voulez/ &D &T"
.CenterFooter = ""
.RightFooter = ActiveWorkbook.Path & Chr(10) & "&F " & Chr(10) & "&A"
End With
End Sub
Jean-Pierre Pastinelli, (N°940)
Peut on définir un pied de page qui ne s'imprime que si une certaine condition est remplie ?
Sub entete_et_pied()
With ActiveSheet.PageSetup
If Range("A1") > 10 Then
.LeftHeader = " vous n'aviez pas le droit d'imprimer !!!"
Else
.LeftHeader = ""
End If
.CenterHeader = ""
NomComplet = ActiveWorkbook.Name
.RightHeader = UCase(NomComplet)
.CenterFooter = "Page &P de &N"
. RightFooter = "C'est pour rire"
End With
End Sub
With ActiveSheet.PageSetup
If Range("A1") > 10 Then
.LeftHeader = " vous n'aviez pas le droit d'imprimer !!!"
Else
.LeftHeader = ""
End If
.CenterHeader = ""
NomComplet = ActiveWorkbook.Name
.RightHeader = UCase(NomComplet)
.CenterFooter = "Page &P de &N"
. RightFooter = "C'est pour rire"
End With
End Sub
...Patrick MacKay, (N°939)
Comment mettre en arial 8 le nom du classeur dans le pied de page ?
ActiveSheet.PageSetup.LeftFooter = "&""Arial,Normal""&8" &
ActiveWorkbook.Path & "" & ActiveWorkbook.Name
ActiveWorkbook.Path & "" & ActiveWorkbook.Name
Laurent Mortézai, (N°938)

Comment récupérer le nom de l'utilisateur dans un Entête et créer cette chaine : Imprimé le
&[Date] à &[Heure] par &[Utilisateur]
La solution la plus simple est de mettre ce code
dans le module événementiel ThisWorkbook du classeur ; de cette façon avant
chaque impression ou aperçu, ces informations viendront se mettre là où tu
le souhaites.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wInfo As String
wInfo = "Par " & Application.UserName & " Imprimé le &D à &T"
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = wInfo
.RightHeader = ""
End With
End Sub
En complément, Application.Username renvoie le nom
entré dans Outils/Options/General (ce qui n'est pas forcement renseigné)
tandis que Environ("username") retourne le nom d'utilisateur fourni lors de
l'ouverture de session: le choix est donc à faire en fonction du systeme utilisé.
dans le module événementiel ThisWorkbook du classeur ; de cette façon avant
chaque impression ou aperçu, ces informations viendront se mettre là où tu
le souhaites.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wInfo As String
wInfo = "Par " & Application.UserName & " Imprimé le &D à &T"
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = wInfo
.RightHeader = ""
End With
End Sub
En complément, Application.Username renvoie le nom
entré dans Outils/Options/General (ce qui n'est pas forcement renseigné)
tandis que Environ("username") retourne le nom d'utilisateur fourni lors de
l'ouverture de session: le choix est donc à faire en fonction du systeme utilisé.
Benead, Michel (msa), (N°937)
Comment imprimer le chemin complet d'accès à mon classeur dans l'en-tête ou le pied de page ?
Pour avoir le chemin d'accès dans la section centrale du pied de page:
Sub CheminAcces()
ActiveSheet.PageSetup.CenterFooter= ThisWorkbook.FullName
End Sub
Tu peux remplacer "CenterFooter" par:
LeftFooter/LeftHeader, ou RightFooter/LeftHeader, si tu préfères avoir le
chemin dans la section de gauche ou de droite.
Pour l'en-tête:
Sub CheminAcces()
ActiveSheet.PageSetup.CenterHeader= ThisWorkbook.FullName
End Sub
Si tu désires également le nom de la feuille active:
Remplace ThisWorkbook.Fullname par [CELL("filename")]
Sub CheminAcces()
ActiveSheet.PageSetup.CenterFooter= ThisWorkbook.FullName
End Sub
Tu peux remplacer "CenterFooter" par:
LeftFooter/LeftHeader, ou RightFooter/LeftHeader, si tu préfères avoir le
chemin dans la section de gauche ou de droite.
Pour l'en-tête:
Sub CheminAcces()
ActiveSheet.PageSetup.CenterHeader= ThisWorkbook.FullName
End Sub
Si tu désires également le nom de la feuille active:
Remplace ThisWorkbook.Fullname par [CELL("filename")]
ChrisV, (N°936)
Est-il possible, sans utiliser VBA, de se référer à une cellule dans un entête de page . Ainsi,
lorsque le contenu de la cellule se modifie, le contenu de l'entête est lui aussi modifié....
Pourquoi ne pas faire référence à ta cellule dans ta première ligne, et dans ta mise en page
-> Feuille -> lignes à répéter en haut = tu fais référence à ta première ligne.
Ça c'est une bonne idée. Je me demande comment je n'y ai pas pensé plus tôt.
C'est la réponse qu'on donne quand les gens demandent comment mettre une image
dans l'en-tête.
Par contre, on ne peut pas mettre certains codes spéciaux (page x de xxx, date
d'impression, etc.) dans une cellule de la feuille. Que faire? Il suffit de
placer ces codes spéciaux dans l'en-tête et de faire coincider les marges du
haut ET de l'entête, si bien qu'on obtient une superposition de l'en-tête et de
la première ligne de la feuille (qui contient la formule). Le résultat est
parfait!
Cette technique se limite toutefois à l'en-tête, pour le pied de page, c'est une
autre histoire...
-> Feuille -> lignes à répéter en haut = tu fais référence à ta première ligne.
Ça c'est une bonne idée. Je me demande comment je n'y ai pas pensé plus tôt.
C'est la réponse qu'on donne quand les gens demandent comment mettre une image
dans l'en-tête.
Par contre, on ne peut pas mettre certains codes spéciaux (page x de xxx, date
d'impression, etc.) dans une cellule de la feuille. Que faire? Il suffit de
placer ces codes spéciaux dans l'en-tête et de faire coincider les marges du
haut ET de l'entête, si bien qu'on obtient une superposition de l'en-tête et de
la première ligne de la feuille (qui contient la formule). Le résultat est
parfait!
Cette technique se limite toutefois à l'en-tête, pour le pied de page, c'est une
autre histoire...
NonoM@Z, Laurent Longre, (N°935)
J'utilise une macro qui inscrit en pied de page mon nom, la date de révision du document ainsi
que le chemin complet du fichier. Cette macro fonctionne parfaitement dans certains classeurs
mais pas dans d'autres. pourquoi ?
Le nombre de caractère permis pour le pied de page (left + center + right) est de
255 caractères (y compris les & et instructions). Au delà tu auras un message d'erreur.
Ajoute donc un test dans ta macro ou utilise la macro ci dessous pour tronquer automatiquement
à 255 le nombre de caractères et éviter l'erreur.
Sub Pied_page_sauvegarde()
'Denis Michon MPFE 2003
Dim sht As Worksheet
For Each sht In ActiveWorkbook.Worksheets
Dim LeNom As String
Application.EnableEvents = False
With ActiveSheet
LeNom = ActiveWorkbook.FullName
With .PageSetup
.RightFooter = ""
.CenterFooter = ""
.LeftFooter = ""
End With
.PageSetup.RightFooter = "&""Stylus bt,Normal""&6"
&
"..." & Right(LeNom, 150)
.PageSetup.LeftFooter = "&""Stylus BT,Normal""&6"
&
"Préparé par : Dany Sauvageau t.p." & Chr(10) & "Revision :
&D"
End With
Application.EnableEvents = True
Next sht
ActiveWorkbook.Save
End Sub
255 caractères (y compris les & et instructions). Au delà tu auras un message d'erreur.
Ajoute donc un test dans ta macro ou utilise la macro ci dessous pour tronquer automatiquement
à 255 le nombre de caractères et éviter l'erreur.
Sub Pied_page_sauvegarde()
'Denis Michon MPFE 2003
Dim sht As Worksheet
For Each sht In ActiveWorkbook.Worksheets
Dim LeNom As String
Application.EnableEvents = False
With ActiveSheet
LeNom = ActiveWorkbook.FullName
With .PageSetup
.RightFooter = ""
.CenterFooter = ""
.LeftFooter = ""
End With
.PageSetup.RightFooter = "&""Stylus bt,Normal""&6"
&
"..." & Right(LeNom, 150)
.PageSetup.LeftFooter = "&""Stylus BT,Normal""&6"
&
"Préparé par : Dany Sauvageau t.p." & Chr(10) & "Revision :
&D"
End With
Application.EnableEvents = True
Next sht
ActiveWorkbook.Save
End Sub
Denis Michon, (N°934)