Sub CreateConges()
Dim Cel As Object
Dim NbLig As Integer, DebLig As Integer, DateDeb, DateFin
Dim IndPlan(14), MonInd As Integer
Dim DateEnCours, LeMois As Integer
Dim LigPers As Integer, NomPers As String, NbPers As Integer
Dim NomPlan As String
'
IndPlan(1) = "Janvier": IndPlan(2) = "Février": IndPlan(3) = "Mars"
IndPlan(4) = "Avril": IndPlan(5) = "Mai": IndPlan(6) = "Juin"
IndPlan(7) = "Juillet 1": IndPlan(8) = "Juillet 2"
IndPlan(9) = "Août": IndPlan(10) = "Septembre": IndPlan(11) = "Octobre"
IndPlan(12) = "Novembre": IndPlan(13) = "Décembre": IndPlan(14) = "Janvier 2"
'
Sheets("Vacances").Activate
For NbPers = 8 To 106 Step 7
ActiveSheet.Range("B" & NbPers).Select
DebLig = Selection.Row: NomPers = Selection.Value
For NbLig = 0 To 5
DateDeb = ActiveSheet.Range("D" & DebLig + NbLig).Value
DateEnCours = DateDeb
DateFin = ActiveSheet.Range("G" & DebLig + NbLig).Value
' On sort de la boucle si il manque une date de congé
If DateDeb = "" Or DateFin = "" Then Exit For
' Sinon on fait la mise en forme
Dim MonAn: MonAn = Sheets("Accueil").Range("D24")
' Détermine approximativement sur quel mois commencé
If DateEnCours - DateSerial(MonAn, 1, 1) >= 28 Then
MonInd = Int(((DateEnCours - DateSerial(MonAn, 1, 1)) / 28) + 0.5)
Else
MonInd = 1
End If
' Commence la boucle pour chaque jour du planning
Do While DateEnCours < DateFin
' Sélectionne le classeur contenant la valeur du mois des congés
Sheets("Plan " & IndPlan(MonInd)).Activate
' Trouve la ligne de la personne en cours
LigPers = LigFind(ActiveSheet.Name, 4, NomPers)
If LigPers = 0 Then
MsgBox "Erreur de recherche pour le nom : " & NomPers
Exit For
End If
' Vérifie si la date correspond aux congés, si oui inscrit "V"
For Each Cel In ActiveSheet.Range("E19:AF19")
If Cel.Value >= DateDeb And Cel.Value <= DateFin Then
Application.EnableEvents = False
If Weekday(Cel.Value, vbMonday) > 5 Then
ActiveSheet.Cells(LigPers, Cel.Column).Value = "X"
Else
ActiveSheet.Cells(LigPers, Cel.Column).Value = "V"
End If
Application.EnableEvents = True
' Met à jour la date en cours de traitement
DateEnCours = Cel.Value
End If
Next
' Incrémente d'un jour supplémentaire
If DateEnCours < DateFin Then
MonInd = MonInd + 1
End If
Loop
Sheets("Vacances").Activate
Next NbLig
Next NbPers
End Sub