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 :

garder setfocus sur textbox si condition non remplie [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut garder setfocus sur textbox si condition non remplie
    Bonsoir,

    une textbox doit recevoir un code (1lettre+10chiffres), mais je voudrai que cette textbox garde le focus si le code est erroné.

    Je me suis inspiré d'un code de Mercatog (que je salue chaleureusement), j'arrive à avoir le message mais le focus passe à la textbox suivante.

    SVP, une aide salutaire. Merci.
    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
     
    Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case Len(Me.TextBox11.Value)
    Case 0  '1er caractere*
    If (KeyAscii < 65 Or KeyAscii > 90) And (KeyAscii < 97 Or KeyAscii > 122) Then KeyAscii = 8: beep
    Case 1 To 9 'cas 9 caractères
    If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8: beep
    End Select
    End Sub
     
    Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox11 <> "" Then
    If Len(Me.TextBox11.Value) < 10 Then
    Cancel = False
    TextBox11 = ""
    TextBox11.SetFocus
    MsgBox "code erroné"
    End If
    End If

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,

    tu peux contourner le problème, si ta textbox suivante se nomme, par exemple "TextBox12", tu lui donnes le code, évenement "Enter"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub TextBox12_Enter()
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        TextBox11.SetFocus
      End If
    End If
     
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Par définition exit veux dire sortir on peut pas faire un focus sur la perte de focus!

    Faits ton test sur le bouton validé.

    Comme je dis souvent ce que saisi l'utilisateur ce n'est pas ton problème mais si tu laisses valider ca devient ton problème!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Je vous remercie pour le retour et vos conseils.

    @casefayere: merci, c'est une bonne astuce de contournement mais ça donne le même résultat qu'avec mon code initial. Avec le tien le focus passe à la dernière textbox, la 13.

    @rdurupt: passer par un bouton de validation, je suis d'accord avec toi. Sauf que le dernier utilisateur c'est moi-même.
    C'est juste pour apprendre et d'après ce que j'ai lu sur ce forum, il parait qu'on pouvait pratiquement tout faire en vba.
    Je découvre aussi qu'il faut avoir une bonne base théorique et pratique pour être efficace.

    Tout novice que je suis, pour moi normalement je mets textbox1.setfocus et le focus se met dans cette textbox et non une autre. Pourquoi?

    Je me prends peut-être le tête pour si peu, mais je voudrais comprendre le "pourquoi" et le "comment".

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    essaies comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        TextBox11.SetFocus
        Cancel = True'c'est true et non false
      End If
    End If
    Et il est même inutile de mettre cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        Cancel = True'c'est true et non false
      End If
    End If

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re,

    je te remercie. j'ai essayé tes 2 propositions sans succès

    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
    Private Sub TextBox12_Enter() 'test 1
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        TextBox11.SetFocus
        cancel = True 'c'est true et non false
      End If
    End If
    End Sub
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'test 2
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        TextBox11.SetFocus
        cancel = True 'c'est true et non false
      End If
    End If
    End Sub
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'test 3
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        cancel = True 'c'est true et non false
      End If
    End If
    End Sub

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    et pourtant, j'ai testé sur un Usf simple avec 3 textbox et le focus est bien repris par le TextBox11. Don je suis surpris, lis ceci http://silkyroad.developpez.com/VBA/...serForm/#LII-E avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) 
    	If TextBox1.Value = "" Then Cancel = True 
    End Sub
    et avec cet évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub TextBox11_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox11 <> "" Then
      If Len(Me.TextBox11.Value) < 10 Then
        TextBox11 = ""
        MsgBox "code erroné"
        Cancel = True
      End If
    End If
     
    End Sub

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re,

    je te remercie infiniment. J'ai téléchargé il y a un bon bout de temps le document en pdf. je les ai tous.

    je viens de tester et c'est niet. je n'y comprends rien de rien. Bon pour ce soir, je jette l'éponge, je suis trop fatigué.

    Bonne fin de soirée.

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, plus à titre documentaire qu'autre chose voir ici

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Kiki29 merci beaucoup pour le lien. je m'y mets de suite, ça m’intéresse.

    Bon week-end à tous!

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour, Bonjour,

    Après une lecture matinale du fil que Kiki29 m'a proposé. J'ai testé le code d'Ucfoutu et celui de Maxime Hubiche (j'ai testé sur un nouveau classeur), ça fonctionne bien. Les 2 exemples traitent des numériques uniquement, dans mon cas c'est code Alpha-Numérique.

    Dans la continuité de ce fil , pour ajouter une machine je clique sur un bouton radio, cette action vide les 13 textboxs et met le focus sur la textbox1 pour saisir le n° machine. Pour la textbox13, elle reçoit un code interne (1 lettre au début suivi de 9 chiffre sans espace (ex:F123456789)). J'ai mis 10 pour la propriété MaxLength pour limiter la saisie. Maintenant, le problème est le cas où le nombre de caractères est inférieur à 10, je voudrais que la textbox garde le focus et un message signale que le code est erroné.

    Pour le format, c'est bon les tests sont concluant. Le gros c'est le focus.

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 167
    Points
    10 167
    Billets dans le blog
    36
    Par défaut
    bonjour,

    Citation Envoyé par cathodique Voir le message
    Bonjour, Bonjour,


    Pour le format, c'est bon les tests sont concluant. Le gros c'est le focus.
    Ouvre ton aide de VBA et cherche SetFocus. Il y a même des exemples.

    Bien souvent un petit effort de recherche dans l'aide, c'est plus rapide que le forum.

    Et puis, l'intellisence t'aurait probablement aiguillé sur SetFocus

    Et c'est la même chose pour un banal clic sue TextBox et

    Quand je pense que l'on perd 3 éternités à s'énerver qu'il n'y pas encore de réponse sur le forum et que 2 ou 3 actions élémentaires avec l'aide intégrée auraient donné la solution en un tournemain, cela me décourage.

    En passant, une bonne résolution pour le Jour de l'An : Je vais utiliser l'aide plus souvent.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonsoir Clementmarcotte,

    En fait, l'aide c'est par là que j'ai commencé et je ne suis pas parvenu à comprendre pourquoi ça ne fonctionnait pas.

    J'ai poursuivi mes recherches et tests. J'ai une solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Len(TextBox11) < 10 Then
            MsgBox "code erroné"
            SendKeys "+{TAB}", False   'TextBox11.SetFocus ne fonctionne pas, le focus passe à textbox12
        End If
    End Sub
    Meilleurs vœux par anticipation.

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Cathodique bonjour

    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
    Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
    Select Case Me.TextBox11.SelStart
    Case 0                                                '1er caractere*
        If (KeyAscii < 65 Or KeyAscii > 90) And (KeyAscii < 97 Or KeyAscii > 122) Then KeyAscii = 0: Beep
    Case 1 To 9                                           'cas 9 caractères
        If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0: Beep
    End Select
    End Sub
     
    Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
    If Len(Me.TextBox11.Value) < 10 Then
        Cancel = True
        MsgBox "Code Erroné"
    End If
    End Sub
    Cancel à True permet d'annuler l'Exit

    PS. remarque le changement dans le KeyPress

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonsoir Mercatog,

    C'est avec un réel plaisir que je lis tes interventions. Comme à l'accoutumée, très efficace, ton code répond exactement à mes attentes.

    Tous mes remerciements. Je ne rate pas l'occasion de te présenter, bien qu'ils un tout petit peu en avances, mes meilleurs vœux.

    Cordialement,

    Cathodique

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

Discussions similaires

  1. Do while - Condition non remplie
    Par malgach dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 07/10/2011, 14h09
  2. Problème setfocus sur textbox
    Par neoboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2010, 18h20
  3. Ignorer image si condition non remplie
    Par Gunner4902 dans le forum Langage
    Réponses: 8
    Dernier message: 09/10/2008, 10h49
  4. afficher une fenetre affichant les conditions non remplies
    Par doogybreton dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/01/2008, 00h03
  5. [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/11/2006, 11h39

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