Function NumSem(dDate As Date) As Integer
Dim t As Long
t = DateSerial(Year(dDate + (8 - WeekDay(dDate)) Mod 7 - 3), 1, 1)
NumSem = ((dDate - t - 3 + (WeekDay(t) + 1) Mod 7)) \ 7 + 1
End Function
PS : la formule avec DatePart donne par exemple pour le 29/12/2003 53 et non 1
les arguments correspondent au premier jour de la semaine(2=lundi) et le 2ème argument représente la constante précisant la façon de déterminer la première semaine de l'année, ci-dessous les differentes possibilités :
(cf aide vba)
vbUseSystem 0 Utiliser l'argument NLS API.
vbFirstJan1 1 Commencer par la semaine du 1er janvier (valeur par défaut).
vbFirstFourDays 2 Commencer par la première semaine comportant au moins quatre jours dans l'année nouvelle.
vbFirstFullWeek 3 Commencer par la première semaine complète de l'année.