Function NumSem(Dat As Date) As Long
'Renvoie le numéro de semaine ISO pour une date donnée
Dim PremLundi As Date, SemLundi As Date, An As Long, PremLundiAnProch As Date
An = Year(Dat) 'Année de la date
PremLundi = DateSerial(An, 1, 4) - Weekday(DateSerial(An, 1, 4), vbMonday) + 1 'Premier lundi de l'année
PremLundiAnProch = DateSerial(An + 1, 1, 4) - Weekday(DateSerial(An + 1, 1, 4), vbMonday) + 1 'Premier lundi de l'année suivante
If Dat < PremLundi Then
An = An - 1
ElseIf Dat >= PremLundiAnProch Then
An = An + 1
End If
PremLundi = DateSerial(An, 1, 4) - Weekday(DateSerial(An, 1, 4), vbMonday) + 1
SemLundi = Dat - Weekday(Dat, vbMonday) + 1
NumSem = CLng((SemLundi - PremLundi) / 7 + 1)
End Function
Sub SemSuiv()
Dim Tablo
'Séparation n° semaine / année
Tablo = Split(Range("A2").Value, "/")
'Conversion en numérique
Tablo(0) = CLng(Trim(Replace(Tablo(0), "Sem N°", "")))
Tablo(1) = CLng(Trim(Tablo(1)))
'Vérification si dernière semaine de l'année
If Tablo(0) = NumSem(DateSerial(Tablo(1), 12, 28)) Then
'Si oui, année + 1 et semaine 1
Tablo(1) = Tablo(1) + 1
Tablo(0) = 1
Else
'Si non semaine + 1
Tablo(0) = Tablo(0) + 1
End If
Range("A2").Value = "Sem N°" & Tablo(0) & " / " & Tablo(1)
End Sub