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 :

UserForm, TextBox & Controle de saisie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut UserForm, TextBox & Controle de saisie
    yo

    Je suis en train de creer un formulaire (UserForm) en vba pour Excel. J'ai mis en forme celui-ci et inserer des controles de saisie pour chacun des champs avec l'evenement Exit.
    J'observe que mes trois premieres textbox(es) sont bien controlees comme escompte et qu'un message d'erreur s'affiche si le formalisme n'est pas respecte, puis impose une nouvelle saisie dans ces memes textbox(es).

    Cependant, mes deux dernieres textbox(es) - j'en ai cinq en tout- ne sont controlees qu'apres la pression sur mon bouton Ok (ferme le formulaire). Les messages d'erreur s'affichent a la suite de la fermeture, les uns apres les autres.
    Ainsi, on ne boucle pas sur les saisies erronees pour correction.

    Je dois preciser que trois ComboBox(es) suivent mes premieres TextBox(es) et precedent les deux dernieres, controlees a posteriori.

    J'ai bien essaye d'imposer un retour a la textbox erronee au sein de mon code a l'aide de .SetFocus et de .Accelerator, mais pour le premier, ca ne marche, et c'est impossible pour le second...

    Arrivez-vous a cerner le probleme ?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ça serait bien de voir ton code.

  3. #3
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    Cela suffit-il ?

    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
     
    Private Sub TextBoxNumFunk_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBoxNumFunk.Value = "" Then
           Exit Sub
        Else
            If False = IsNumeric(TextBoxNumFunk.Value) Then
                msg = MsgBox("Attendu: nombre", vbExclamation, "Erreur saisie")
                TextBoxNumFunk.Value = ""
                Cancel = True
            End If
        End If
    End Sub
     
    Private Sub TextBoxQuantiteCommandee_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBoxQuantiteCommandee.Value = "" Then
            Exit Sub
        Else
            If False = IsNumeric(TextBoxQuantiteCommandee.Value) Then
                msg = MsgBox("Attendu: nombre", vbExclamation, "Erreur saisie")
                TextBoxQuantiteCommandee.Value = ""
                Cancel = True
            End If
        End If
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour voila ce que j’ai proposé sur un autre post du forum tu peux t’en inspiré si tu veux.
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    Tous les contrôles dispos d’une propriété TAG.
    Il sufis de l’utiliser pour afficher ton message d’erreur.
    Si un contrôle à un TAG= "" c’est qu’il n’est pas obligatoire si non on test le texte.
    Attention au liste et check (value).
    Vérifier le type de contrôle.
    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
    Private Sub Valider_Click()
     
    If ChampObligatoir = True Then Exit Sub
    'Code si validé
    End Sub
     
    Function ChampObligatoir() As Boolean
    Dim i As Long
     
    For i = 0 To Me.Controls.Count - 1
    Debug.Print TypeName(Me.Controls(i))
        If Trim("" & Me.Controls(i).Tag) <> "" Then
            Select Case TypeName(Me.Controls(i))
                Case "TextBox"
                    If Trim(Me.Controls(i).Text) = "" Then
                    MsgBox Me.Controls(i).Tag
                    Me.Controls(i).SetFocus
                    ChampObligatoir = True
                End If
                Case "ComboBox"
                    If Trim(Me.Controls(i).Text) = "" Then
                    MsgBox Me.Controls(i).Tag
                    Me.Controls(i).SetFocus
                    ChampObligatoir = True
                End If
                 Case "ListBox"
                    If Trim(Me.Controls(i).Text) = "" Then
                    MsgBox Me.Controls(i).Tag
                    Me.Controls(i).SetFocus
                    ChampObligatoir = True
                End If
                Case "CheckBox"
                    If Trim(Me.Controls(i).Value) = False Then
                    MsgBox Me.Controls(i).Tag
                    Me.Controls(i).SetFocus
                    ChampObligatoir = True
                End If
                 Case "OptionButton"
                    If Trim(Me.Controls(i).Value) = False Then
                    MsgBox Me.Controls(i).Tag
                    Me.Controls(i).SetFocus
                    ChampObligatoir = True
                End If
            End Select
        End If
        If ChampObligatoir = True Then Exit Function
    Next
    End Function
    Images attachées Images attachées  

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si tes Textbox ne doivent avoir que des valeurs numériques, il te suffit de contrôler la saisie :
    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
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        Select Case KeyAscii
     
            'seulement des chiffres
            Case 48 To 57
     
            'virgule et point, séparateur décimal
            Case 44, 46
     
                'seulement la virgule <-- adapter si nécessaire
                If KeyAscii = 46 Then KeyAscii = 44
     
                'seulement une fois
                If InStr(TextBox1.Text, Chr(KeyAscii)) <> 0 Then KeyAscii = 0
     
                'interdit le séparateur décimal en premier
                If TextBox1.Text = "" Then If KeyAscii = 44 Then KeyAscii = 0
     
     
            Case Else
     
                MsgBox "Seulement numérique !"
     
        End Select
     
    End Sub
    Hervé.

  6. #6
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    Merci.

    C'est bien tout ca, mais qu'est-ce qui ne fonctionne pas dans mon code ?

    Je ne trouve pas d'explication a ce "phenomene"...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/01/2011, 20h09
  2. controles de saisi de textbox
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/11/2009, 14h50
  3. Controler la saisie dans des textbox
    Par Msysteme dans le forum ASP.NET
    Réponses: 20
    Dernier message: 25/02/2009, 14h56
  4. ptit probleme de controle de saisie de formulaire
    Par coachbob44 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/03/2005, 14h09
  5. [LG]contrôle de saisie
    Par zetterberg_10 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2005, 13h55

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