Procédure événementielle

  • Initiateur de la discussion Initiateur de la discussion cibleo
  • Date de début Date de début

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 !

cibleo

XLDnaute Impliqué
Bonjour à tous,

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 vos conseils Cibleo
 
Re : Procédure événementielle

Bonsoir JCGL,

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.

Est-ce je me trompe JCGL ?

Amicalement Cibleo
 
Re : Procédure événementielle

Re,

Le fait de le mettre dans le ThisWorkBook et en Workbook_BeforePrint ne ralentira pas l'exécution à chaque "changement" sur tes 60 feuilles

Pour limiter, tu peux utiliser un

Code:
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "le_nom_de_la_feuille" Then

A+
 
Re : Procédure événementielle

Re JCGL,

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.

Cibleo
 
Re : Procédure événementielle

Re,

Modifie la valeur <> en =
soit de différent en égal

Code:
If ws.Name = "Modele" Then
Pas vraiment au top ce soir : mon petit dernier est Graduate (arf c'est le dernier)

A+ à tous
 
Re : Procédure événementielle

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.
 
Re : Procédure événementielle

Bonjour
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
Remplacer
ActiveSheet. par Ws.

et remettre If ws.Name = "Modele"

Sinon cela s'applique à la feuille en cours qui n'est pas forcément la bonne.
 
Re : Procédure événementielle

Re,
Salut Roro 🙂,
Salut Chris 🙂,

Roro : merci pour ton intervention 🙂, mais là le petit rhum c'est fini... mais nous avons, aussi..., bu un petit paille de chez toi... que du bonheur.

Chris : merci de "suppléer" un papa qui fête le diplôme de son petit dernier.

Bise à Chris 😉
Tape dans le dos à Roro 😉
A++ à tous
 
Re : Procédure événementielle

Bojour le forum
Bonjour JCGL, Chris, Roro

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.

Cibleo
 
Re : Procédure événementielle

Re

Comme ceci :

Code:
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

Cibleo
 
- 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

Discussions similaires

Réponses
3
Affichages
582
Réponses
2
Affichages
690
Réponses
1
Affichages
1 K
Réponses
13
Affichages
4 K
Retour