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

Résolu
Anonyme209 Messages postés 761 Statut Membre -  
Anonyme209 Messages postés 761 Statut Membre -
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

  1. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  2. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  3. Anonyme209 Messages postés 761 Statut Membre 19
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  7. Anonyme209 Messages postés 761 Statut Membre 19
     
    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