1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Function simana(DateDuJour As Variant)
' DateDuJour est la date dont on veut calculer
' le n° de semaine européen
Dim DatePremierJour As Variant, DatePremierLundi As Variant
Dim ecart As Integer
If Not IsNull(DateDuJour) Then
' Date du 1er jour de l'année
DatePremierJour = DateSerial(Year(DateDuJour), 1, 1)
' Ecart en jours entre le 1er lundi de l'année
' et le 1er janvier
ecart = (9 - Weekday(DatePremierJour)) Mod 7
' Date du 1er Lundi de l'année
DatePremierLundi = DateAdd("d", ecart, DatePremierJour)
' Calcule la semaine
If DateDuJour >= DatePremierLundi Then
' Si DateDuJour est après le 1er lundi de l'année
simana = Int(DateDiff("d", DatePremierLundi, DateDuJour) _
/ 7) + 1
Else
' Sinon on est sur la dern. sem. de l'année précédente
' (53ème semaine si le 1er janvier est un mardi
' ou un mercredi avec l'année précédente bissextile)
If Weekday(DatePremierJour) = 3 Or _
(Weekday(DatePremierJour) = 4 And Month(DateAdd("d", 1, _
DateSerial(Year(DateDuJour) - 1, 2, 28))) = 2) Then
simana = 53
Else
simana = 52
End If
End If
End If
End Function |