VBA - Calcul d'un temps avec réparation sur plage horaire

Bonjour à tous, je viens solliciter votre aide :

Je souhaite créer une fonction ou autre pour calculer un temps entre deux dates en heures et répartir ce temps en fonction des équipes en 3x8.

Exemple:

Date_début 18/01/2023 23:00:00

Date_fin : 19/01/2023 06:00:00

Temps total : jusque la ça va : 23-6 (changement de jour) 7h

Deuxième étape :

1x8 : 5h-13H: résultat 1h

2x8 : 13h-21h : résultat 0

3x8 : 21h-5 h : Résultat 6h ( 1h de 23h à 00h et 5h de 00h à 5h) apres je passe en quart du matin

j'avais vu ce post : quir épond en partie à mon besoin, mais il passe par une fonction Excel avec un système de plage

et il gère des pauses. chose que je n'ai pas besoin

https://forum.excel-pratique.com/excel/calcul-5-plages-horaire-differentes-heures-jour-et-nuit-14076...

Merci d'avance pour votre aide,

bien cordialement

bonjour,

une proposition via une fonction personnalisée

splitplage(debut,fin,numerodeplage)

Fonction qui répartit les heures prestées entre debut et fin en 3 plages horaires (5 à 13, 13 à 21 et 21 à 5) et retourne les heures prestées pour la plage correspondant au numéro de plage (s'il n'y a pas de numéro de plage mentionné, la fonction renvoie les heures prestées pour chacune des plages)

Function splitplage(debut, fin, Optional plagenum = 0)
    Dim pl(1 To 1, 1 To 3)
    h = debut - Int(debut)
    Select Case h
        Case Is < 5 / 24
            plage = 1: pl(1, 3) = Application.Min(5 / 24 - h, fin - debut): debut = debut + pl(1, 3)
        Case Is < 13 / 24
            plage = 2: pl(1, 1) = Application.Min(13 / 24 - h, fin - debut): debut = debut + pl(1, 1)
        Case Is < 21 / 24
            plage = 3: pl(1, 2) = Application.Min(21 / 24 - h, fin - debut): debut = debut + pl(1, 1)
        Case Is <= 1
            plage = 3: pl(1, 3) = Application.Min(1 - h, fin - debut): debut = debut + pl(1, 3)
        Case Else
    End Select

    Do While debut < fin
        pl(1, plage) = pl(1, plage) + Application.Min(8 / 24, fin - debut)
        debut = debut + 8 / 24
        plage = plage + 1
        If plage > 3 Then plage = 1
    Loop

    If plagenum = 0 Then
        splitplage = pl
    Else
        splitplage = pl(1, plagenum)
    End If
End Function
14splitplage.xlsm (16.40 Ko)

Merci beaucoup

cela répond à mon besoin

cordialement

Rechercher des sujets similaires à "vba calcul temps reparation plage horaire"