Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Heures le dimanche

7 réponses
Avatar
Pierre RIFFIOD
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début) comment
savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com

7 réponses

Avatar
Pierre Fauconnier
Bonjour

Il y a probablement moyen de faire plus court :

Function Heures_Dimanche(Date_Debut As Date, Date_Fin As Date)
Dim Heures As Date

' 4 cas peuvent se présenter
' Début et fin un dimanche
' Début ET fin pas un dimanche
' Début un dimanche
' Fin un dimanche

' Début et fin le dimanche, on calcule Fin - Debut
If Weekday(Date_Debut, vbMonday) = 7 And Weekday(Date_Fin, vbMonday) = 7
Then
Heures_Dimanche = Date_Fin - Date_Debut
End If

' Début et fin pas un dimanche, donc 0
If Weekday(Date_Debut, vbMonday) <> 7 And Weekday(Date_Fin, vbMonday) <>
7 Then
Heures_Dimanche = 0
End If

' Début un dimanche, on calcule jour suivant 0 heures - debut
If Weekday(Date_Debut, vbMonday) = 7 And Weekday(Date_Fin, vbMonday) <>
7 Then
Heures_Dimanche = Int(Date_Debut) + 1 - Date_Debut
End If

' Fin un dimanche, on calcule fin - dimanche 0 heures
If Weekday(Date_Debut, vbMonday) <> 7 And Weekday(Date_Fin, vbMonday) =
7 Then
Heures_Dimanche = Date_Fin - Int(Date_Fin)
End If
End Function

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"Pierre RIFFIOD" a écrit dans le message de
news: 42b42b40$0$883$
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début) comment
savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com





Avatar
AV
Cellule d'accueil au format horaire :

Function HEUR_DIM(date_déb, date_fin)
For i = date_déb To date_fin Step 1 / 1440
If Weekday(i) = 1 Then s = s + 1
Next
HEUR_DIM = s / 1440
End Function

AV
Avatar
docm
Bonjour.

En A1
début

En B1
fin

en C1
ÚTEVAL(ANNEE(B1) & "-" & MOIS(B1) & "-" & JOUR(B1) & " 00:00")

en D1
=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;B1-C1;SI(JOURSEM(
A1)=1;C1-A1;0)))


docm

"Pierre RIFFIOD" a écrit dans le message news:
42b42b40$0$883$
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début) comment
savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com





Avatar
Daniel.M
Salut,

Sans utiliser C1 (qui s'abbrévie par ENT(B1) si on en a besoin),

en D1 :
=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;MOD(B1;1);MAX(0;ENT(B
1)-A1)))

En sachant que ça ne couvre que les cas où la différence d'heures entre B1 et A1
n'est JAMAIS supérieur à 1 jour (tel que mentionné dans le problème).

Salutations,

Daniel M.


"docm" wrote in message
news:u3kp%
Bonjour.

En A1
début

En B1
fin

en C1
ÚTEVAL(ANNEE(B1) & "-" & MOIS(B1) & "-" & JOUR(B1) & " 00:00")

en D1
=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;B1-C1;SI(JOURSEM(
A1)=1;C1-A1;0)))


docm

"Pierre RIFFIOD" a écrit dans le message news:
42b42b40$0$883$
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début) comment
savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com









Avatar
Daniel.M
Bonsoir Pierre,


1.
Avec ton premier temps en A1 et ton deuxième en B1, la formule suivante te
retourne le temps écoulé le dimanche (format [hh]:mm), même s'il y a plus de 24
heures (mais moins que 2 dimanches quand même) :

=MAX(0;SI(JOURSEM(B1)=1;B1;ENT(B1)-JOURSEM(B1-1)+1)
-SI(JOURSEM(A1)=1;A1;ENT(A1)-JOURSEM(A1)+8))

Elle est assez longue (rouillé!) mais s'exécute très rapidement étant donné les
SI et MAX qu'elle comporte.

2.
Pour une solution matricielle (à saisir avec Ctrl-Maj-Entrée), il y a la
suivante, tout en sachant qu'elle bâtit une matrice avec une cardinalité égale
au nombre de minutes entre les deux temps (A1 et B1), ce qui est non négligable
en espace et en temps de calcul :

=SOMME(--(1=JOURSEM(A1+((LIGNE(INDIRECT("1:"&ARRONDI((B1-A1)*1440;0)))-1)/1440))
))/1440


3.
Finalement, une autre soluce en VBA:

