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

Macros et VBA Excel Discussion :

controle du format d un textbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut controle du format d un textbox
    bonjour,
    dans un userform 2 txtbox doivent etre renseignés sous forme de date
    avec un format précis
    textbox1 = 01/01/2007 16:02:05


    je dois verifier si la saisie est correcte
    en utilisant la fonction isdate celle ci renvoie TRUE si c une date (01/02/2007) meme si celle ci n est pas au format desiré.
    je pensais formater la valeur saisie mais si la saisie est incorrecte ,le format le
    sera lui aussi.

    j aurais voulu utiliser une fonction de control format type isdate ,mais apparement elle n existe pas en vba.(du moins je n ai pas trouvé ds l aide)
    je voudrais eviter de faire un control sur chaque caractères mais pour le moment je ne trouve pas d autre solution

    merci

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour

    La fonction isdate existe mais n'est pas probante

    personnellement je prefere controler avec on error et cdate
    Si le format n'est pas ok cdate envoie une erreur

    Don cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub textbox1_exit(ByVal Cancel As MSForms.ReturnBoolean)
    dim w_ctrl as date
    on error got erreur
    w_ctrl = cdate(textbox1.value)
    exit sub
    erreur:
    msgbox "Ce n'est pas une date ---> format : jj/mm/aa"
    cancel = true
    end sub

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    pour la fonction isdate : celle ci existe
    IsDate, fonction


    Renvoie une valeur de type Boolean qui indique si une expression peut être convertie en date.

    Syntaxe

    IsDate(expression)

    L'argument expression est une valeur de type Variant contenant une expression de date ou une expression de chaîne qui peut être interprétée comme une date ou une heure.

    Remarques

    La fonction IsDate renvoie la valeur True si l'expression est une date ou peut être reconnue en tant que date ; sinon elle renvoie la valeur False. Dans Microsoft Windows, la plage des dates valides s'étend du 1er janvier 100 au 31 décembre 9999. Les plages varient en fonction des systèmes d'exploitation.
    j ai utilisé cette procedure pour palier a mon pb

    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
     
    Sub test_date()
    Dim val
    Dim tabl
    Dim car
    Dim i As Integer
    val = InputBox("date à saisir", "controle format date")
     
        If Len(val) <> 19 Then MsgBox "le format est incorrecte": Exit Sub
        i = 1
        tabl = Array(1, 2, 4, 5, 7, 8, 9, 10, 12, 13, 15, 16, 18, 19)
            Do While i < UBound(tabl)
                car = Mid(val, tabl(i), 1)
                    If Not IsNumeric(car) Then
                        MsgBox "le format est incorrecte"
                        Exit Sub
                        End If
                i = i + 1
            Loop
     
    If Mid(val, 3, 1) <> "/" Or Mid(val, 6, 1) <> "/" _
        Or Mid(val, 11, 1) <> " " Or Mid(val, 14, 1) <> ":" _
        Or Mid(val, 17, 1) <> ":" Then
        MsgBox "le format est incorrecte"
        Exit Sub
        Else: MsgBox "saisie correcte"
    End If
    End Sub
    qui fonctionne parfaitement
    mais si qq un a plus simple je suis preneur

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    j avais mal lu wilfried 42
    La fonction isdate existe mais n'est pas probante

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Sinon (moi j'aime bien isdate)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not isdate(Textbox1.text) then
         cancel = true
        else
         Result = cdate(Textbox1.text)
    endif
    Mais avec ça tu ne vérifies pas la présence de l'heure. Pour ça, il me semble que SilkyRoad avait répondu (il y a longtemps) sur le sujet. Un coup d'oeil dans la FAQ ou sur le forum VBA-Excel peut-être mais je ne sais pas avec quel mot clé chercher
    Tu dis, si tu en as besoin on trouvera bien quelque chose avec Like et isnumeric ou avec format (?)
    A+

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    merci a tous
    donc pour le format 02/02/2007 15:02:36
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub TextBox1_Change()
        Dim strFormat As String
        Dim x As Integer
     
        x = Len(TextBox1)
     
        strFormat = "##/##/#### ##:##:##"
        strFormat = Left(strFormat, x)
     
        If Not TextBox1 Like strFormat Then _
            TextBox1 = Left(TextBox1, x - 1)
     
    End Sub

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Michel,
    Grillé ! mais puis que j'ai trouvé une solution... que ce ne soit pas pour rien
    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
    Sub FormatDatePlusHeure()
    Dim IsTime As Boolean, LaDate
        LaDate = "12/12/2007 12:12:12"
        If Not IsDate(Trim(Left(LaDate, 10))) Then
            Cancel = True
          Else
            Heure = Right(LaDate, instr(LaDate," ")) 'Ligne corrigée
            IsTime = Heure Like "##:##:##"
            If Not IsTime Then
                    MsgBox "C'est pas l'heure !"
                    Cancel = True
                Else
                    MsgBox "C'est bien le jour et l'heure !"
            End If
        End If
    End Sub
    Maintenant je vais aller critiquer la tienne

    Edit
    Code corrigé afin d'accepter les dates saisies au format "j/m/yy"

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Edit
    Vu !
    Alors ma critique : Si l'utilisateur saisie "8/10/2007" à la place de "08/10/2007" c'est bien une date mais il est jeté... D'ailleurs, je vais corriger mon code car s'il saisit "8/10/07", il est également jeté.
    Je corrige le post précédent
    A+

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Patbou,
    Pour ma part j'essaie toujours de faciliter le travail de l'utilisateur. Imposer un format de saisie pour la partie utile (c'est bien une date) là, ok. Mais imposer un format strict, c'est pénible.
    Ce que je ferais, après avoir vérifié que la donnée saisie est bien une date avec l'heure, c'est formater la date comme tu veux en sortie de saisie en remplaçant dans mon code
    MsgBox "C'est bien le jour et l'heure !"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateEtHeure = Format(cdate(Textbox1.text,"dd/mm/yyyy hh:nn:ss"))
    C'est toi qui vois
    A+

    NB - Inconvénient : Le contrôle ne se fait pas en cours de saisie

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

Discussions similaires

  1. controler le format d'une propriété
    Par sakia dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/12/2007, 10h40
  2. affichge format heure dans textbox
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2007, 12h53
  3. [C#] Obtenir un format dans un textbox
    Par kenzo080 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 16/04/2007, 16h04
  4. Format d'un TEXTBOX
    Par guilld dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/02/2007, 18h40
  5. Controle sur format de données
    Par clairette dans le forum Langage
    Réponses: 11
    Dernier message: 03/02/2007, 15h26

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