Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai créé une petite procédure événementielle qui insère un pied de page dans une feuille de calcul nommée "Modele".
Mais comme je débute en Vba, j'ai nettememt l'impression que celle-ci ralentit le processus.
J'aurai donc 3 questions à vous poser :
L'évènement choisi est-il le bon ?
Si j'ai bien compris c'est un changement dans une cellule de la feuille active qui provoque l'évènement, est-ce le meilleur choix ?
Les instructions sont elles bien ordonnées et bien écrites ?
Et surtout, dans quelle fenêtre de code dois-je placer cette procédure ?
Module standard, ThisWorKbook ou bien dans la fenêtre code de ma feuille de calcul nommée "modèle" qui sera dupliquée 60 fois, sachant que ce pied de page ne doit s'afficher que dans ces 60 feuilles plus le modèle.
J'ai d'autres feuilles de calcul dans mon classeur mais je ne veux pas que ce pied de page s'y affiche.
HTML:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim datejour
datejour = Format(Now, "dddd dd mmmm yyyy à hh:mm")
ActiveSheet.PageSetup.LeftFooter = "Relevé mensuel de " & Range("A2").Value
ActiveSheet.PageSetup.CenterFooter = "Imprimé le " & datejour
ActiveSheet.PageSetup.RightFooter = "Page &P de &N pages"
End Sub
Merci pour le tutoriel, je vais étudier çà de près.
Mais je ne comprends pas le "Beforeprint".
Mais à quoi sert ThisWorbook ! Je croyais qu'en y insérant mon code, ce sont toutes les feuilles de mon classeur qui verront apparaitre ce pied de page.
J'ai mis ce code dans ThisWorbook comme tu me l'a indiqué ,mais çà patauge.
HTML:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim datejour
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Modele" Then
datejour = Format(Now, "dddd dd mmmm yyyy à hh:mm")
ActiveSheet.PageSetup.LeftFooter = "Planning de " & Range("A2").Value
ActiveSheet.PageSetup.CenterFooter = "Imprimé le " & datejour
ActiveSheet.PageSetup.RightFooter = "Page &P de &N pages"
End If
Next ws
End Sub
Les 3 feuilles sont nommées ainsi (pour l'instant) : Feuil1, Fériés et Modele
Si je veux que le pied de page n'apparaisse que dans la feuille modele, est-ce bien modifié ? c'est non puisque le pied de page apparait dans mes 3 feuilles.
Tu sais JCGL, j'apprends beaucoup sur le forum mais je progresse doucement.
Bonsoir cibleo et JC;
JC qui nous dit pas etre au top ;çà fait du bien de savoir que l'un des meilleurs contributeurs (et aussi celui qui répond souvent le plus gentiment et simplement) fait des fois des petites erreurs.LOL
Allez un ptit rhum et çà repart.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim datejour
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Modele" Then
datejour = Format(Now, "dddd dd mmmm yyyy à hh:mm") ActiveSheet.PageSetup.LeftFooter = "Planning de " & Range("A2").Value
ActiveSheet.PageSetup.CenterFooter = "Imprimé le " & datejour
ActiveSheet.PageSetup.RightFooter = "Page &P de &N pages" End If
Next ws
End Sub
J'ai suivi vos conseils mais j'ai un petit souci dans la création du code de l'en-tête.
Le code du pied de page qui fonctionne bien
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim datejour
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Feuil1" And ws.Name <> "Fériés" Then
datejour = Format(Now, "dddd dd mmmm yyyy à hh:mm")
ws.PageSetup.LeftFooter = "Relevé de " & Range("A2").Value
ws.PageSetup.CenterFooter = "Imprimé le " & datejour
ws.PageSetup.RightFooter = "Page &P sur &N pages"
End If
Next ws
End Sub
et le code de l'en-tête qui bug (erreur de compilation Nom ambigu détecté : Worbook_BeforePrint)
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim moistravail
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Feuil1" And ws.Name <> "Fériés" Then
moistravail = Format("mmmm yyyy")
ws.PageSetup.CenterHeader = "Relevé mensuel du temps de travail :" & Range("B2").Value
End If
Next ws
End Sub
La cellule B2 contient le mois de l'année au format mmmm aaaa, à ce niveau là j'ai dû oublié une ligne dans le code !!!
Il faut surement alléger tout çà pour ne faire qu'un code !
C'est difficile l'apprentissage, merci de votre aide.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim datejour
Dim moistravail
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Feuil1" And ws.Name <> "Fériés" Then
datejour = Format(Now, "dddd dd mmmm yyyy à hh:mm")
moistravail = Format("mmmm yyyy")
ws.PageSetup.CenterHeader = "Relevé mensuel du temps de travail :" & Range("B2").Value
ws.PageSetup.LeftFooter = "Relevé de " & Range("A2").Value
ws.PageSetup.CenterFooter = "Imprimé le " & datejour
ws.PageSetup.RightFooter = "Page &P sur &N pages"
End If
Next ws
End Sub
Mais j'ai un petit souci au niveau du format de l'en-tête.
"Relevé mensuel du temps de travail : jeudi 01 mai 2008"
en lieu et place de "Relevé mensuel du temps de travail : mai 2008"
Ca doit clocher au niveau du format ou du & Range("B2").Value
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD