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 :

Problème de boucle dans un TextBox_Exit [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut Problème de boucle dans un TextBox_Exit
    Bonjour le fofo !

    Je souhaite faire un formulaire pour entrer un numéro de téléphone.
    Dans le cas où ma textbox contient 10 caractères je créé des espaces entre les différents numéros.

    Si la textbox ne contient ni 10 ni 14 ni 0 caractères je souhaite la faire clignoter pour indiquer à l'utilisateur qu'il y a une erreur. Ce clignotement je veux qu'il se déclenche lorsque l'on quitte la textbox.

    Voici le code que 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
    24
    Private Sub TextBox3_exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim s, p As Variant
     
    ' Création des espaces entre nombres du numéro de téléphone
    If Len(TextBox3.Value) = 10 Then
        TextBox3.Value = Left(TextBox3.Text, 2) & " " & Mid(TextBox3.Text, 3, 2) & " " & Mid(TextBox3.Text, 5, 2) & " " & _
                        Mid(TextBox3.Text, 7, 2) & " " & Mid(TextBox3.Text, 9, 2)
    End If
     
    ' Clignotement de la textbox
    If Len(TextBox3.Value) <> 14 And Len(TextBox3.Value) <> 10 And Len(TextBox3.Value) <> 0 Then
        a = 0
        While a < 3
            a = a + 1
            TextBox3.Visible = True
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
            TextBox3.Visible = False
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
        Wend
        TextBox3.Visible = True
    End If
     
    End Sub
    Le problème que j'ai c'est, qu'arrivé au "End Sub", le programme refait un tour de boucle...et clignote une fois de trop, ce que je ne souhaite pas. Auriez-vous une idée pour éviter ce tour de boucle supplémentaire?

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    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
    Private Sub TextBox3_exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim s, p As Variant
     
    If Len(TextBox3.Value) = 10 Then
        TextBox3.Value = Left(TextBox3.Text, 2) & " " & Mid(TextBox3.Text, 3, 2) & " " & Mid(TextBox3.Text, 5, 2) & " " & _
                        Mid(TextBox3.Text, 7, 2) & " " & Mid(TextBox3.Text, 9, 2)
    End If
     
    If Len(TextBox3.Value) <> 14 And Len(TextBox3.Value) <> 10 And Len(TextBox3.Value) <> 0 Then
        a = 0
        While a < 3
            a = a + 1
            TextBox3.Visible = True
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
            TextBox3.Visible = False
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
        Wend
     
    End If
         TextBox3.Visible = True
    End Sub

  3. #3
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Le fait de déplacer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox3.Visible = True
    en dehors du If ne change rien...

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Tu veux qu'il clignotte 3 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
    17
    18
    19
    20
    21
    22
    Private Sub TextBox3_exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim s, p As Variant
     
    If Len(TextBox3.Value) = 10 Then
        TextBox3.Value = Left(TextBox3.Text, 2) & " " & Mid(TextBox3.Text, 3, 2) & " " & Mid(TextBox3.Text, 5, 2) & " " & _
                        Mid(TextBox3.Text, 7, 2) & " " & Mid(TextBox3.Text, 9, 2)
    End If
     
    If Len(TextBox3.Value) <> 14 And Len(TextBox3.Value) <> 10 And Len(TextBox3.Value) <> 0 Then
        a = 0
        While a < 2
            a = a + 1
            TextBox3.Visible = True
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
            TextBox3.Visible = False
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
        Wend
     
    End If
         TextBox3.Visible = True
    End Sub
    Par contre je reste sceptique par rapport à ça.. Si le gars rentre deux fois un mauvais numéro ça ne reclignotera pas..

  5. #5
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Ta solution est plutôt pragmatique
    Mais le troisième clignotement n'est pas de 0,1 seconde (oui j'ai le soucis du détail ) ... je voudrai absolument arrêter ce bug de bouclage, d'autant plus que là on ne parle que de clignotement: dans le cas de tout un processus le problème sera conséquent.

    J'ai essayé d'entrer un mauvais numéro et ensuite de faire Enter et ça marche à tout les coups

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Je n'arrive pas à comprendre le clignotement, je pense que le fait de le rendre visible doit le reactiver et donc l'exit se relance
    Comme ça ça marche:
    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
    Private Sub TextBox3_exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim s, p As Variant
     
    If Len(TextBox3.Value) = 10 Then
        TextBox3.Value = Left(TextBox3.Text, 2) & " " & Mid(TextBox3.Text, 3, 2) & " " & Mid(TextBox3.Text, 5, 2) & " " & _
                        Mid(TextBox3.Text, 7, 2) & " " & Mid(TextBox3.Text, 9, 2)
    End If
     
    If Len(TextBox3.Value) <> 14 And Len(TextBox3.Value) <> 10 And Len(TextBox3.Value) <> 0 Then
    TextBox3 = ""
        a = 0
        While a < 3
            a = a + 1
            TextBox3.Visible = True
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
            TextBox3.Visible = False
            p = 0.1: s = Timer: Do While Timer < s + p: DoEvents: Loop
        Wend
    End If
         TextBox3.Visible = True
    End Sub


    Et si tu cliques dehors au lieu de Enter?

  7. #7
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Super merci ! j'avais pas du tout pensé à initialiser la valeur

    Alors un truc vraiment bizarre, le clignotement se fait quand je click ailleurs mais ça dépend des endroits
    Mais c'est suffisant pour moi comme solution

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    En fait pour sortir du textbox il faut entrer dans un autre textbox ou label ou bouton... Donc une fois sorti tu ne réentres pas et le clignotement ne se fera plus..

    Si il y a plusieurs textbox à remplir l'utilisateur cliquera sur la première feras son erreur et cliquera sur le second textbox ça clignotera il changera, mais en revenant sur le prochain même si l'erreur est là ça ne clignotera plus..

    Pense à des Msgbox..

  9. #9
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    Ouais je vois bien ce que tu me dis, mais je fais ces clignotements pour justement éviter qu'il envoie des msgbox dans tous les sens ... le formulaire est énorme

    Nan au pire j'essaierai de rougir les cases fausses, au moins l'erreur sera constamment repérable

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Le problème sera le même..

    Msgbox quand tu valides le formulaire..
    Attention ça et ça c'est mal rentré..

  11. #11
    Membre éclairé Avatar de pastis.vi
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Novembre 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2008
    Messages : 251
    Par défaut
    J'ai fait ça, c'est plus funky et ça marche mieux
    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
    Private Sub TextBox3_exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    Dim s, p, var As Variant
    var = TextBox3.Value
     
    If Len(TextBox3.Value) = 10 Then
        TextBox3.Value = Left(TextBox3.Text, 2) & " " & Mid(TextBox3.Text, 3, 2) & " " & Mid(TextBox3.Text, 5, 2) & " " & _
                        Mid(TextBox3.Text, 7, 2) & " " & Mid(TextBox3.Text, 9, 2)
    End If
     
    If Len(TextBox3.Value) <> 14 And Len(TextBox3.Value) <> 10 And Len(TextBox3.Value) <> 0 Then
        TextBox3.BackColor = RGB(255, 230, 230)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 220, 220)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 210, 210)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 200, 200)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 190, 190)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 180, 180)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 170, 170)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 160, 160)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 150, 150)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 140, 140)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 130, 130)
        p = 0.01: s = Timer: Do While Timer < s + p: DoEvents: Loop
        TextBox3.BackColor = RGB(255, 120, 120)
    Else
        TextBox3.BackColor = RGB(255, 255, 255)
    End If
     
    End Sub

  12. #12
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    C'est top, bien joué.

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

Discussions similaires

  1. [Batch] problème de boucle dans un.bat
    Par raphael75015 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 22/06/2014, 08h49
  2. Réponses: 2
    Dernier message: 28/05/2010, 10h54
  3. [LV 8.6] Problème de boucle dans une boucle
    Par Quent' dans le forum LabVIEW
    Réponses: 10
    Dernier message: 28/05/2009, 17h49
  4. Problème de boucle dans deux curseurs.
    Par amine1980 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/11/2008, 16h52
  5. [Débutant] Problème de boucle dans un programme
    Par Nicolampion dans le forum MATLAB
    Réponses: 3
    Dernier message: 24/04/2008, 19h57

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