IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

test sur saisie de date dans un textbox?


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut test sur saisie de date dans un textbox?
    Bonjour Chers amis.

    je cherche un code source en vb (VS2012) qui contrôle lors du saisie de la date dans un textbox. C.a.d lorsque je tape une date quelconque
    (exp: 33/14/20013), le code m'indique dans un MsgBox que le jour ou le mois sont incorrecte. et que si j'entre pour le mois "02" (qui est février) le nombre de jour saisie ne doit pas dépasser le 28 ou 29.
    autre exemple: si je tape 31/06 il n'indique que le moi Juin compte 30 jours. J’espère que ma demande est lisible.

    Merci comme même pour tous le monde.

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    DateTime.TryParse

    Pourquoi ne pas utiliser un DateTimePicker au lieu d'un TextBox ?

  3. #3
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Citation Envoyé par meziantou Voir le message
    DateTime.TryParse

    Pourquoi ne pas utiliser un DateTimePicker au lieu d'un TextBox ?


    Sinon tu peux tenter avec des tests via Regex.
    Ou alors utiliser une maskedTextBox au format Date et tester des substrings à l'intérieur ou tester le total avec un Ctype(taDate, Date).

    Il y a plein de solutions !

  4. #4
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Par défaut
    Bonjour,

    Et comme ceci, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub TextBox1_LostFocus(sender As Object, e As System.EventArgs) Handles TextBox1.LostFocus
            If Not IsDate(TextBox1.Text) Then
                Select Case Val(Microsoft.VisualBasic.Mid(TextBox1.Text, 4, 2))
                    Case 1, 3, 5, 7, 8, 10, 12
                        If Val(Microsoft.VisualBasic.Left(TextBox1.Text, 2)) Then
                            MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TextBox1.Text, 4, 2)) & " ne compte pas plus de 31 jours")
                        End If
                    Case 4, 6, 9, 11
                        If Val(Microsoft.VisualBasic.Left(TextBox1.Text, 2)) Then
                            MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TextBox1.Text, 4, 2)) & " ne compte pas plus de 30 jours")
                        End If
                    Case 2
                        If (Val(Microsoft.VisualBasic.Right(TextBox1.Text, 2)) / 4) = 0 Then
                            REM année bissextile
                            MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TextBox1.Text, 4, 2)) & " ne compte pas plus de 29 jours")
                        Else
                            MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TextBox1.Text, 4, 2)) & " ne compte pas plus de 28 jours")
                        End If
                    Case Else
                        MsgBox("L'année ne compte pas plus de 12 mois")
                End Select
            End If
        End Sub

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Pourquoi utiliser un textbox plutôt qu'un datetimepicker ?

    Bonne question, néanmoins si on désire apporter une attention particulière à la vitesse et l'efficacité de la saisie dans le formulaire au clavier (Un formulaire ou on prend le temps de configurer correctement les TabStops et les Tabindex...), je pense qu'un opérateur de saisie ira plus rapidement sur un textbox qu'un datetimepicker. Par contre un maskedtextbox est à mon avis la meilleure solution dans ce cas.

    Sinon la solution de Meziantou est la bonne.

    A utiliser dans l'évenement validating du textbox. Si la conversion est un échec alors il faut changer la propriété e.Cancel à true pour empêcher le changement du contrôle au focus et indiquer l'erreur (Msgbox, icone d'erreur, changement de couleur du contrôle ou du text, etc...).

  6. #6
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut probleme resolut
    La réponse de tovin m'a beaucoup aider.
    car en plus je dois mettre dans mon prg une condition lors de l'ajout d'un nouveau fonctionnaire, par sa date de naissance je calcule sa date de retraite. et sa date de retraite ne doit pas être a la date du système (c.a.d il ne doit pas être en retraite avant même sa recrutement.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations forums :
    Inscription : Novembre 2012
    Messages : 43
    Par défaut
    c simple

    If IsDate(tonChamp.Text) = False Then
    msgbox"---"
    end if

  8. #8
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut Object atteind
    Bonjour

    Voici Ce que voudrais faire comme test sur la Date de Naissance, et c'est grâce à tovin qui m'a beaucoup aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     Private Sub TXTDateNaisPers_Validated(sender As Object, e As EventArgs) Handles TXTDateNaisPers.Validated
            Dim Jour As String
            Dim Mois As String
            Dim Annee As String
     
            If Not IsDate(TXTDateNaisPers.Text) Then
                Select Case Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2))
                    Case 1, 3, 5, 7, 8, 10, 12 '31
                        If Val(Microsoft.VisualBasic.Left(TXTDateNaisPers.Text, 2)) Then
                            'MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & " ne compte pas plus de 31 jours", 0 + 48, "Erreur sur le Nombre de Jour")
                            MsgBox("شهر " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & "عدد أيامه 31 يوما فقط", 0 + 48, "خطء في عدد أيام الشهر ")
                            TXTDateNaisPers.Clear()
                            TXTDateRetraite.Clear()
                            TXTDateNaisPers.Focus()
                        End If
                    Case 4, 6, 9, 11 '30
                        If Val(Microsoft.VisualBasic.Left(TXTDateNaisPers.Text, 2)) Then
                            'MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & " ne compte pas plus de 30 jours", 0 + 48, "Erreur sur le Nombre de Jour")
                            MsgBox("شهر  " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & " عدد أيامه 30 يوما فقط", 0 + 48, "خطء في عدد أيام الشهر")
                            TXTDateNaisPers.Clear()
                            TXTDateRetraite.Clear()
                            TXTDateNaisPers.Focus()
                        End If
                    Case 2 '28-29
                        If (Val(Microsoft.VisualBasic.Right(TXTDateNaisPers.Text, 2)) / 4) = 0 Then
                            REM année bissextile
                            'MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & " ne compte pas plus de 29 jours", 0 + 48, "Erreur sur le Nombre de Jour")
                            MsgBox("شهر فيفري يحتوي على 29 يوما هذه السنة", 0 + 48, "خطء في عدد أيام شهر فيفري")
                            TXTDateNaisPers.Clear()
                            TXTDateRetraite.Clear()
                            TXTDateNaisPers.Focus()
                        Else
                            'MsgBox("Le mois " & Val(Microsoft.VisualBasic.Mid(TXTDateNaisPers.Text, 4, 2)) & " ne compte pas plus de 28 jours", 0 + 48, "Erreur sur le Nombre de Jour")
                            MsgBox("شهر فيفري يحتوي على 28 يوما هذه السنة", 0 + 48, "خطء في عدد أيام شهر فيفري")
                            TXTDateNaisPers.Clear()
                            TXTDateRetraite.Clear()
                            TXTDateNaisPers.Focus()
                        End If
                    Case Else
     
                        'MsgBox("L'année ne compte pas plus de 12 mois", 0 + 48, "Erreur sur le Nombre de mois")
                        MsgBox("لتذكير فإن عدد أشهر السنة 12 شهرا وليس أكثر", 0 + 48, "خطء في عدد أشهر السنة")
                        TXTDateNaisPers.Clear()
                        TXTDateRetraite.Clear()
                        TXTDateNaisPers.Focus()
                End Select
            End If
            If Not IsDate(TXTDateNaisPers.Text) Then
                MsgBox("الرجاء إدخال تاريخ الولادة", 0 + 48, "خطء في تاريخ الولادة")
     
            ElseIf Val(Mid(TXTDateNaisPers.Text, 7, 4)) <= Val(Mid(DateString, 7, 4) - 55) Then
                MsgBox("الموظف الجديد السيد" & " " & TXTPreNomPers.Text & " " & TXTNomPers.Text & " " & " قد جاوج سن التقاعد قبل مباشرته لعمله", 0 + 48, "خطء في تاريخ الولادة")
                TXTDateNaisPers.Clear()
                TXTDateRetraite.Clear()
                TXTDateNaisPers.Focus()
            Else
                If Len(TXTDateNaisPers.Text) = 10 Then
                    Jour = Mid(TXTDateNaisPers.Text, 1, 2)
                    Mois = Mid(TXTDateNaisPers.Text, 4, 2)
                    Annee = Mid(TXTDateNaisPers.Text, 7, 4)
                    If Mois = 12 Then
                        TXTDateRetraite.Text = "01\01" & "\" & Annee + 56
                    Else
                        TXTDateRetraite.Text = "01\" & Mois + 1 & "\" & Annee + 55
                    End If
                End If
            End If
        End Sub
    Pour le fonctionnaire c'est au nouveau mois après 55 ans qu'il sera en retraite. C.a.d s'il est née le 01-31/X/YYYY il sera en retraite 01/X+1/YYYY+55

    NB: Les caractères incompréhensible dans MsgBox ne sont que des commentaires qui sont écrit en arabe comme "Erreur sur le nombre de jour. ou la date est vide, il faut taper une date. ou le nouveau fonctionnaire est en retraite avant son recrutement.....

    Merci pour tous

  9. #9
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Citation Envoyé par sinople Voir le message
    ... néanmoins si on désire apporter une attention particulière à la vitesse et l'efficacité de la saisie dans le formulaire au clavier...
    ...je pense qu'un opérateur de saisie ira plus rapidement sur un textbox qu'un datetimepicker. Par contre un maskedtextbox est à mon avis la meilleure solution dans ce cas.
    J'étais du même avis que toi jusqu'à ce que je voie un utilisateur taper une date dans ce composant en utilisant les touches directionnelles après chaque chiffre à la place de la séparation.

    en plus les espaces sont pris en compte ainsi que le /

    donc l'utilisateur peut taper :
    18/06/2005
    18 6 2005
    18 -> 06 -> 2005
    18/6/5
    5/5/82
    ça fonctionne.

    L'utilisateur a donc tout le confort du DateTimePicker avec la rapidité d'encodage.
    Aucune raison de ne pas profiter de ce composant.

  10. #10
    Membre averti
    Homme Profil pro
    développeur VB
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : développeur VB

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Par défaut faute de frappe
    Bonjour SanKassssss

    peut être que j'ai mal expliquer ou que c'est une faute de frappe car j’utilise un Masked TextBox et pas un simple TextBox donc les vides ou les < , > ,- ne sont pas accepter car dans sa propriété Mask je l'ai affecter type date avec des sépareteurs /

    Merci.

  11. #11
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour MoMeBe, je ne faisais que répondre à sinople sur la rapidité de saisie du composant datetimepicker

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [A-03] Test sur des dates dans des textBox
    Par moilou2 dans le forum IHM
    Réponses: 3
    Dernier message: 27/10/2008, 13h39
  2. Saisie d'une date dans une textbox
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/11/2007, 12h51
  3. controle sur un champ date dans un formulaire
    Par fraizas dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2007, 13h17
  4. [Javascript] appui sur la touche entrée dans une textbox
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2006, 11h19
  5. Réponses: 3
    Dernier message: 19/03/2003, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo