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

Résolu/Fermé
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - Modifié par Anonyme209 le 23/07/2014 à 11:34
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 25 juil. 2014 à 12:30
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.
A voir également:

8 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 juil. 2014 à 11:44
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 23/07/2014 à 19:50
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
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
23 juil. 2014 à 20:28
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
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 23/07/2014 à 21:44
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
23 juil. 2014 à 22:31
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
24 juil. 2014 à 12:07
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
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 juil. 2014 à 11:34
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
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
25 juil. 2014 à 12:30
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