Function TempsLeDimanche(Temps1 As Double, Temps2 As Double) As Double

Dim T_1 As Double, T_2 As Double
If Weekday(Temps2) = 1 Then ' si c'est un dimanche
T_2 = Temps2
Else
' le lundi précédent/courant à 0:00 (ou dimanche minuit si on préfère)
T_2 = Int(Temps2) - Weekday(Temps2 - 1) + 1
End If

If Weekday(Temps1) = 1 Then ' si c'est un dimanche
T_1 = Temps1
Else
' le dimanche suivant à 0:00
T_1 = Int(Temps1) - Weekday(Temps1) + 8
End If

TempsLeDimanche = T_2 - T_1

If TempsLeDimanche < 0 Then TempsLeDimanche = 0 ' pas de résultat négatif

End Function

Salutations,

Daniel M.

"Pierre RIFFIOD" wrote in message
news:42b42b40$0$883$
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début) comment
savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com





Avatar
docm
Salut.

Sans utiliser C1 (qui s'abbrévie par ENT(B1) si on en a besoin),


Merci.
Donc, cela devient
=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;B1-ENT(B1);SI(JOU
RSEM(A1)=1;ENT(B1)-A1;0)))

docm

"Daniel.M" a écrit dans le message news:
O$
Salut,

Sans utiliser C1 (qui s'abbrévie par ENT(B1) si on en a besoin),

en D1 :

=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;MOD(B1;1);MAX(0;E

NT(B
1)-A1)))

En sachant que ça ne couvre que les cas où la différence d'heures entre B1
et A1

n'est JAMAIS supérieur à 1 jour (tel que mentionné dans le problème).

Salutations,

Daniel M.


"docm" wrote in message
news:u3kp%
Bonjour.

En A1
début

En B1
fin

en C1
ÚTEVAL(ANNEE(B1) & "-" & MOIS(B1) & "-" & JOUR(B1) & " 00:00")

en D1

=SI(ET(JOURSEM(A1)=1;JOURSEM(B1)=1);B1-A1;SI(JOURSEM(B1)=1;B1-C1;SI(JOURSEM(


A1)=1;C1-A1;0)))


docm

"Pierre RIFFIOD" a écrit dans le message
news:


42b42b40$0$883$
Bonjour,

Voilà je sèche sur le problème suiavnt :

- Pour une durée de 24h maximum (heure de fin - Heure de début)
comment



savoir combien de ces heures sont incluses dans un dimanche ?

Exemples :
Du Samedi 22h au Dimanche 08h00 -> 08 heures le dimanche
Du Dimanche 22h00 au Lundi 06h -> 02 heures le dimanche
Du dimance 14h00 au dimanche 22h00 -> 08h le dimanche
Du Lundi xxH au mardi xx heures ....0 heures le dimanche !!

Se sreait sympa une solution sans VBA mais bon., j'ai déjà planché de
nombreuses heures (le dimanche !!) sans trouver.

Merci beaucoup




---
avast! Antivirus: message Sortant propre.
Base de donnÚes des virus (VPS): 0524-6, 18/06/2005
Test du: 18/06/2005 16:10:14
avast! - copyright (c) 2000-2004 ALWIL Software.
http://www.avast.com













Avatar
AV
Salut Daniel,

Non mais...tu pensais quand même pas t'en sortir sans commentaires hein ? ;-)
Bien que la question originelle ne le laisse pas penser mais ..... et comme tu
le signales (faut quand même que je te rende d'abord justice !;-)) il y a des
limitations aux solutions selon l'intervalle entre Date déb et Date fin

Solu 1 (non matricielle) :
N'accepte pas 2 dimanches dans l'intervalle (tu l'as précisé !)

Solu 2 (matricielle) :
Elle est limitée à un intervalle de 45jours 12h et 16mn entre Date déb et Date
fin
Explication pour les ceusses que ça intéresserait (?)... :
la matricielle va échouer à cause de la partie ARRONDI((B1-A1)*1440;0) qui va
renvoyer (pour la fonction INDIRECT) un nombre de lignes supérieur à celles
possibles (65536) car
(45(jours)*1440) + (12*60) + 16 = 65536 (la limite)

Solu 3 (fonction perso "TempsLeDimanche") :
Elle échoue au-delà de 1 dimanche entre les bornes

Donc je reste "satisfait" de ma fonction perso à 2 sous avec son infâme
bouclette
(au demeurant assez rapide jusqu'à qques années d'intervalle)
Evidemment tout ça n'est que pour le smilblick !
AV