Controler si l'heure machine se situe dans une plage horaire déterminée

Le
JeanYves
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou 'heure de
jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir avant
minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne fontionne
pas si la plage est située sur 2 jours comme 23:00 à 05:00 par exemple

Avez vous l'astuce ? D'avance merci

J-Yves
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JeanYves
Le #16394291
Merci FABIEN

J'ai adapté et cela fonctionne bien
Aprés le repas on a les idées + claires ;-)

@ Bientot

J-Yves
"JeanYves" g66rte$lm2$

"Fabien"
Fabien a écrit :
JeanYves a écrit :
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou
'heure de jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir avant
minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne
fontionne pas si la plage est située sur 2 jours comme 23:00 à 05:00
par exemple

Avez vous l'astuce ? D'avance merci

J-Yves





Salut J-Yves
Avec quelque chose comme
Public Function test_plage(hdeb As String, hfin As String, Htest As
String) As Boolean
'Retourne Vrai si dans la plage
Dim Hdebnum, HfinNum, HtestNum As Double
Hdebnum = convert_tps_centieme(hdeb)
HfinNum = convert_tps_centieme(hfin)
HtestNum = convert_tps_centieme(Htest)
If Hdebnum > HfinNum Then
test_plage = HtestNum >= Hdebnum Or HtestNum <= HfinNum
Else
test_plage = HtestNum >= Hdebnum And HtestNum <= HfinNum
End If

End Function

Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1) * 5 / 3) / 100
End Function

A tester bien sur ;-)
@+


Oups , c'est ok si les heures sont au format hh:mm ou h:mm
Time retournant du hh:mm:ss soit on tronque
MyTime=left(MyTime,len(MyTime)-3)

Soit
Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1, 2) * 5 / 3) / 100
End Function



Merci mais j'obtiens ces résultats qui ne sont pas systématiquement bon

HTest 11:59:32 - Debut 01:00:01 - Fin 08:00:00
TestNum 11,9833333333333 - DebNum 1 - FinNum 8
Cas Hors plage
Ok

HTest 11:58:50 - Debut 23:00:01 - Fin 08:00:00
TestNum 11,9666666666667 - DebNum 23 - FinNum 8
Cas Dans la plage
Pas bon

HTest 01:56:58 - Debut 23:00:01 - Fin 08:00:00
TestNum 1,93333333333333 - DebNum 23 - FinNum 8
Cas DAns la plage
Ok

HTest 01:55:47 - Debut 01:00:01 - Fin 08:00:00
TestNum 1,91666666666667 - DebNum 1 - FinNum 8
Cas Hors plage

Pas bon

@+

JY



Fabien
Le #16393081
JeanYves a écrit :
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou 'heure de
jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir avant
minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne fontionne
pas si la plage est située sur 2 jours comme 23:00 à 05:00 par exemple

Avez vous l'astuce ? D'avance merci

J-Yves





Salut J-Yves
Avec quelque chose comme
Public Function test_plage(hdeb As String, hfin As String, Htest As
String) As Boolean
'Retourne Vrai si dans la plage
Dim Hdebnum, HfinNum, HtestNum As Double
Hdebnum = convert_tps_centieme(hdeb)
HfinNum = convert_tps_centieme(hfin)
HtestNum = convert_tps_centieme(Htest)
If Hdebnum > HfinNum Then
test_plage = HtestNum >= Hdebnum Or HtestNum <= HfinNum
Else
test_plage = HtestNum >= Hdebnum And HtestNum <= HfinNum
End If

End Function

Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1) * 5 / 3) / 100
End Function

A tester bien sur ;-)
@+
Fabien
Le #16393151
Fabien a écrit :
JeanYves a écrit :
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou
'heure de jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir
avant minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne
fontionne pas si la plage est située sur 2 jours comme 23:00 à 05:00
par exemple

Avez vous l'astuce ? D'avance merci

J-Yves





Salut J-Yves
Avec quelque chose comme
Public Function test_plage(hdeb As String, hfin As String, Htest As
String) As Boolean
'Retourne Vrai si dans la plage
Dim Hdebnum, HfinNum, HtestNum As Double
Hdebnum = convert_tps_centieme(hdeb)
HfinNum = convert_tps_centieme(hfin)
HtestNum = convert_tps_centieme(Htest)
If Hdebnum > HfinNum Then
test_plage = HtestNum >= Hdebnum Or HtestNum <= HfinNum
Else
test_plage = HtestNum >= Hdebnum And HtestNum <= HfinNum
End If

End Function

Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1) * 5 / 3) / 100
End Function

A tester bien sur ;-)
@+


Oups , c'est ok si les heures sont au format hh:mm ou h:mm
Time retournant du hh:mm:ss soit on tronque
MyTime=left(MyTime,len(MyTime)-3)

Soit
Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1, 2) * 5 / 3) / 100
End Function
JeanYves
Le #16393541
"Fabien"
Fabien a écrit :
JeanYves a écrit :
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou
'heure de jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir avant
minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne
fontionne pas si la plage est située sur 2 jours comme 23:00 à 05:00 par
exemple

Avez vous l'astuce ? D'avance merci

J-Yves





