1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287
| Sub Calcul_ED()
'Sommaire-----------------------------------------------------------------------------------------------------------
'01 - Définition des variables
'02 - Sélection de la case de départ pour chaque variable
'03 - Détermination des variables
'04 - Détection des limites
'05 - Détermination de l'ED fonction date de départ (retraite)
'06 - Détection données lignes suivantes
'07 - Redéfinition des variables
'08 - Retour à la case départ---------------------------------------(Fin de la procédure principale)
'09 - CALCUL CPA
'10 - CALCUL SI ARRIVEE
'11 - CALCUL SI DEPART
'12 - CALCUL SI TEMPS PARTIEL
'Fin du sommaire-----------------------------------------------------------------------------------------------------
'01 - Définition des variables
Dim date_planning As Date, date_débutpres As Date, date_finpres As Date, début_CPA, fin_CPA
Dim début_tp, fin_tp, date_départ As Date, date_départCET As Date
Dim ED_normal As Byte, ED_tp As Byte
'02 - Séléction de la case de départ pour chaque variable
Range("AO4").Select
'03 - Détermination des variables
'03.1 - Détermination de la date
date_planning = ActiveCell.Offset(-3, 0)
'03.2 - Détermination bases ED
ED_normal = ActiveCell.Offset(0, -32) / 100
ED_tp = ActiveCell.Offset(0, -6) / 100
'03.3 - Détermination date arrivée, départ (autre que retraite)
If ActiveCell.Offset(0, -14) <> "" Then date_débutpres = ActiveCell.Offset(0, -14)
If ActiveCell.Offset(0, -13) <> "" Then date_finpres = ActiveCell.Offset(0, -13)
'03.4 - Détermination période CPA
début_CPA = ActiveCell.Offset(0, -11)
fin_CPA = ActiveCell.Offset(0, -10)
'03.5 - Détermination période TP (Temps Partiel)
début_tp = ActiveCell.Offset(0, -8)
fin_tp = ActiveCell.Offset(0, -7)
'03.6 - Détermination date de retraite (avec et sans CET)
date_départ = ActiveCell.Offset(0, -2)
date_départCET = ActiveCell.Offset(0, -1)
Dim Nb_colonnes As Integer, Nb_lignes As Integer
Nb_colonnes = 0
Nb_lignes = 0
'04 - Détection des limites
'04.1 - Détection des limites de lignes
While ActiveCell <> "Fin"
'04.2 - Détection des limites de colonne
While ActiveCell <> "Fin"
'05 - Détermination de l'ED fonction date de départ (retraite)
If date_planning > date_départ Then
ActiveCell.Value = "0"
ActiveCell.Offset(0, 2).Select
date_planning = ActiveCell.Offset(-(3 + Nb_lignes), 2)
Nb_colonnes = Nb_colonnes + 2
Else
ActiveCell.Value = Calcul_débpres(date_planning, Nb_colonnes)
date_planning = ActiveCell.Offset(-(3 + Nb_lignes), 2)
ActiveCell.Offset(0, 2).Select
Nb_colonnes = Nb_colonnes + 2
End If
Wend
'06 - Détection données lignes suivantes
If IsEmpty(ActiveCell.Offset(1, -(Nb_colonnes + 32))) Then
If IsEmpty(ActiveCell.Offset(2, -(Nb_colonnes + 32))) Then
ActiveCell.Offset(3, -Nb_colonnes).Select
Nb_lignes = Nb_lignes + 2
Else
ActiveCell.Offset(2, -Nb_colonnes).Select
Nb_lignes = Nb_lignes + 1
End If
Else
ActiveCell.Offset(1, -Nb_colonnes).Select
End If
Nb_colonnes = 0
Nb_lignes = Nb_lignes + 1
'07 - Redéfinition des variables
date_planning = ActiveCell.Offset(-(3 + Nb_lignes), 0)
ED_normal = ActiveCell.Offset(0, -32) / 100
ED_tp = ActiveCell.Offset(0, -6) / 100
date_débutpres = ActiveCell.Offset(0, -14)
date_finpres = ActiveCell.Offset(0, -13)
début_CPA = ActiveCell.Offset(0, -11)
fin_CPA = ActiveCell.Offset(0, -10)
début_tp = ActiveCell.Offset(0, -8)
fin_tp = ActiveCell.Offset(0, -7)
date_départ = ActiveCell.Offset(0, -2)
date_départCET = ActiveCell.Offset(0, -1)
Wend
'08 - Retour à la case départ---------------------------------------
Range("AO4").Select
Nb_lignes = 0
Nb_colonnes = 0
End Sub
'09 - CALCUL CPA---------------------------------------------------------------------
Function Calcul_CPA(date_planning, Nb_colonnes)
'09.1 - Vérification existence CPA
If début_CPA <> "" Then
'09.2 - Vérification si 1e quinzaine ou 2e quinzaine du mois
If Month(début_CPA) = Month(date_planning) And Year(début_CPA) = Year(date_planning) Then
If Day(début_CPA) > 15 Then
ActiveCell.Value = Calcul_tp(date_planning, Nb_colonnes)
End If
Else
'09.3 - Calcul CPA
Select Case (date_planning)
Case Is < début_CPA
ActiveCell.Value = Calcul_tp(date_planning, Nb_colonnes)
Case début_CPA To fin_CPA
ActiveCell.Value = Calcul_tp(date_planning, Nb_colonnes) * 0.5
Case fin_CPA To date_départ
ActiveCell.Value = Calcul_tp(date_planning, Nb_colonnes)
End Select
End If
Else
ActiveCell.Value = Calcul_tp(date_planning, Nb_colonnes)
End If
End Function
'10 - CALCUL SI ARRIVEE ---------------------------------------------------------------------------------------------
Function Calcul_débpres(date_planning, Nb_colonnes)
'10.1 - Vérification présence d'une date de départ
If date_débutpres <> "" Then
'10.2 - Calcul de l'ED en fonction de la date du planning
If date_planning < date_débutpres Then
ActiveCell.Value = "0"
Else
'10.3 - Renvoie à la fonction Calcul_finpres
ActiveCell.Value = Calcul_finpres(date_planning, Nb_colonnes)
End If
Else
ActiveCell.Value = Calcul_finpres(date_planning, Nb_colonnes)
End If
End Function
'11 - CALCUL SI DEPART ------------------------------------------------------------------------------------------------
Function Calcul_finpres(date_planning, Nb_colonnes)
'11.1 - Vérification présence d'une date de départ
If date_finpres <> "" Then
'11.2 - Calcul de l'ED en fonction de la date du planning
If date_planning > date_finpres Then
ActiveCell.Value = "0"
Else
'11.3 - Renvoie à la fonction Calcul_CPA
ActiveCell.Value = Calcul_CPA(date_planning, Nb_colonnes)
End If
Else
ActiveCell.Value = Calcul_CPA(date_planning, Nb_colonnes)
End If
End Function
'12 - CALCUL SI TEMPS PARTIEL -----------------------------------------------------------------------------------------
Function Calcul_tp(date_planning, Nb_colonnes)
'12.1 - Détection existence d'un TP
If début_tp <> "" Then
'12.2 - Vérification si 1e quinzaine ou 2e quinzaine du mois
If Month(début_tp) = Month(date_planning) And Year(début_tp) = Year(date_planning) Then
If Day(début_tp) > 15 Then
ActiveCell.Value = ActiveCell.Offset(0, -(32 + Nb_colonnes)) / 100
End If
Else
'12.3 - Détermination de l'ED
If date_planning > début_tp And date_planning < fin_tp Then
ActiveCell.Value = ActiveCell.Offset(0, -(6 + Nb_colonnes)) / 100
Else
ActiveCell.Value = ActiveCell.Offset(0, -(32 + Nb_colonnes)) / 100
End If
End If
Else
ActiveCell.Value = ActiveCell.Offset(0, -(32 + Nb_colonnes)) / 100
End If
End Function |
Partager