VB 2010: Vérifier si une heure est comprise entre deux autres.

Résolu/Fermé
Signaler
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
-
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
-
Bonjour,

Je programme une application de sécurité pour empêcher l'utilisation de l'ordinateur en dehors des horaires spécifiées (par l'utilisateur, peut donc changer).

J'ai essayé le code suivant:

 If (Date.Now.Hour > heuredebut And Date.Now.Minute > minutedebut) Or (Date.Now.Hour < heurefin And Date.Now.Minute < minutefin) Then
Else
    MsgBox("En dehors des horaires autorisées.")
End If


Mais ça ne marche pas, le message d'erreur s'affiche même pendant les horaires autorisées.

Merci de votre aide.

8 réponses

Messages postés
7652
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
0
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
17
Bonjour,

il y a tellement de chose sur cette page, je ne sais pas où trouver ce que je cherche pourrais tu m'orienter sur le le bout de code qui correspond à ce que je recherche?
0
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
17
J'ai pensé faire (01 janvier 2000 est pour l'exemple.)

Dim diff = DateDiff("n", heuredebut & ":" & minutedebut, heurefin & ":" & minutefin)
If DateDiff("n", heuredebut & ":" minutedebut, Date.now.Hour & ":" & Date.now.Minute) > diff or DateDiff("n", heuredebut & ":" minutedebut, Date.now.Hour & ":" & Date.now.Minute) < 0 Then
      MsgBox("en dehors des horaires autorisées!")
End if


Mais je ne suis pas sûr que ça marche à tout les coups. Merci de me renseigner sur mon code et, peut-être, m'en donner un plus fonctionnel.
0
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
17
Bonjour, excusez moi pour le double post, mais le code de mon message d'avant était très loin d'être correct.

J'ai fait des modifications et ça à l'air de marcher (bien que le code ne soit pas très "propre") TextBox1 : heuredebut, TextBox2: minutedebut, TextBox3: heurefin, TextBox4: minutefin, TextBox5: Date.now.Hour, TextBox6: Date.now.Minute.

Dim day As Date = "01/01/2000"
Dim day2 As Date = "02/01/2000"
Dim diff = DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day & " " & TextBox3.Text & ":" & TextBox4.Text)
If diff < 0 Then
      diff = DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day2 & " " & TextBox3.Text & ":" & TextBox4.Text)
      If (DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day2 & " " & TextBox5.Text & ":" & TextBox6.Text) > diff) Or (DateDiff("n", day2 & " " & TextBox1.Text & ":" & TextBox2.Text, day2 & " " & TextBox5.Text & ":" & TextBox6.Text) < -diff) Then
            MsgBox("en dehors")
      Else
            MsgBox("entre")
      End If
Else
      diff = DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day & " " & TextBox3.Text & ":" & TextBox4.Text)
      If DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day & " " & TextBox5.Text & ":" & TextBox6.Text) > diff Or DateDiff("n", day & " " & TextBox1.Text & ":" & TextBox2.Text, day & " " & TextBox5.Text & ":" & TextBox6.Text) < 0 Then
            MsgBox("en dehors")
      Else
            MsgBox("entre")
      End If
End If


Ne pourrait-il pas y avoir une commande du genre
If DateEntre(date1,date2) Then
'entre
else
'en dehors
??? (qui fonctionnerait aussi pour les heures..)

Si vous avez un code plus "propre" et surtout plus simple (parce que celui-ci est un peu long) n'hésitez pas à proposer.
0
Messages postés
7652
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
J'ai fait ce genre de chose dans un post que tu avais ouvert. Regarde le 08/07/2014 à 14h38. Le code qui détermine les heures d'été et d'hiver. Il suffit de mettre tes dates et heures à toi pour que cela fonctionne:

https://forums.commentcamarche.net/forum/affich-30455056-vb-recuperer-l-heure-sur-un-serveur-de-temps#p30480712


