Macro pour modifier un en-tête

SPEA

XLDnaute Occasionnel
Bonjour,

est il possible de programmer une macro pour modifier l'en-tête d'une feuille de calcul ?

je créé une feuille de calcul qui me sert de support pour mes releves chaque semaine, dans l'en_tête
je met le numéro de la semaine. Il m'arrive d'oublier de changer le numéro de semaine donc je voudrais que le numero de semaine dans l'en-tête se mette à jour automatiquement en fonction de la date contenue dans une cellule.

merci.
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Macro pour modifier un en-tête

Bonjour à tous,

avec ceci,
Code:
Sub entete()
With ActiveSheet.PageSetup
        .CenterHeader = "Semaine " & DatePart("ww", Date, 2, 2)
End With
ActiveSheet.PrintPreview ' (pour visualiser)
End Sub
en reprenant la formule de Pierrot
DatePart("ww", Date, 2, 2)


à+
Philippe

 

SPEA

XLDnaute Occasionnel
Re : Macro pour modifier un en-tête

Bonjour et merci pour vos réponses,

la macro de Pierrot renvoie le numero de semaine, je voudrais le renvoyer dans l'en-tête des feuilles,
d'apres ce que j'ai compris du code de phlaurent55, le numéro de semaine est renvoyé au centre de l'en_tete
je souhaiterais le renvoyer dans la partie droite de l'en-tete (voir fichier joint, le numero de semaine est calculé
à partir de la date en A2).

Comment faire également pour que l'en-tete se modifie des que je change la valeur en A2 ?

Merci pour votre aide (n'hesitez pas à glisser des commentaires car le but est de comprendre le fonctionnement...)
 

Pièces jointes

  • Semaine 32.xls
    37.5 KB · Affichages: 94

jpb388

XLDnaute Accro
Re : Macro pour modifier un en-tête

Bonjour
il suffit d'adapter la macro de phlaurent55 et de Pierrot93

Code:
Sub entete()
 With ActiveSheet.PageSetup
         .RightHeader = "Semaine " & DatePart("ww", Range("a2"), 2, 2)
 End With
 ActiveSheet.PrintPreview ' (pour visualiser)
 End Sub
a+
jp
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour modifier un en-tête

Bonjour,

essaye comme ceci, à placer dans le module de la feuille concernée, click droit sur l'onglet => visualiser le code et tu le colles :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$2" Then Exit Sub
If Not IsDate(Range("A2")) Then Exit Sub
Me.PageSetup.RightFooter = "Semaine " & DatePart("ww", Range("A2"), 2, 2)
End Sub
bonne journée
@+
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Macro pour modifier un en-tête

Re,

ton fichier en retour
le commentaires sont dans le code de la feuille

à
Philippe

Edit: Bonjour Pierrot
 

Pièces jointes

  • 111.xls
    66 KB · Affichages: 118
  • 111.xls
    66 KB · Affichages: 118
  • 111.xls
    66 KB · Affichages: 107

Pierrot93

XLDnaute Barbatruc
Re : Macro pour modifier un en-tête

Bonsoir,

si c'est de mon code que tu parles.. tu peux le modifier ainsi, en le plaçant dans le module "thisworkbook", s'appliquera à toutes les feuilles du classeur...

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 If Target.Address <> "$A$2" Then Exit Sub
 If Not IsDate(Sh.Range("A2")) Then Exit Sub
 Sh.PageSetup.RightFooter = "Semaine " & DatePart("ww", Sh.Range("A2"), 2, 2)
End Sub

bonne soirée
@+
 

SPEA

XLDnaute Occasionnel
Re : Macro pour modifier un en-tête

le code est le suivant,

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [A2]) Is Nothing Then
    With ActiveSheet.PageSetup
        .RightHeader = "Semaine " & DatePart("ww", [A2], 2, 2)
    End With
End If
End Sub

La cellule reference pour la date n'est pas en A2 sur les 4 feuilles, c'est pourquoi je voudrais que le code ci-dessus s'applique aux 4 feuilles du classeur.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour modifier un en-tête

Bonjour,
essaye peut être ceci, toujours dans le module "thisworkbook", sans plus de détails...
Code:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim t() As Variant
t = Array("A2", "A3", "A4", "A5")
With Sh
    If Target.Address(0, 0) <> t(.Index - 1) Then Exit Sub
    If Not IsDate(.Range(t(.Index - 1))) Then Exit Sub
    .PageSetup.RightFooter = "Semaine " & DatePart("ww", .Range(t(.Index - 1)), 2, 2)
End With
End Sub

les références de cellule dans le tableau doivent suivre l'index des feuilles concernées...

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Macro pour modifier un en-tête

Re,

une autre version en utilisant le "codename" des feuilles, en principe moins susceptible d'être modifié :

Code:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim a As Variant
With Sh
    a = Switch(.CodeName = "Feuil1", "A2", .CodeName = "Feuil2", "A3", _
        .CodeName = "Feuil3", "A4", .CodeName = "Feuil4", "A5")
    If IsNull(a) Or Target.Address(0, 0) <> a Or Not IsDate(Target.Value) Then Exit Sub
    .PageSetup.RightFooter = "Semaine " & DatePart("ww", Target.Value, 2, 2)
End With
End Sub

Edition : allégé un peu le code..
2ème édition : encore un petit +....
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 112
dernier inscrit
cuq-laet