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 pour un textbox


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 50
    Points : 34
    Points
    34
    Par défaut masque de saisie pour un textbox
    Bonjour,

    Je souhaite que des utilisateurs entrent une date dans un textbox au format hh:mm. J'ai donc utilisé la méthode d'ouskel'n'or dans cette discussion.

    Pour leur simplifer la tache j'aimerais que ":" se mette automatiquement lorsqu'ils saisissent "hh".

    J'ai donc utilisé la méthode de Dolphy 35 également.

    Cependant celle ci a une limite => lorsque l'on tape "hh:mm" si l'on fait une erreur, il est impossible d'éffacer "hh:".

    Avez vous une solution. Merci.
    PULEDDA Adrien

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ci dessous une autre méthode pour la saisie des heures

    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
     
    Dim StrTexte As String
     
    Private Sub TextBox1_Change()
    StrTexte = TextBox1.Text
    End Sub
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
    Select Case KeyAscii
        Case 48 To 57
            If Len(StrTexte) = 2 Then StrTexte = StrTexte & ":"
            Select Case Len(StrTexte) + 1
                Case 1
                    If KeyAscii < 48 Or KeyAscii > 50 Then KeyAscii = 0
                Case 2
                    If Left(StrTexte, 1) = 1 Then
                        If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
                    Else
                        If KeyAscii < 48 Or KeyAscii > 52 Then KeyAscii = 0
                    End If
                Case 4
                    If KeyAscii < 48 Or KeyAscii > 53 Then KeyAscii = 0
                Case 5
                    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
     
                Case Is > 5
                    KeyAscii = 0
            End Select
            If KeyAscii = 0 Then Exit Sub
            StrTexte = StrTexte & Chr(KeyAscii)
            TextBox1.Text = StrTexte
    End Select
    KeyAscii = 0
    End Sub

  3. #3
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Plus lourd, mais très ergonomique, c'est de dessiner carrément ton masque de saisie en fonction de ce qui doit être rentré genre :

    1 textbox pour les heures, un pour le minutes etc... et de coder en conséquence, ça peut faire très pro si graphiquement bien fait, tu mets le séparateur ":" ou "/" en label entre les textbox etc..

    cordialement,

    Didier

  4. #4
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonsoir à tous,

    Dans l'Userform :

    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
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'evenement LostFocus utilisé, ainsi la procédure s'exécute lors
    'lors de la perte du focus par le contrôle txtHeure
    'cette procédure appelle la fonction check_HourFormat
     
    'si check_HourFormat = VRAI (True), elle formate le txtHeure  dans la forme hh:mm
        If TextBox1.Value = "" Then Exit Sub
        If Not Check_hourFormat(TextBox1.Value) Then
            MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "Erreur de saisie"
            TextBox1.Value = ""
            Cancel = True
        Else
            TextBox1 = Left(TextBox1.Value, 2) & ":" & Right(TextBox1.Value, 2)
        End If
    End Sub
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        'Dans le TextBox, autorise uniquement les touches numériques
        KeyAscii = AutoriseFrappe(KeyAscii)
    End Sub
    Dans un module standard :
    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
    Public Function Check_hourFormat(m As String) As Boolean
    'Fonction permettant de vérifier l'heure entrée dans un textbox par un
    'utilisateur est de la forme hhmm
    'checkformat renvoi 0 pour une saisie conforme, sinon 1
    Dim hr As Integer 'variable des heures
    Dim min As Integer 'variable des minutes
        If Len(m) < 4 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
                                            '4 caractères, alors Check_Hourformat non conforme
        If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
        If m Like "####" Then
            hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
            min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
            If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
            Check_hourFormat = True
        End If
    End Function
     
    Public Function AutoriseFrappe(ByVal k As Integer) As Integer
        'Autorise uniquement les touches numériques
        Select Case k
        Case Is < 48, Is > 57       'différent de 0 à 9
            k = 0
        End Select
        AutoriseFrappe = k
    End Function
    Je n'en revendique pas la paternité.

    Klin89

Discussions similaires

  1. définir un masque de saisie pour une TextBox d'un WebForm
    Par Paul Van Walleghem dans le forum ASP.NET
    Réponses: 2
    Dernier message: 08/01/2015, 19h21
  2. Masque de saisie pour textbox
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/05/2008, 16h09
  3. masque de saisie pour un textbox
    Par clochette71 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/05/2007, 09h26
  4. masque de saisie dans un textbox (exentric word)
    Par shirya dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/01/2007, 17h00

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