0
Messages postés
7652
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
voici le code:

  Dim seuilete As Date
    Dim seuilhiver As Date
    Dim dteData As Date
    Dim iddate As String
    Dim uneDateC As Decimal 'nombre seconde depuis début année
    Dim seuileteC As Decimal 'seconde debut année heure debut
    Dim seuilhiverC As Decimal 'seconde debut année heure fin
    Dim DateS As String
    Dim DateD As DateTime
    Dim Annee As String
 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'mis à jour des dates
        dteData = Now 'today
        Annee = (dteData.ToString("yyyy")) 'année en cours
        iddate = "24/07/" & Annee & " 02:10:30"
        seuilete = CDate(iddate)
        '----------------------------------------------------------------------
        iddate = "24/07/" & Annee & " 13:10:10"
        seuilhiver = CDate(iddate)
        '--------------------------------------------------------------------
        'une petite comparaison
        DateS = ("01/01/" & Annee) 'Saisir une date : on récupère une string
        DateD = CDate(DateS) 'Conversion de la string en DateTime
        uneDateC = DateDiff(DateInterval.Second, DateD, Now)
        seuileteC = DateDiff(DateInterval.Second, DateD, seuilete) 'différence en jours à partir debut d'année a l'heure d'été
        seuilhiverC = DateDiff(DateInterval.Second, DateD, seuilhiver) 'différence en jours  heure d'hiver à la fin de l'année
        If (seuileteC < uneDateC) And (uneDateC < seuilhiverC) Then
            MessageBox.Show("horaires autorisées!", "Heures d'ouverture", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("En dehors des horaires autorisées.", "Heures d'ouverture", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub





J'ai mis DateInterval.Second car le Format est en seconde. Tu peux l'adapter
0
Messages postés
7652
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2022
678
J'ai vu que tu utilisais plusieurs TextBox. Je te conseille l'utilisation d'un MaskedTextBox. Tu peux gérer la saisie des dates. Voici un code avec 2 MaskedTextBox nommés:
MaskedDebut et MaskedFin
Il faut ajouter un ToolTip1 pour gérer les avertissements

Option Strict On
Public Class Form1
    Dim seuilete As Date
    Dim seuilhiver As Date
    Dim dteData As Date
    Dim iddate As String
    Dim uneDateC As Decimal 'nombre jour depuis début année
    Dim seuileteC As Decimal 'jour debut année heure debut
    Dim seuilhiverC As Decimal 'jour debut année heure fin 
    Dim DateS As String
    Dim DateD As DateTime
    Dim Annee As String
    'en savoir plus sur l'utilisation des MaskedTextBox
    'http://msdn.microsoft.com/fr-fr/library/kkx4h3az(v=vs.110).aspx
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      Me.ToolTip1.IsBalloon = True
        MaskedDebut.ValidatingType = GetType(System.DateTime)
        MaskedFin.ValidatingType = GetType(System.DateTime)
        Me.MaskedDebut.Mask = "00/00/0000 00:00:00"
        Me.MaskedFin.Mask = "00/00/0000 00:00:00"
        MaskedDebut.Text = "25/07/2014 02:10:30"
        MaskedFin.Text = "25/07/2014 13:07:10"
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'mis à jour des dates
        dteData = Now 'today
        Annee = (dteData.ToString("yyyy")) 'année en cours
        iddate = MaskedDebut.Text ' "24/07/" & Annee & " 02:10:30"
        seuilete = CDate(iddate)
        '----------------------------------------------------------------------
        iddate = MaskedFin.Text '"24/07/" & Annee & " 13:07:10"
        seuilhiver = CDate(iddate)
        '--------------------------------------------------------------------
        'une petite comparaison
        DateS = ("01/01/" & Annee) 'Saisir une date : on récupère une string
        DateD = CDate(DateS) 'Conversion de la string en DateTime
        uneDateC = DateDiff(DateInterval.Second, DateD, Now)
        seuileteC = DateDiff(DateInterval.Second, DateD, seuilete) 'différence en secondes à partir debut d'année a l'heure du début
        seuilhiverC = DateDiff(DateInterval.Second, DateD, seuilhiver) 'différence en secondes  heure de la fin à la fin de l'année
        If (seuileteC < uneDateC) And (uneDateC < seuilhiverC) Then
            MessageBox.Show("horaires autorisées!", "Heures d'ouverture", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            MessageBox.Show("En dehors des horaires autorisées.", "Heures d'ouverture", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
    End Sub
    Private Sub MaskedDebut_MaskInputRejected(sender As System.Object, e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles MaskedDebut.MaskInputRejected
        ToolTip1.ToolTipTitle = "Validité de la saisie"
        ToolTip1.Show("Nous sommes désolés, mais uniquement des chiffres (0-9) sont autorisés dans les dates.", MaskedDebut, 5000)
    End Sub
    Private Sub MaskedFin_MaskInputRejected(sender As System.Object, e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles MaskedFin.MaskInputRejected
        ToolTip1.ToolTipTitle = "Validité de la saisie"
        ToolTip1.Show("Nous sommes désolés, mais uniquement des chiffres (0-9) sont autorisés dans les dates.", MaskedFin, 5000)
    End Sub
    Public Sub MaskedDebut_TypeValidationCompleted(sender As Object, e As TypeValidationEventArgs)
        If Not e.IsValidInput Then
            ToolTip1.ToolTipTitle = "Validité de la valeur de la date"
            ToolTip1.Show("Nous sommes désolés, mais la valeur que vous avez entré n'est pas une date valide. S'il vous plaît changer la valeur.", MaskedDebut, 5000)
            e.Cancel = True
        End If
    End Sub
    Public Sub MaskedFin_TypeValidationCompleted(sender As Object, e As TypeValidationEventArgs)
        If Not e.IsValidInput Then
            ToolTip1.ToolTipTitle = "Validité de la valeur de la date"
            ToolTip1.Show("Nous sommes désolés, mais la valeur que vous avez entré n'est pas une date valide. S'il vous plaît changer la valeur.", MaskedFin, 5000)
            e.Cancel = True
        End If
    End Sub
End Class


Bonne programmation
0
Messages postés
679
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
22 décembre 2020
17
Bonjour,

il est vrai que d'utiliser une MaskedTextBox au lieu de deux TextBox ou deux NumericUpDown serais plus simple, je n'y avais pas pensé avant.
Quant au ToolTip, je ne connaissais pas avant que tu m'en parles. Je vais essayer tout de suite.
Merci de votre aide.
Je pense que je peux mettre le sujet en résolu.
0