Dim An As Integer
Private Sub CbMois_Change()
Dim semDep As Integer, semFin As Integer, i As Integer
If CbMois.ListIndex = -1 Then Exit Sub
'
' Numéro iso des première et dernière semaines du mois
semDep = Application.IsoWeekNum(DateSerial(An, CbMois.ListIndex + 1, 1))
semFin = Application.IsoWeekNum(DateSerial(An, CbMois.ListIndex + 2, 0))
'
' si le 1 janvier est en semaine 52 ou semaine 53 de l'année précédente alors semDep = 1
If semDep > 51 Then semDep = 1
'
' Nettoyage et garniture de la combobox
CbSem.Clear
'
For i = semDep To semFin: CbSem.AddItem i: Next
End Sub
Private Sub CbSem_Change()
Dim idx As Variant
Dim Lundi As Date
'
' Si aucun choix -> sortir
If CbSem.ListIndex = -1 Or CbMois.ListIndex = -1 Then Exit Sub
'
' Calcul du lundi correspondant au numéro de semaine
Lundi = 7 * Val(CbSem) + DateSerial(An, 1, 3) - Weekday(DateSerial(An, 1, 3)) - 5
'
'
With ThisWorkbook.Sheets(UCase(CbMois.Value)).Range("B3:BX3")
'
' Récupérer l'index de cellule de la date dans la plage
idx = Application.Match(CLng(Lundi), .Cells, 0)
'
' si trouvé alors y aller
If Not IsError(idx) Then Application.Goto .Cells(1, idx), True
End With
End Sub
Private Sub UserForm_Initialize()
'
' Récupération de l'année en cours
An = ThisWorkbook.Sheets("JANVIER").Range("H1").Value
End Sub