Calcul 5 plages horaire différentes, heures jour et nuit

Bonjour,

Je trouve plein de formules différentes sur le forum mais je ne parviens pas à les ordonner et les adapter dans mon cas (je suis trop débute et ne maîtrise pas du tout la syntaxe, imbrication Excel etc… ).

Par conséquent je sollicite votre aide :

Je souhaite calculer le nombre d’heures effectuées sur 5 plages horaire différentes.

Le temps de travail des salariés est organisé comme suit :

Début de service (colonne C)

Début de Pause (colonne D)

Fin de Pause (colonne E)

Fin de service (colonne F)

Les salariés peuvent travailler de jour comme de nuit

Ce sur quoi j’ai besoin de votre aide s’il vous plaît :

colonne H, je souhaiterais que les heures effectuées entre 07H00 à 22H00 s’affiche automatiquement

colonne I, je souhaiterais que les heures effectuées entre 22H00 à 00H00 s’affiche automatiquement

colonne J, je souhaiterais que les heures effectuées entre 00H00 à 02H00 s’affiche automatiquement

colonne K, je souhaiterais que les heures effectuées entre 02H00 à 06H00 s’affiche automatiquement

colonne L, je souhaiterais que les heures effectuées entre 06H00 à 07H00 s’affiche automatiquement

En vous remerciant pour aide et votre temps.

Bonjour fafita

Est-ce qu'il faut décompter les heures de pause des différentes valeurs que tu demandes ?

Bonjour Steelson,

merci de bien vouloir m'aider.

oui, je ne veux pas que les temps de pause soient pris en compte.

ok

J'attendais ta réponse ... je reprends cela d'ici demain matin

Tellement complexe qu'il a fallu faire une fonction personnalisée à mettre dans une macro

Option Explicit
Function heures(plage As Range, bornes As Range)
Dim depuis As Date, jusque As Date
Application.Volatile
With plage
    heures = 0
    If .Count <> 2 Or bornes.Count <> 2 Then heures = "nombre de paramètres incorrect": Exit Function
    depuis = bornes.Cells(1, 1) + Int(.Cells(1, 1))
    jusque = bornes.Cells(2, 1) + Int(.Cells(1, 1))

    Select Case True
        Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
            heures = heures + .Cells(1, 2) - .Cells(1, 1)
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
            heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
        Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
            heures = heures + Application.Max(0, jusque - .Cells(1, 1))
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
            heures = heures + jusque - depuis
        Case Else
    End Select

    depuis = depuis - 1: jusque = jusque - 1
    Select Case True
        Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
            heures = heures + .Cells(1, 2) - .Cells(1, 1)
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
            heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
        Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
            heures = heures + Application.Max(0, jusque - .Cells(1, 1))
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
            heures = heures + jusque - depuis
        Case Else
    End Select

    depuis = depuis + 2: jusque = jusque + 2
    Select Case True
        Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
            heures = heures + .Cells(1, 2) - .Cells(1, 1)
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
            heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
        Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
            heures = heures + Application.Max(0, jusque - .Cells(1, 1))
        Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
            heures = heures + jusque - depuis
        Case Else
    End Select

End With
End Function

Il faut appeler 2 fois la fonction, d'abord entre début poste et début pause, ensuite ensuite fin pause et fin poste.

Je n'ai pas affecté les heures du %

Petite simplification du code

Option Explicit
Function heures(plage As Range, bornes As Range)
Dim depuis As Date, jusque As Date, deltajour As Integer
Application.Volatile
With plage

    heures = 0
    If .Count <> 2 Or bornes.Count <> 2 Then heures = "nombre de paramètres incorrect": Exit Function
    depuis = bornes.Cells(1, 1) + Int(.Cells(1, 1))
    jusque = bornes.Cells(2, 1) + Int(.Cells(1, 1))

    For deltajour = -1 To 1 Step 1
        Select Case True
            Case .Cells(1, 1) > depuis + deltajour And .Cells(1, 2) <= jusque + deltajour
                heures = heures + .Cells(1, 2) - .Cells(1, 1)
            Case .Cells(1, 1) <= depuis + deltajour And .Cells(1, 2) <= jusque + deltajour
                heures = heures + Application.Max(0, .Cells(1, 2) - depuis - deltajour)
            Case .Cells(1, 1) > depuis + deltajour And .Cells(1, 2) > jusque + deltajour
                heures = heures + Application.Max(0, jusque + deltajour - .Cells(1, 1))
            Case .Cells(1, 1) <= depuis + deltajour And .Cells(1, 2) > jusque + deltajour
                heures = heures + jusque - depuis
            Case Else
        End Select
    Next

End With
End Function

Bonjour Steelson,

merci pour ton temps et aide.

Je vais essayer de comprendre et mettre en pratique la macro, cela me fera un bon entrainement à l'utilisation d'excel.

@+

Rechercher des sujets similaires à "calcul plages horaire differentes heures jour nuit"