Nombre d'heures réalisées dans une plage horaire

Bonjour,

Je dois calculer le nombre d'heures réalisées entre minuit et 5 heures du matin, en fonction des heures entrée/sortie site et entrée/sortie pour repas. Je n'arrive pas appliquer une formule en colonne G dans le fichier joint qui me permette d'arriver au résultat attendu.

Merci pour votre aide...

Cdt.

Bonjour,

La fonction ci-dessous permet d'indiquer si les heures travaillées entre PBeg1 et PEnd2 sont dans le créneau 0,00 - 4,999...

Function PresenceHeures0a5(ByVal HeureDebut As Double, ByVal HeureFin As Double) As Boolean

Dim I As Integer

    PresenceHeures0a5 = False
    For I = Round(HeureDebut, 0) To Round(HeureFin, 0)
       Select Case I
              Case 0 To 4
                   PresenceHeures0a5 = True
                   Exit Function
       End Select
    Next I

End Function

Je trouve ce résultat, avec en cellule G6570 la formule =5-B6570 étant donné qu'il n'y a pas de repas avant 5h00.

Précision : Il n'y a pas de PEnd2 avant 5,72 h.

capture

Comment faut-il comprendre les heures > 24 ?

Bonjour,

Merci pour votre début de réponse.

Si l'heure de fin est 25,50, cela signifie que le badgeage a été effectué à 01h30 (24 pour minuit + 1.50 centièmes).

Bien cordialement, CM

Bonjour,

Une proposition via PowerQuery et l'utilisation de tableaux structurés. Dans la feuille "Heures_nuit" il faut faire clic droit > Actualiser (ou rafraichir je ne sais plus le terme exact) pour mettre à jour le tableau.


NB : pour ne pas alourdir le forum je n'ai laissé que 100 lignes dans votre fichier, veuillez copier/coller votre tableau complet puis actualiser la requête pour retrouver vos résultats.

La requête (IA) :

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    Typed = Table.TransformColumnTypes(Source, {
        {"Matricule", Int64.Type},
        {"PBeg1 (Entrée Site)", type number},
        {"PEnd1 (Sortie pour Repas)", type number},
        {"PBeg2 (Entrée du Repas)", type number},
        {"PEnd2 (Sortie Site)", type number}
    }),

    // 3) Fonction de chevauchement entre 2 intervalles [a,b] et [c,d]
    Overlap = (a as nullable number, b as nullable number, c as number, d as number) as number =>
        let
            inter = if a = null or b = null
                    then 0
                    else List.Min({b, d}) - List.Max({a, c})
        in
            if inter > 0 then inter else 0,

    // 4) Fin du 1er intervalle: PEnd1 si présent, sinon PEnd2 (pas de pause)
    AddEnd1 = Table.AddColumn(Typed, "End1", each
        if [#"PEnd1 (Sortie pour Repas)"] = null
        then [#"PEnd2 (Sortie Site)"]
        else [#"PEnd1 (Sortie pour Repas)"],
        type number
    ),

    // 5) Indicateur pause
    AddHasLunch = Table.AddColumn(AddEnd1, "HasLunch", each
        [#"PEnd1 (Sortie pour Repas)"] <> null and
        [#"PBeg2 (Entrée du Repas)"] <> null and
        [#"PEnd2 (Sortie Site)"] <> null,
        type logical
    ),

    // 6) Heures de nuit = chevauchement avec [0,5] + [24,29]
    AddNight = Table.AddColumn(AddHasLunch, "Heures_nuit", each
        // Intervalle avant la pause (ou tout l'amplitude s'il n'y a pas de pause)
        Overlap([#"PBeg1 (Entrée Site)"], [End1], 0, 5) +
        Overlap([#"PBeg1 (Entrée Site)"], [End1], 24, 29) +
        // Intervalle après la pause (uniquement si pause)
        ( if [HasLunch]
          then Overlap([#"PBeg2 (Entrée du Repas)"], [#"PEnd2 (Sortie Site)"], 0, 5)
             + Overlap([#"PBeg2 (Entrée du Repas)"], [#"PEnd2 (Sortie Site)"], 24, 29)
          else 0 ),
        type number
    ),

    Result = Table.RemoveColumns(AddNight, {"End1", "HasLunch"})
in
    Result

bonjour cocomomo1982, salut Saboh12617, Eric Kergresse,

une solution avec une formule dans un tableau structuré (juste les 100 premières lignes, autrement le fichier était trop grand)

Bonjour,

Merci beaucoup ! C'est parfait !

Je vous souhaite une excellente journée.

Bien cordialement

Si l'heure de fin est 25,50, cela signifie que le badgeage a été effectué à 01h30 (24 pour minuit + 1.50 centièmes).

Correction :

capture

Merci à tout le monde pour votre aide. On peut clôturer ce sujet.

Cdt, CM

Rechercher des sujets similaires à "nombre heures realisees plage horaire"