Option Explicit
Dim TabMois(1 To 12, 1 To 3) 'on définit les dimmensions du tableau des Mois 12 (colonne 0 du Combobox Mois et deux Colonnes 1 et 2 du combobox pour les dates limites du Mois
Dim oMonth As Byte, x As Byte
Dim FirstDayMonth As Long
Dim LastDayMonth As Long
Dim Jour As Long
Option Compare Text
Private Sub Label7_Click()
End Sub
Private Sub UserForm_initialize()
x = 0
For oMonth = 1 To 12 'Pour chaque mois
x = x + 1 'on incremente la Ligne a venir du tableau des Mois
FirstDayMonth = DateSerial(Range("v2"), oMonth, 1) 'Premier Jour du Mois
LastDayMonth = DateSerial(Range("v2"), oMonth + 1, 0) 'Dernier jour du mois
TabMois(x, 1) = Application.Proper(Format(FirstDayMonth, "mmmm")) ''on colle le mois du Jours formaté
TabMois(x, 2) = FirstDayMonth 'on colle le Jours
TabMois(x, 3) = LastDayMonth 'on colle le Jours
Next
With Me
With .CBx2
.List = TabMois 'on colle la Liste(Tableau)
End With
With .CBx5
.List = TabMois 'on colle la Liste(Tableau)
End With
End With
End Sub
Private Sub ANNULER_Click()
Unload Me
End Sub
Private Sub CBx2_Change()
With Me
With .CBx2 'avec le Combobox
FirstDayMonth = .List(.ListIndex, 1) 'je récupére la Date de début du mois
LastDayMonth = .List(.ListIndex, 2) 'je récupére la Date de fin du mois
End With
With .CBx3 'avec le Combobox
.Clear 'je le vide
For Jour = FirstDayMonth To LastDayMonth 'Pour chaque jour du Mois
.AddItem Application.Proper(Format(Jour, "dd/mm/yy")) 'Je colle le Jour Foramté dans le Combobox des Jours
Next Jour
End With
End With
End Sub
Private Sub CBx5_Change()
With Me
With .CBx5
FirstDayMonth = .List(.ListIndex, 1)
LastDayMonth = .List(.ListIndex, 2)
End With
With .CBx6
For Jour = FirstDayMonth To LastDayMonth
.AddItem Application.Proper(Format(Jour, "dd/mm/yy"))
Next Jour
End With
End With
End Sub
Private Sub OK_Click()
Application.ScreenUpdating = False
Dim l As Integer, c As Integer, colcible As Byte
With ActiveSheet
'_____________________________________MessageBox_Cases_Non_Remplies________________________________________________
'Si la personne n'est pas renseigner alors msgbox pour la renseigner
If CBx1.Value = "" Then
MsgBox ("Veuillez remplir PERSONNE")
Exit Sub
End If
'Si date de début pas renseigner msg box pour dire de les renseigner
If CBx3.Value = "" Or CBx4.Value = "" Then
MsgBox ("Veuillez remplir DATE DE DEBUT!")
Exit Sub
End If
'Si date de fin pas renseigner msg box pour dire de les renseigner
If CBx6.Value = "" Or CBx7.Value = "" Then
MsgBox ("Veuillez remplir DATE DE FIN!")
Exit Sub
End If
'__________________________________________Procédure_Remplissage_Cellules_____________________________________________
For c = 4 To 28
'Si personne alors on sauvegarde la colonne
If Me.CBx1.Value = .Cells(4, c) Then colcible = c: Exit For
Next c
For l = 12 To 743
'SI jour hors weekend ALORS
If Weekday(CDate(.Cells(l, 2)), vbMonday) < 6 Then
'Lors de la pose d'une demi journée, la case affiche Demi selon si les CBx date de fin sont égales à date de début
If CDate(CBx3.Value) = CDate(CBx6.Value) And CBx4.Value = CBx7.Value And CDate(CBx3.Value) = CDate(Cells(l, 2)) And CBx4.Value = Cells(l, 3) Then
Cells(l, colcible) = "Demi CP"
Else
'SI CBx3 égal date et CBx4 égal am ou pm ALORS on vise la cellule pour la remplir avec "Début"
If CDate(CBx3.Value) = CDate(Cells(l, 2)) And CBx4.Value = Cells(l, 3) Then
Cells(l, colcible) = "Début CP"
'SI jour de semaine +1 case ET Cbx3 = (date le la cellule avant) ET CBx4 = (demi de la cellule après) (règle le problème WE et case après Début vide)
If Weekday(CDate(.Cells(l + 1, 2)), vbMonday) < 6 And CBx4.Value = Cells(l, 3) And CDate(CBx3.Value) = CDate(Cells(l, 2)) Then
Cells(l + 1, colcible) = "CP"
End If
'ET SI date de la colonne est > à la date de CBx3 ET date < à la date de CBx6 ALORS cases correspondantes = CP
ElseIf CDate(.Cells(l, 2)) > CDate(Me.CBx3.Value) And CDate(.Cells(l, 2)) < Me.CBx6.Value Then
.Cells(l, colcible) = "CP"
'SI CBx6 égale date et CBx7 égale am ou pm ALORS on vise la cellule pour la remplir avec "Fin"
ElseIf CDate(CBx6.Value) = CDate(Cells(l, 2)) And CBx7.Value = Cells(l, 3) Then
Cells(l, colcible) = "Fin CP"
'SI jour de semaine -1 ET Cbx6 = (date le la cellule avant) ET CBx7 = (demi de la cellule après) (règle le problème WE et case avant fin vide)
If Weekday(CDate(.Cells(l - 1, 2)), vbMonday) < 6 And CBx7.Value = Cells(l, 3) And CDate(CBx6.Value) = CDate(Cells(l, 2)) Then
Cells(l - 1, colcible) = "CP"
End If
End If
End If
'__________________________________________On_Vide_Les_Cellules_Jours_Fériés_________________________________________
If CDate(Cells(l, 2)) = CDate(Range("t3")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t4")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t5")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t6")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t7")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t8")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t10")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t11")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t12")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t13")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t14")) Then
Cells(l, colcible).ClearContents
End If
If CDate(Cells(l, 2)) = CDate(Range("t15")) Then
Cells(l, colcible).ClearContents
End If
End If
Next l
End With
Unload Me
End Sub