Autres Calcul des amplitudes Excel 2007

Daniel38

XLDnaute Occasionnel
Bonjour, Bonsoir

Le calcul des amplitudes de travail n'est pas évident sachant qu'il peut y avoir :
- des journées de repos (c'est ok)
- des journées de travail comprenant matin et après-midi (ça semble ok) mais bug sur certains jours au début et en fin de mois
- des journées de travail que le matin (Oops!)
- des journées de travail que l'après-midi (Re-Oops!!)

Les 3 lignes vides, sauf un ' pour calculer le nombre de lignes pour le for to, serve à additionner les heures à droite du tableau cela marche très bien...

Est-ce la bonne méthode en utilisant activecell.offset et cells (lg,col) pour calculer ces amplitudes par jour ?
L'idéal serait de pouvoir copier la formule comme celle en colonne J (entrée à la main...) sur la dernière ligne du travail du jour en colonne H avec la macro mais bon je ne trouve pas :(

Le fichier joint donne une partie du tableau et avec la macro pour calculer.

Daniel :)
 

Pièces jointes

  • Calcul des amplitudes.xlsm
    40.5 KB · Affichages: 9
Solution
Pas de soucis. Le code suivant modifie uniquement la colonne H
VB:
Sub Calcul_Amplitude_Tableau()
Dim T As Variant, Tr As Variant, lg As Long, i As Long, Dt As Double, deb As Single, fin As Single

    With ActiveSheet
        lg = .Cells(Rows.Count, "A").End(xlUp).Row
        T = .Range("A1:K" & lg).Value: ReDim Tr(1 To lg, 1 To 1)
        For i = 4 To lg
            If IsDate(T(i, 3)) Then
                If Not Dt = CDate(T(i, 3)) Then
                    Dt = CDate(T(i, 3))
                    If deb <> 0 And fin <> 0 Then Tr(i - 1, 1) = fin - deb
                    deb = IIf(T(i, 4) = "", T(i, 6), T(i, 4))
                Else
                    fin = IIf(T(i, 7) = "", T(i, 5), T(i, 7))
                End If
            End If...

p56

XLDnaute Occasionnel
Bonjour,
On peux écrire le code comme ceci :
VB:
Sub Calcul_Amplitude_Tableau()
Dim T As Variant, lg As Long, i As Long, Dt As Double, deb As Single, fin As Single

    With ActiveSheet
        lg = .Cells(Rows.Count, "A").End(xlUp).Row
        T = .Range("A1:K" & lg).Value
        For i = 4 To lg
            If IsDate(T(i, 3)) Then
                If Not Dt = CDate(T(i, 3)) Then
                    Dt = CDate(T(i, 3))
                    If deb <> 0 And fin <> 0 Then T(i - 1, 8) = fin - deb
                    deb = IIf(T(i, 4) = "", T(i, 6), T(i, 4))
                Else
                    fin = IIf(T(i, 7) = "", T(i, 5), T(i, 7))
                End If
            End If
        Next i
        T(i - 1, 8) = fin - deb
        .Range("A1").Resize(UBound(T, 1), UBound(T, 2)) = T
    End With
 End Sub
P.
 
Dernière édition:

Daniel38

XLDnaute Occasionnel
Bonsoir

P56, je me suis rendu compte que la procédure fige les formules et en efface certaines

Y'a t'il une solution pour éviter ceci car il faut que les sommes par jour et les calculs TTE et TTR reste dynamiques avec les formules car on modifie souvent les horaires ?

j'ai remplacé T = .Range("A1:K" & lg).Value par T = .Range("A1:H" & lg).Value
et ça marche


mais d'autres formules sont supprimées (total des heures à 50% ) avec la procédure qui calcul les sommes par jour ?

La possibilité de mettre la formule somme() dans la dernière ligne du jour colonne 8 pour calculer cette amplitude serait top?
(attention il peut y avoir le matin seul travaillé ou l’après-midi ou la journée)

je ne comprends pas.


Daniel :confused: :oops::rolleyes:
 

Pièces jointes

  • Calcul des amplitudes.xlsm
    86.5 KB · Affichages: 4
Dernière édition:

p56

XLDnaute Occasionnel
Pas de soucis. Le code suivant modifie uniquement la colonne H
VB:
Sub Calcul_Amplitude_Tableau()
Dim T As Variant, Tr As Variant, lg As Long, i As Long, Dt As Double, deb As Single, fin As Single

    With ActiveSheet
        lg = .Cells(Rows.Count, "A").End(xlUp).Row
        T = .Range("A1:K" & lg).Value: ReDim Tr(1 To lg, 1 To 1)
        For i = 4 To lg
            If IsDate(T(i, 3)) Then
                If Not Dt = CDate(T(i, 3)) Then
                    Dt = CDate(T(i, 3))
                    If deb <> 0 And fin <> 0 Then Tr(i - 1, 1) = fin - deb
                    deb = IIf(T(i, 4) = "", T(i, 6), T(i, 4))
                Else
                    fin = IIf(T(i, 7) = "", T(i, 5), T(i, 7))
                End If
            End If
        Next i
        Tr(i - 1, 1) = fin - deb
        .Range("H1").Resize(UBound(Tr, 1), UBound(Tr, 2)) = Tr
    End With
 End Sub
P.
 

Discussions similaires

Réponses
6
Affichages
422

Statistiques des forums

Discussions
313 198
Messages
2 096 142
Membres
106 505
dernier inscrit
ngomez