Bonjour,
Voici un fonction vba qui retourne la date du lundi de la semaine
pour exemple lundi_semaine(2009,1) donne 29/12/2008
Function lundi_semaine(annee, Optional num_semaine As Integer = 1)
Application.Volatile
If num_semaine = 0 Then num_semaine = 1
'If IsMissing(num_semaine) Then num_semaine = 1
x = Weekday(DateSerial(annee, 1, 1), 2)
If x > 4 Then
pf = DateSerial(annee, 1, 1) - x + 8
Else
pf = DateSerial(annee, 1, 1) - x + 1
End If
lundi_semaine = pf + (num_semaine - 1) * 7
End Function
Pour ce qui est du numéro de semaine Excel n'est pas compatible avec la norme francaise. C'est la première semaine de l'année qui contient un jeudi qui est considérée comme première semaine de l'année.
Voici une fonction qui en tient compte
Function NOSEM(d As Date, Optional an, Optional tiret) 'As Long
If IsMissing(tiret) Then tiret = ""
Application.Volatile
d = Int(d)
NOAN = Year(d + (8 - Weekday(d, vbSunday)) Mod 7 - 3)
NOSEM = DateSerial(Year(d + (8 - Weekday(d, vbSunday)) Mod 7 - 3), 1, 1)
NOSEM = ((d - NOSEM - 3 + (Weekday(NOSEM, vbSunday) + 1) Mod 7)) \ 7 + 1
NOSEM = Format(NOSEM, "00")
If IsMissing(an) = False Then
NOSEM = Mid(CStr(NOAN), 3) & tiret & NOSEM
End If
End Function
NOSEM(1/12009) =01
NOSEM(1/12009;1) =0901 année semaine
NOSEM(1/12009;1;"_") =09_01 année semaine