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

VBScript Discussion :

Vérification saisie InputBox


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut Vérification saisie InputBox
    Bonjour,

    J'ai une InputBox dans laquelle je voudrais pouvoir vérifier le format AAAA-MM-JJ ainsi que des intervalles pour les différents champs (AAAA,MM,JJ), je ne vois pas comment faire, j'ai essayé avec une boucle mais sans succès, une piste ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 836
    Points : 9 217
    Points
    9 217
    Par défaut

    Postez votre code et

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    J'ai que mon InputBox du coup...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TEST = InputBox("Entrer la date","Date","AAAA-MM-JJ")

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 836
    Points : 9 217
    Points
    9 217
    Par défaut

    Testez ce :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Titre = "Valider une date"
    TEST = InputBox("Entrer la date",Titre,"2013-12-13")
    If Not IsDate(TEST)  Then 
    	MsgBox "La Date "& DblQuote(TEST) &" n'est pas valide",16,Titre 
    Else 
    	MsgBox "La Date "& DblQuote(TEST) &" est valide",64,Titre
    End If 
    '**********************************************************************************************
    'Fonction pour ajouter les doubles quotes dans une variable
    Function DblQuote(Str)
    	DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '**********************************************************************************************

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    J'avais effectivement essayé avec IsDate, le problème c'est que pour IsDate cette date 1-1-1 est correcte alors que pas pour moi, je voudrais par exemple 0001-01-01.

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 294
    Points : 3 544
    Points
    3 544
    Par défaut
    salut,
    un exemple vite fait avec l'astuce qui permet de forcer FormatDateTime à sortir le format yyyy-mm-dd qui n'est pas le format européen courant (merci la suède... )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    curLocale = GetLocale
    SetLocale("sv-se")  ' LCID de la suède
    rep = InputBox("Entrez la date","Date","AAAA-MM-JJ")
    If IsDate(rep) Then
      If Year(rep) > 2013 Or Year(Rep) < 2005 Then
        MsgBox "Année en dehors de l'intervalle"
      Else
        MsgBox "BRAVO LA DATE EST " & FormatDateTime(rep, 2)
      End If
    Else
      MsgBox "Format date invalide"
    End If
    SetLocale(curLocale) ' rétablir les params locaux
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Le format ce n'est pas très grave, je le retravaille dans la suite de mon script. Par contre j'ai essayé de faire un plus gros If avec les trois champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep = InputBox("Entrez la date","Date","AAAA-MM-JJ")
    If Year(rep) >= 2000 OR Year(rep) <= 2100 AND Month(rep) >= 01 OR Month(rep) <= 12 AND Day(rep) >= 01 OR Day(rep) <= 31 Then
    MsgBox "Oui"
    Else
    MsgBox "Non"
    End If
    Mais je ne passe jamais le Else même quand je le devrais...

  8. #8
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Et avec des parenthèses qui vont bien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If (Year(rep) >= 2000 OR Year(rep) <= 2100) AND (Month(rep) >= 01 OR Month(rep) <= 12) AND (Day(rep) >= 01 OR Day(rep) <= 31) Then

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Bon en fait il ne me faut pas de OR mais que des AND :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rep = InputBox("Entrez la date","Date","AAAA-MM-JJ")
    If (Year(rep) >= 2010 AND Year(rep) <= 2020) AND (Month(rep) >= 01 AND Month(rep) <= 12) AND (Day(rep) >= 01 AND Day(rep) <= 31) Then
    MsgBox "Oui"
    Else
    MsgBox "Non"
    End If
    Par contre je ne comprends pas, pour l'année ça fonctionne mais pas pour les mois et les jours...

  10. #10
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Dans ce cas il faudra traiter les mois de 30 jours, de 31 jours et le mois de février (28 ou 29 jours) selon que l'année est bissextile ou non.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    Non je ne veux pas pousser la vérification jusque-là.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Je me suis intéressé à cette problématique et voici le code obtenu en fin de développement.
    J'ai testé d'abord l'entrée afin que la valeur saisie respecte les contraintes de date de base (en cas de saisie partielle ou avec des valeurs alpha).
    J'ai décomposé les vérifications, ce qui rend à mon sens plus facile l'ajout de tests supplémentaires.
    J'ai également inversé les opérateurs logiques de comparaisons.
    J'ai finalement adapté le code dans une fonction afin de pouvoir la réutiliser plusieurs fois.

    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
    strDateSaisie = InputBox("Entrez une date : ","Date","AAAA-MM-JJ")
    If strDateSaisie <> "" Then MsgBox "Date [" & strDateSaisie & "] valide : " & checkDate(strDateSaisie)
     
    Function checkDate(strDate)
    	strDate = replace(strDate, "/","-")
    	arrDatePart = split(strDate,"-")
    	boolCheckDate = True
    	If Ubound(arrDatePart) = 2 and isNumeric(join(arrDatePart,"")) Then 
    		If cint(arrDatePart(0)) < 1900 Or cint(arrDatePart(0)) > 2100  Then boolCheckDate = False
    		If cint(arrDatePart(1)) < 1 Or cint(arrDatePart(1)) > 12  Then boolCheckDate = False
    		If cint(arrDatePart(2)) < 1 Or cint(arrDatePart(2)) > 31  Then boolCheckDate = False
    	Else
    		boolCheckDate = False
    	End If
    	checkDate = boolCheckDate
    End Function
    Bonne journée !

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    C'est exactement ça, j'en demandais pas tant !

    Bon par contre je ne comprends plus rien à partir de ta fonction, mes connaissances en VBS sont bien trop faibles.

    Merci beaucoup Zelnist

  14. #14
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Si tu penses qu'il est utile de vérifier la validité stricte d'une date(nombre de jours et année bissextile) voici comment faire :
    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
    strDateSaisie = InputBox("Entrez une date : ","Date","AAAA-MM-JJ")
    If strDateSaisie <> "" Then MsgBox "[" & strDateSaisie & "] : " & IsValidDate(strDateSaisie)
    '==========================
    Function Bissextile(An)
        Bissextile = (An Mod 4 = 0 And An Mod 100 <> 0) Or (An Mod 400 = 0)
    End Function
    ' =========================
    Function IsValidDate(sDate)
        Const  Msg = "Date valide", Msg1 = "Date non valide"
    	Dim Ret, tb
    	tb = Split(sDate, "-")
    	If Ubound(tb) = 2 and isNumeric(join(tb,"")) Then 
    		If CInt(tb(0)) < 1900 Or CInt(tb(0)) > 2100  Then Ret = Msg1
    		If CInt(tb(1)) < 1 Or CInt(tb(1)) > 12  Then Ret = Msg1
            End If
    	Select case CInt(tb(1))
    	    Case 1,3,5,7,8,10,12
    		   If CInt(tb(2))<=31 Then 
    		     Ret = Msg
    		   Else :Ret = Msg1
    		   End If
    	    Case 4,6,9,11
    		   If CInt(tb(2))<=30 Then 
    		      Ret = Msg
    		   Else :Ret = Msg1
    		   End If	  
    	    Case 2
                       If Bissextile(tb(0)) Then
    		      If CInt(tb(2))<=29 Then 
    			     Ret = Msg
    		      Else :Ret = Msg1
    		      End If	  
    		   Else 
                            If CInt(tb(2))<=28 Then 
    			     Ret = Msg	
                            Else :Ret = Msg1		
    			End If
    		   End If 
    	End Select
    	  IsValidDate = Ret
    End Function
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 10
    Points
    10
    Par défaut
    l_autodidacte, je trouve que ça complique le script pour pas grand chose mais ça peut servir à d'autres personnes.

    Zelnist, je serais intéressé de connaître la fonction des différentes lignes de ton script.

  16. #16
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 068
    Points : 17 155
    Points
    17 155
    Par défaut
    Salut

    Ces problèmes de dates ..........
    Une autre approche pour ce qui est de se passer de gérer les années bissextiles
    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
    Option Explicit
    Dim Rep
    Dim MinDate, MaxDate
    Dim CurLocale
     
    CurLocale = GetLocale
    SetLocale ("sv-se") ' LCID de la suède
     
    Rep = InputBox("Entrez la date", "Date (AAAA-MM-JJ)", "AAAA-MM-JJ")
    If IsDate(Rep) Then
            SetLocale (1036) ' LCID French (France)
            Rep = CDate(Right(Rep, 2) & "/" & Mid(Rep, 6, 2) & "/" & Left(Rep, 4))
            MinDate = CDate("01/01/2000")
            MaxDate = CDate("31/12/2100")
     
            'MsgBox "MinDate = " & MinDate & vbcrlf _
            '     & "MaxDate = " & MaxDate & vbcrlf _
            '     & "Rep = " & Rep & vbcrlf
        If Rep >= MinDate And Rep <= MaxDate Then
            MsgBox "Bien, dans la fourchette"
            Else
            If Rep >= MinDate Then
                    MsgBox "Pas bien, en dehors de la fourchette, date trop grande"
                    Else
                    MsgBox "Pas bien, en dehors de la fourchette, date trop petite"
            End If
        End If
        Else
        MsgBox "Votre entrée n'est pas une date valide"
    End If
     
    SetLocale (CurLocale) ' rétablir les params locaux
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

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

Discussions similaires

  1. Vérification saisie formulaire
    Par granchef dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2010, 17h36
  2. C# et vérification saisie par Regex
    Par PatStan17 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/05/2009, 10h56
  3. REQ : Algo pour vérification saisie du "Numero TVA"
    Par Eric.H dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2009, 11h23
  4. vérification saisie utlisateur
    Par clo5000 dans le forum IHM
    Réponses: 23
    Dernier message: 02/03/2007, 17h55
  5. vérification saisie!
    Par b_steph_2 dans le forum Access
    Réponses: 6
    Dernier message: 03/02/2006, 19h36

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