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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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?

+ 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