Bonjour,
La fonction NO.SEMAINE.ISO n'est pas disponible sous VBA.
Vous pouvez utiliser la fonction que j'ai développée pour déterminer le numéro de semaine selon la norme ISO, qui est que le premier jeudi de l'année appartient à la semaine 1 de l'année.
Function No_Semaine(date_s)
Dim année As Integer, j As Integer, jour As String
Dim date_j As Date, date_1er_jour_année As Date, date_1er_jour_année_suivante As Date, date_1er_jour_année_précédente As Date
Dim date_lundi_semaine1_année As Date, date_lundi_semaine1_année_suivante As Date, date_lundi_semaine1_année_précédente As Date, date_lundi_semaine1 As Date
No_Semaine = ""
If Not IsDate(date_s) Then Exit Function
année = Year(date_s)
'détermination date du premier lundi de la semaine 1 de l'année
date_1er_jour_année = DateSerial(année, 1, 1)
For j = 0 To 6
date_j = date_1er_jour_année + j
jour = Format(date_j, "dddd", vbMonday)
If jour = "jeudi" Then
date_lundi_semaine1_année = date_j - 3
End If
Next
'détermination date du premier lundi de la semaine 1 de l'année suivante
date_1er_jour_année_suivante = DateSerial(année + 1, 1, 1)
For j = 0 To 6
date_j = date_1er_jour_année_suivante + j
jour = Format(date_j, "dddd", vbMonday)
If jour = "jeudi" Then
date_lundi_semaine1_année_suivante = date_j - 3
End If
Next
'détermination date du premier lundi de la semaine 1 de l'année précédente
date_1er_jour_année_précédente = DateSerial(année - 1, 1, 1)
For j = 0 To 6
date_j = date_1er_jour_année_précédente + j
jour = Format(date_j, "dddd", vbMonday)
If jour = "jeudi" Then
date_lundi_semaine1_année_précédente = date_j - 3
End If
Next
'détermination date du lundi de la semaine 1
Do
date_lundi_semaine1 = date_lundi_semaine1_année_suivante
If date_s >= date_lundi_semaine1 Then Exit Do
date_lundi_semaine1 = date_lundi_semaine1_année
If date_s >= date_lundi_semaine1 Then Exit Do
date_lundi_semaine1 = date_lundi_semaine1_année_précédente
Exit Do
Loop
'détermination de la semaine
No_Semaine = 1 + (date_s - date_lundi_semaine1) \ 7
End Function