OVH Cloud OVH Cloud

Demande d'aide pour simplifier une formule

15 réponses
Avatar
Patrick Bastard
Bonjour, toutes et tous.

Je cherche à calculer le nombre d'heures de nuit (entre 21:00 et 6:00) pour
des positions de travail pouvant avoir 3 vacations par jour.
Par exemple : De 19:00 à 22:00, De 22:30 1:35, De 4:30 à 6:30 (les horaires
sont sur la même ligne, dans des colonnes adjacentes).
*Résultat attendu 5:35*
J'ai monté une usine à gaz avec 4 colonnes intermédiaires contenant des
formules avec des si, et, ou imbriqués. Ca marche, mais c'est lourd...

Si l'un d'entre vous pouvait m'aiguiller sur une solution plus légère (et
plus élégante), ma reconnaissance n'aurait d'égal que mon admiration.
;-))

A vous lire bientôt, j'espère,


--
Bien cordialement,
=====================================
P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net
Mais ça, j'ai pô trouvé.

5 réponses

1 2
Avatar
FxM
Bonsoir Daniel,

Merci pour le code.
Z'en prie.


1. Autre cas non-géré (mais plausible celui-là)
13:00 22:00 22:30 01:35 04:30 06:30 'causera des difficultés
alors que
14:00 22:00 22:30 01:35 04:30 06:30 ' passe
Plausible soit, mais pas vraiment légal en regard du Code du Travail

français (10 h par jour, 11 heures de coupure pour un salarié lambda).
Il n'y a guère que les cadres et les dirigeants qui soient corvéables à
merci.

Ce genre de problème génère plus de 70 cas possibles si on teste les bornes
explicitement.
AMA, la stratégie consistant à déterminer une heure mitoyenne est condamnée à
l'échec puisqu'il y aura toujours une heure se situant en deça (ou au-dessus)
qui aménera une comptabilisation erronée du temps (mais tu peux me confondre,
pas de problème) :-)
Dans sa question d'origine, Patrick parle de déterminer des heures de

nuit et, dans tous les cas, il y a bien un moment où il faudra arrêter
une journée. L'heure heure mitoyenne variable peut aisément devenir fixe
en fonction de sa réponse mais, comme tu le dis, ne couvrira elle aussi
pas tous les cas.
Il serait également possible de considérer une facturation sur plusieurs
jours par exemple. La seule vraie solution serait d'ajouter la date dans
les entrées, d'où disparition du problème de limite.
Je crois raisonnable de laisser la parole au demandeur. Patrick, si tu
nous lis ;o)


2.
T'as pas besoin d'Application.Volatile.
Exact aussi; toutefois, note que l'on ne saurait se passer de

Misange [ Bise amicale ;o) ]


3.
Au lieu de
deb = "21:00"
CDbl(TimeValue(deb))
pourquoi pas:
deb = TimeSerial(21,0,0)
La première solution m'avait uniquement attiré pour une question de

présentation de données.

Amicalement

FxM
[Rappel pour ceusse qui reviennent de Mars : c'est la fête des Mères]

Avatar
Daniel.M
Salut,

Je me lance.
±-SI(A1>«S("21:00");A1;ABS("21:00"))+"24:00"-C1+D1-E1+SI(F1<«S("6:00")
;F1;ABS("6:00"))


Avec les constantes, tu pourrais même la simplifier:

±-SI(A1>=Haut;A1;Haut)+1-C1+D1-E1+SI(F1<ºs;F1;Bas)
et même:
±-MAX(A1;Haut)+1-C1+D1-E1+MIN(F1;Bas)

Malheureusement, elle ne fonctionne pas (car elle ne teste pas les
'débordements' qu'aux extrémités, A1 et F1). Pour des exemples :

19:00 22:00 22:30 01:35 07:00 07:15 ' 4:05
ou
19:00 20:00 22:30 01:35 04:30 06:30 ' 4:35

Salutations,

Daniel M.

Avatar
Daniel.M
Bonsoir Fx,

1. Autre cas non-géré (mais plausible celui-là)
13:00 22:00 22:30 01:35 04:30 06:30 'causera des difficultés
alors que
14:00 22:00 22:30 01:35 04:30 06:30 ' passe
Plausible soit, mais pas vraiment légal en regard du Code du Travail

français (10 h par jour, 11 heures de coupure pour un salarié lambda).
Il n'y a guère que les cadres et les dirigeants qui soient corvéables à
merci.


Ah, les normes nationales! :-)
J'ai abordé le problème d'un point de vue plus théorique. Au fond, c'est le même
problème que celui qui consiste à savoir combien d'heures de nuit (entre 21h et
6h, mettons) une machine en panne entre HeureDébut et HeureFin fait-elle perdre?
Dans le problème de Patrick, il y a 3 pannes (c'est ce qui correspond aux
vacations) mais c'est la même idée.