Salut J-Yves
Avec quelque chose comme
Public Function test_plage(hdeb As String, hfin As String, Htest As
String) As Boolean
'Retourne Vrai si dans la plage
Dim Hdebnum, HfinNum, HtestNum As Double
Hdebnum = convert_tps_centieme(hdeb)
HfinNum = convert_tps_centieme(hfin)
HtestNum = convert_tps_centieme(Htest)
If Hdebnum > HfinNum Then
test_plage = HtestNum >= Hdebnum Or HtestNum <= HfinNum
Else
test_plage = HtestNum >= Hdebnum And HtestNum <= HfinNum
End If

End Function

Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1) * 5 / 3) / 100
End Function

A tester bien sur ;-)
@+


Oups , c'est ok si les heures sont au format hh:mm ou h:mm
Time retournant du hh:mm:ss soit on tronque
MyTime=left(MyTime,len(MyTime)-3)

Soit
Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1, 2) * 5 / 3) / 100
End Function



Merci mais j'obtiens ces résultats qui ne sont pas systématiquement bon

HTest 11:59:32 - Debut 01:00:01 - Fin 08:00:00
TestNum 11,9833333333333 - DebNum 1 - FinNum 8
Cas Hors plage
Ok

HTest 11:58:50 - Debut 23:00:01 - Fin 08:00:00
TestNum 11,9666666666667 - DebNum 23 - FinNum 8
Cas Dans la plage
Pas bon

HTest 01:56:58 - Debut 23:00:01 - Fin 08:00:00
TestNum 1,93333333333333 - DebNum 23 - FinNum 8
Cas DAns la plage
Ok

HTest 01:55:47 - Debut 01:00:01 - Fin 08:00:00
TestNum 1,91666666666667 - DebNum 1 - FinNum 8
Cas Hors plage

Pas bon

@+

JY
Fabien
Le #16394281
JeanYves a écrit :
"Fabien"
Fabien a écrit :
JeanYves a écrit :
Bonjour,

Je voudrais déterminer si je suis dans la plage 'Heure de nuit' ou
'heure de jour' en fonction de l'heure courante de l'ordinateur.

Ce que j'ai fait :

MyTime = Time

Debug.Print "Heure Courante " & MyTime

Select Case MyTime
Case Is > HDebut
Debug.Print "Heure de nuit le soir"
Case Is < HFin
Debug.Print "Heure de nuit le matin"
Case Else
Debug.Print "Heure de jour"
End Select
(HDebut et HFin proviennent d'une table parramètres)

Mon problème :
Cela fonctionne bien tant que l'heure de début est située le soir avant
minuit et si l'heure de fin est située le matin aprés minuit.
Si la plage change et devient par exemple 01:00 à 05:00 cela ne ne
fonctionnera pas.

L'idée est de faire 'Case HDebut to HFin' mais dans ce cas cela ne
fontionne pas si la plage est située sur 2 jours comme 23:00 à 05:00 par
exemple

Avez vous l'astuce ? D'avance merci

J-Yves





Salut J-Yves
Avec quelque chose comme
Public Function test_plage(hdeb As String, hfin As String, Htest As
String) As Boolean
'Retourne Vrai si dans la plage
Dim Hdebnum, HfinNum, HtestNum As Double
Hdebnum = convert_tps_centieme(hdeb)
HfinNum = convert_tps_centieme(hfin)
HtestNum = convert_tps_centieme(Htest)
If Hdebnum > HfinNum Then
test_plage = HtestNum >= Hdebnum Or HtestNum <= HfinNum
Else
test_plage = HtestNum >= Hdebnum And HtestNum <= HfinNum
End If

End Function

Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1) * 5 / 3) / 100
End Function

A tester bien sur ;-)
@+


Oups , c'est ok si les heures sont au format hh:mm ou h:mm
Time retournant du hh:mm:ss soit on tronque
MyTime=left(MyTime,len(MyTime)-3)

Soit
Public Function convert_tps_centieme(H As String) As Double
convert_tps_centieme = Left(H, InStr(1, H, ":") - 1) + (Mid(H,
InStr(1, H, ":") + 1, 2) * 5 / 3) / 100
End Function



Merci mais j'obtiens ces résultats qui ne sont pas systématiquement bon

HTest 11:59:32 - Debut 01:00:01 - Fin 08:00:00
TestNum 11,9833333333333 - DebNum 1 - FinNum 8
Cas Hors plage
Ok

HTest 11:58:50 - Debut 23:00:01 - Fin 08:00:00
TestNum 11,9666666666667 - DebNum 23 - FinNum 8
Cas Dans la plage
Pas bon

HTest 01:56:58 - Debut 23:00:01 - Fin 08:00:00
TestNum 1,93333333333333 - DebNum 23 - FinNum 8
Cas DAns la plage
Ok

HTest 01:55:47 - Debut 01:00:01 - Fin 08:00:00
TestNum 1,91666666666667 - DebNum 1 - FinNum 8
Cas Hors plage

Pas bon

@+

JY




D'aprés mes tests avec tes valeurs tout me parait ok
11:59:32 n'est pas dans la plage 01:00:01 à 08:00:00
? test_plage ("01:00:01","08:00:00","11:59:32")
Faux

11:58:50 n'est pas dans la plage 23:00:01 à 08:00:00
? test_plage ("23:00:01","08:00:00","11:58:50")
Faux

01:56:58 est dans la plage horaire
? test_plage ("23:00:01","08:00:00","01:56:58")
Vrai

01:56:58 est dans la plage horaire
? test_plage ("01:00:01","08:00:00","01:55:47")
Vrai

Ou alors je n'ai pas compris ce que tu cherchais ;-)
Publicité
Poster une réponse
Anonyme