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 :

Masque de saisie dans une zone de texte d'un formulaire Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Masque de saisie dans une zone de texte d'un formulaire Excel
    Bonjour à tous,

    mon problème vient de la mise en place d'un masque de saisie sur une textbox dans un formulaire excel.
    La valeur sasie dans la texte box doit correspondre à un numéro de lot de 12 caractères (longueur indiqué dans les propriétés de la textbox), et doit avoir un format de type L14085A 1233. Le "L" est une lettre fixe, 14 correspond au quantième de l'année, 085 au n° du jour juliende production, la lettre A correspond à un n° d'ordre (A-> premier lot produit ce jour-là), puis un espace, puis l'heure (hhmm) de production.

    A la fin de la saisie du n° de lot dans la textbox, j'aimerai effectuer le contrôle de la saisie.
    J'ai donc créer une macro (code ci-dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub zt_num_lot_debut_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim Heure As Variant
    Dim Min As Variant
     
    Heure = Mid(zt_num_lot_debut.Text, 9, 2)
    Min = Right(zt_num_lot_debut.Text, 2)
     
    If (Not zt_num_lot_debut.Text Like "L#####[A-Z] [0-2][0-9][0-5][0-9]" And Not Heure <= 23 And Not Min <= 59) Then
        MsgBox "Le n° saisi est incorrect!"
    End If
    Controls("zt_num_lot_debut").SetFocus
    End Sub
    C'est avec cette macro que j'ai des problèmes.
    Les contrôles sur l'heure et les minutes ne se réalisent pas : je peux rentrer des valeurs comme 2869 pour l'heure sans qu'un message d'erreur apparaisse!!!
    Si quelqu'un de plus expérimenté que moi peux jeter un oeil à ce problème, je lui en serai très reconnaissant.
    Si j'ai oubliè des informations, dites-moi, et je les ajouterai le plus vite possible.
    Cordialement,
    Guillaume846

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour Guillaume846.


    Tu peux t'en remettre à la fonction de conversion CDate pour vérifier la validité de l'heure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Heure = Mid(zt_num_lot_debut.Text, 9, 2)
    Min = Right(zt_num_lot_debut.Text, 2)
     
    On Error GoTo HeureNonValide
    TestHeure = CDate(Heure & ":" & Min)
    On Error GoTo 0

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Avril 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    merci de m'avoir répondu !
    grace à votre intervention, j'ai résolu mon problème, même si je n'ai pas utilisé votre code.

    voilà comment j'ai fait :

    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 zt_num_lot_debut_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    'teste la forme du numéro de code
    If Not (zt_num_lot_debut.Text Like "L#####[A-Z] ####") Then
        MsgBox "Le n° saisi doit être de la forme L00000A hhmm"
        Cancel = True 'laisse le curseur dans la zone de texte si la condition n'est pas remplie.
    End If
     
    'teste le format de l'heure et renvoie une erreur s'il est faux
    Dim Heure As Variant
    Dim Min As Variant
    Dim TestHeure As Boolean
     
    Heure = Mid(zt_num_lot_debut.Text, 9, 2)
    Min = Right(zt_num_lot_debut.Text, 2)
     
    TestHeure = IsDate(Heure & ":" & Min)
    If TestHeure = False Then
        MsgBox "L'heure du n° de lot est incorrect"
        Cancel = True 'laisse le curseur dans la zone de texte si la condition n'est pas remplie.
    End If
     
    End Sub
    J'ai préféré cette solution qui me parait plus "propre" que d'attendre une erreur d'une fonction et de la gérer avec on error Go to.
    Mais votre code m'a permis de découvrir la commande IsDate (qui fonctionne avec une heure, et pas seulement une date, c'est pourquoi j'étais passé à coté dans l'aide).
    Merci beaucoup.
    Guillaume846

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/09/2015, 17h26
  2. [AC-2003] Masque de saisie dans une zone de liste d'un formulaire
    Par moilou2 dans le forum IHM
    Réponses: 0
    Dernier message: 15/07/2009, 16h02
  3. [Formulaire]Contrôle de saisie dans une zone de texte
    Par ludovicparis dans le forum IHM
    Réponses: 7
    Dernier message: 29/03/2007, 13h39
  4. obliger la saisie dans une zone de texte
    Par mat75019 dans le forum Access
    Réponses: 5
    Dernier message: 02/05/2006, 16h59
  5. Réponses: 2
    Dernier message: 17/02/2005, 00h00

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