...
Je crois raisonnable de laisser la parole au demandeur. Patrick, si tu
nous lis ;o)



T'as bien raison. J'attend d'ailleurs une réponse moi aussi. :-)

Salutations,

Daniel M.


Avatar
Patrick Bastard
Bonjour, *Daniel*.
*Pour reprendre les termes de ton intervention* -voir en fin de message :

Bienvenue Patrick.


Merci pour tes paroles de bienvenue.

On va regarder cela. Es-tu plus favorable à une solution VBA?


Le classeur que j'ai mis à dispo sur le site de Misange ne contient pas de
code VBA, car je ne maîtrise pas, loin de là.
Mais si c'est LA solution, restons ouverts : Oui, bien sûr VBA me
conviendrait, et d'autant plus si le code était commenté, ce qui me (nous)
permettrait de progresser.

;-))

Je profite de ce jour du 6 juin pour proposer aux lecteurs une pensée émue
pour tous ceux qui ont traversé la mare, il y a 60 ans, pour libérer la
France de la barbarie nazie.


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net

Avatar
Patrick Bastard
Bonjour à toi aussi, *FxM*.
*Je te remercie de ton intervention* -voir en fin de message :

le commentaire de Daniel me plait bien :

"J'ai abordé le problème d'un point de vue plus théorique. Au fond, c'est le
même
problème que celui qui consiste à savoir combien d'heures de nuit (entre 21h
et
6h, mettons) une machine en panne entre HeureDébut et HeureFin fait-elle
perdre?
Dans le problème de Patrick, il y a 3 pannes (c'est ce qui correspond aux
vacations) mais c'est la même idée."

L'objectif, pour mon cas, est de calculer la part de nuit réalisée par un
salarié, quelles que soient les heures de prise et de fin de service.
Il y a bien sût la législation qui prévoit :
- pas plus de 8h pour un salarié qui travaille habituellement de nuit,
- pas plus de 13h d'amplitude,
- pas plus de 10h de travail par jour
- Pause mini de 20 mn après 6h de travail consécutif
J'en passe...

(horaire) Plausible soit, mais pas vraiment légal en regard du Code du
Travail

français (10 h par jour, 11 heures de coupure pour un salarié lambda).
Il n'y a guère que les cadres et les dirigeants qui soient corvéables
à merci.

Mais il y a aussi les dépassements imprévus imposés par l'activité



Il serait également possible de considérer une facturation sur
plusieurs jours par exemple. La seule vraie solution serait d'ajouter
la date dans les entrées, d'où disparition du problème de limite.
Je crois raisonnable de laisser la parole au demandeur. Patrick, si tu
nous lis ;o)


Le fait d'ajouter les jours est une solution qui ne convient pas dans ce
cas, car les horaires sur lesquels sont calculées les heures de nuit sont le
résultat d'une recherche en table.

Merci de ta collaboration,

Bisous aux mères

Pensée émue à ceux qui y étaient il y a 60 ans.


--
Bien cordialement,
==================================== P. Bastard.
Pour me contacter, remplacez "Chez" par @ dans l'adresse

Une foule de conseils utiles sur le site de Misange :
http://www.excelabo.net

1 2