Macro Calcul entre deux date
Bonjour à tous,
J’aurais encore une fois, besoin de vos conseils.
J’ai une feuille nommée « Pointage », qui récapitule mes heures de travail tous les jours.
Sur cette feuille, il est aussi possible de calculer les heures qui seront affectées à un compteur RTT, ainsi que les heures supplémentaires.
J’ai réalisé une macro « CalculHeurePeriode » qui me permet, dans une autre feuille nommée « Data », de retrouver les heures effectuées en fonction des dates de début et de fin spécifiées.
Jusque-là tous va bien.
Mon souhait serait que pour la même période donnée, j’affiche le nombre d’heures de RTT et supplémentaires.
J’ai un peu réussi.
Seulement le report des heures RTT et supplémentaires doivent s’effectuer, qu’à partir du moment où les date de travail contenu dans la période, soit au moins égale à la moitié de la semaine.
J’ai mis un exemple dans mon fichier.
J’espère avoir formulé correctement ma demande, sinon demandez-moi
Merci encore
Titi32600
Slt titi32600,
essaie comme ca (j'éspère avoir compris le but
Sub CalculHeurePeriode()
Dim dt1 As Date
Dim dt2 As Date
Dim Lng As Integer
Dim Cln As Integer
Dim X As Integer
X = 5
dt1 = Sheets("Data").Cells(5, 75)
dt2 = Sheets("Data").Cells(6, 75)
' Calcule et affihe les heures effectuées dans la période
With Sheets("pointage")
For Lng = 13 To 325 Step 6 'Indique les ligne contenant les dates
For Cln = 6 To 12 ' Indique les colonnes contenant une date
If .Cells(Lng, Cln) >= dt1 And .Cells(Lng, Cln) <= dt2 Then
Sheets("Data").Range("BX" & X) = .Cells(Lng + 1, Cln).Value
' Calcule et affiche les heures SUP effectuées dans la période
If Cln = 12 And .Cells(Lng, Cln) >= dt1 + 2 And .Cells(Lng, Cln) <= dt2 - 2 Then
Sheets("Data").Range("BZ" & X) = .Cells(Lng + 1, 23).Value
' Calcule et affiche les heures RTT effectuées dans la période
Sheets("Data").Range("BY" & X) = .Cells(Lng + 2, 17).Value
End If
X = X + 1
End If
Next
Next
End With
End Sub
Slt m3ellem1,
Merci encore de ton aide.
Effectivement cela marche très bien pour certaine période "du 01 au 30/04/2019" et "du 01 au 31/07/2019"
Seulement, pour les période du "01 au 31/05/2019" et "01 au 030/06/2019", il me manque les données de la dernières ligne de la période même en modifiant les valeur +2 et -2 du code
If Cln = 12 And .Cells(Lng, Cln) >= dt1 +2 And .Cells(Lng, Cln) <= dt2 -2 Then
si je change en +2 et -0, les résultats sont assez probants, sauf pour la période du mois de mai.
je continu moi aussi a chercher une solution
titi32600
Slt,
Ben dans ce cas, il faut ajouter une loupe ou creer une fonction qui calcule le nombre de jours de chaque NO.SEMAINE ET si ce nombre est plus grand que 3 alors il passe a ta boucle sinon il passe a la prochaine semaine!
un essai
Sub CalculHeurePeriode()
Dim dt1 As Date
Dim dt2 As Date
Dim rng As Range
Dim Lng As Integer
Dim Cln As Integer
Dim X As Integer, T As Integer, Z As Integer
Set rng = Sheets("Data").Range("BX4:BZ34")
rng.ClearContents
X = 5
dt1 = Sheets("Data").Cells(5, 75)
dt2 = Sheets("Data").Cells(6, 75)
Z = Month(Sheets("Data").Cells(5, 75))
' Calcule et affihe les heures effectuées dans la période
With Sheets("pointage")
For Lng = 13 To 325 Step 6 'Indique les ligne contenant les dates
For Cln = 6 To 12 ' Indique les colonnes contenant une date
If .Cells(Lng, Cln) >= dt1 And .Cells(Lng, Cln) <= dt2 Then
Sheets("Data").Range("BX" & X) = .Cells(Lng + 1, Cln).Value
'Calcule du nombre de jours qu'appartiennent au mois choisi dans une semaine
T = Evaluate("=SUMPRODUCT(--(MONTH('pointage'!F" & Lng & ":L" & Lng & ")=" & Z & "))")
' Calcule et affiche les heures SUP effectuées dans la période
If Cln = 12 And T > 3 Then ' ici la condition T > 3 peut être adapter
Sheets("Data").Range("BZ" & X) = .Cells(Lng + 1, 23).Value
' Calcule et affiche les heures RTT effectuées dans la période
Sheets("Data").Range("BY" & X) = .Cells(Lng + 2, 17).Value
End If
X = X + 1
End If
Next
Next
End With
End Sub
Slt,
Effectivement ça arrange bien les choses.
le résultat est parfait pour la plupart des mois, mais reste toujours le mois de mai qui me pose des problèmes.
le résultat des RTT de la dernière semaine du mois de mai ne s’affiche pas.
En tout cas, merci encore de ton aide
tit32600
oui je viens de voir,
le problème vient de cette condition
And .Cells(Lng, Cln) <= dt2
il faut peut être créer une boucle if extra pour le moi de mai, je regarde demain ..
Bonne nuit
Slt
Ok pas de problème
Titi32600