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
|
Public leconteur As Integer
Sub revprix()
Dim date1 As Date, date2 As Date
Dim i As Integer
Call fractionnementdates
'calcul de la 3émé colonne le nombre de jours par mois
i = 13
date1 = Cells(i, 2).Value
date2 = Cells(i + 1, 2).Value
Do While Cells(i + 1, 2).Value <> ""
date1 = Cells(i, 2).Value
date2 = Cells(i + 1, 2).Value
'si on est sur la ligne os arret on n'affiche pas le résultat de la ligne suivante et on saute une ligne
If Cells(i, 1).Value Like "OS arret" Then
Cells(i + 1, 3).Value = ""
Else
' si la date sup = 31 on la réduit à 30 car le mois suivant le décret le mois n'a que 30 jours
' ou si la date sup = 28/02/yyyy ou 29 /02/ yyyy on sera obligé de rectifier pour respecter le mois = 30jours
If DatePart("d", date2) = 31 Then
date2 = "30/" & DatePart("m", date2) & "/" & DatePart("yyyy", date2)
End If
If (DatePart("d", date2) = 28 And DatePart("m", date2) = 2) Then
date2 = DateSerial(Year(date2), Month(date2), Day(date2) + 2)
End If
If (DatePart("d", date2) = 29 And DatePart("m", date2) = 2) Then
date2 = DateSerial(Year(date2), Month(date2), Day(date2) + 1)
End If
'si date inférieure = 30 ou 31 ou 28 ou 29/02 et comme on est obligé d'avoir un mois = 30 jours quel que soit le mois, on va uniformiser la date inf au premier ddu mois prochain pour tomber dans tous les cas de figure à une différence de dates prenant en compte que 1mois)30jours
If DatePart("d", date1) >= 30 Or (DatePart("d", date1) = 28 And DatePart("m", date1) = 2) Or (DatePart("d", date1) = 29 And DatePart("m", date1) = 2) Then
date1 = DateSerial(Year(date1), Month(date1) + 1, 1)
Cells(i + 1, 3).Value = date2 - date1 + 1
Else
'dans ce cas on doit comptabiliser dans les jours travaillés le 1er jour de commencement ou de reprise
If Cells(i, 1).Value Like "OS reprendre" Or Cells(i, 1).Value Like "OS commencer" Then
Cells(i + 1, 3).Value = date2 - date1 + 1
Else
Cells(i + 1, 3).Value = date2 - date1
End If
End If
'on ne compte pas le 1er jour d'arrêt
If Cells(i + 1, 1).Value Like "OS arret" Then
Cells(i + 1, 3).Value = Cells(i + 1, 3).Value - 1
End If
End If
i = i + 1
Loop
Call prorata
UserForm1.Show
End Sub |