Frame textbox et setfocus

Signaler
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008
-
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008
-
Dans un userform, j'ai mis une frame. Dans la frame j'ai mis un textbox. j'arrive à activer le focus du textbox au demarrage de l'userform . Après verification du code saisi dans le textbox (grace à la procedure change) et envoie d'un message d'erreur si le code ne correspond pas a celui attendu (que des chiffres ou un ".")  je n'arrive pas à réactiver le focus sur le textbox?? Comment faire? Utiliser une autre procédure (exit peut etre)? Ca va faire bientot 4 heures que je tourne en rond à cause de cette *=-"[_/^ç#} de setfocus  et que je n'arrrive pas a voir pourquoi il ne reprend pas le focus apres, bien que textbox1.setfocus apparraise après l'envoie de mon message d'erreur. Si une ame charitable pouvait eclairer ma lanterne...

voici le code source (macro excel) qui me pose probleme :

Private Sub TextBox1_Change()
Dim carac As String
'Dim Binaire
Dim message
If TextBox1.Value <> "" Then
    carac = Mid(TextBox1.Value, Len(TextBox1.Value), 1)
    If carac = "0" Then
        GoTo fin
    Else
        If carac = "1" Then
            GoTo fin
        Else
            If carac = "2" Then
                GoTo fin
            Else
                If carac = "3" Then
                    GoTo fin
                Else
                    If carac = "4" Then
                        GoTo fin
                    Else
                        If carac = "5" Then
                            GoTo fin
                        Else
                            If carac = "6" Then
                                GoTo fin
                            Else
                                If carac = "7" Then
                                    GoTo fin
                                Else
                                    If carac = "8" Then
                                        GoTo fin
                                    Else
                                        If carac = "9" Then
                                            GoTo fin
                                        Else
                                            If carac = "." Then
                                                GoTo fin
                                            Else
                                                TextBox1.Value = Mid(TextBox1.Value, 1, Len(TextBox1.Value) - 1)
                                                message = MsgBox("Caractère interdit", vbCritical, "Attention")
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
fin:
'    If TextBox1.Value <> "" Then
'       Binaire = DecToBin(TextBox1.Value)
'        Label1.Visible = True
'        Label1.Caption = Binaire
'    End If
Else
'    Label1.Visible = False
End If
UserForm1.Frame1.TextBox1.SetFocus
End Sub


Private Sub UserForm_Activate()
UserForm1.Frame1.TextBox1.SetFocus
End Sub

13 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

pourquoi veux-tu l'avertir? autant juste l'empêcher non?

Private Sub TextBox1_KeyPress(KeyAscii As
Integer)
    If InStr(1, ".0123456789" & vbBack, Chr$(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Bonjour,

avant d'aller plus loin :

1) C'est quoi, tous ces If qui me donnent le vertige ?

On dirait qu'ils peuvent être remplacés par


 



If isnumeric(carac)  or carac = "." then
-------
Else
-------
End if


2) c'est quoi que tu cherches à faire ?

Si c'est contrôler une saisie de numériques : arrête ces frais et cherche dans les sourrces (nombreuses sources) ...
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
heu, perso, plus que les IF (certes c'est moche), c'est plutot les GOTO qui me donnent la nausée.

Le goto est à bannir dans un code VB6 et, plus généralement, dans un code évenementiel. C'était bon pour les anciens basic avant Windows. Dires qu'il y a encore des profs qui l'enseignent....

D'ailleurs, je me suis toujours posé la question de savoir ce qu'il faisait encore dans VB6, il aurait du etre abandonné depuis longtemps.

Plus de 8 ans de codage en VB6, jamais un goto d'utilisé, à l'exception des gestionnaires d'erreur, où là on a pas le choix.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

Merci pour vos réponses. La raison pour laquelle j'ai mis tous ces if est, en fait, que je ne connaissait pas la commandes isnumeric quand j'ai fait mon programme. J'ai remodifié mon programme de la sorte (c'est vrai que cela occupe beaucoup moins de place et que cela fait carrément plus propre) :

Private Sub TextBox1_Change()
Dim carac As String
Dim Binaire
Dim message
If Len(TextBox1.Value) <= 10 Then
    If TextBox1.Value <> "" Then
        carac = Mid(TextBox1.Value, Len(TextBox1.Value), 1)
        If IsNumeric(carac) Then
            Binaire = DecToBin(TextBox1.Value)
            Label1.Visible = True
            Label1.Caption = Binaire
        Else
            TextBox1.Value = Mid(TextBox1.Value, 1, Len(TextBox1.Value) - 1)
            message = MsgBox("Caractère interdit", vbCritical, "Attention")
        End If
    End If
Else
    TextBox1.Value = Mid(TextBox1.Value, 1, Len(TextBox1.Value) - 1)
    message = MsgBox("Limité à 10 chiffres", vbCritical, "Attention")
End If
UserForm2.Frame1.TextBox1.SetFocus
End Sub


Private Sub UserForm_Activate()
UserForm2.Frame1.TextBox1.SetFocus
End Sub


Private Sub UserForm_Initialize()
Label1.Visible = False
End Sub


J'ai toujours mon problème de focus à partir du moment où mon textbox est dans une frame (la commande du setfocus ne marche même pas dans mon userform_activate)!!!
Quelqu'un aurait il une solution à mon problème et une explication pour me dire pourquoi on ne peut pas mettre le focus sur un textbox qui est dans une frame???
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Text1 est une textbox et est unique
Tu n'as pas à préciser qu'elle se trouve dans Frame1 (je suis d'ailleurs étonné que tu n'aies pas eu là un joli message d'erreur du genre "Member or Data Member Not Found"

Reste à voir si le focus peut être passé à un contrôle d'une UserForm non active ...
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

mon userform est actif a partir de l'evenement activate.
Et j'ai eu aucun message d'erreur (essaye sous exel ca passe tous seul) juste que le setfocus ne veut pas aller dans mon textbox. Sinon le programme marche nickel. merci pour le "isnumeric". Tu as pas une idee pourquoi je n'arrive pas mettre le focus lorsqu'il est dans une frame alors que lorsqu'il est mis directement dans l'userform ca marche nickel? (Je ne vois pas l'interet d'une frame si on ne peut rien mettre dedans)
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Curieux, ton histoire ...

Ton Frame ne serait-il pas inhibé, par hasard ?

Essaye également d'ajouter, tout de suite après le setfocus :
 Text1.SetFocus
 Text1.SelStart = Len(Text1.Text)  (ou peut-être Len(Text1.Value) sous VBA)
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

non c'est toujours pareil. J'avais deja essyer en fait. Je ne comprend vraiment pourquoi ca ne marche pas.
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

qu'est tu veut dire par le frame inibé? c'est a dire invisible? (si c'est cela non non il est bien visible à l'ecran)
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

Mon frame1 est bien sur enable=true. Mais je viens de decouvrir que mon textbox1 n'apparait pas dans l'ordre de tabulation. Bizarre??
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Au besoin, change le TabIndex du Frame pour 0 et celui du textbox, s'il y en a plusieurs sur ce frame, à 0 aussi.
À l'affichage du UserForm, le Frame aura le focus par défaut ainsi que son Textbox.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
24
Question idiote mais à poser quand-même :

Aurais-tu écrit des instructions dans l'évènement GortFocus de ta Texbox ?

Si oui : lesquelles ?

Autre question idiote mais à poser quand même elle ausi  : aurais-tu écrit des Instructions dans un évènement LostFocus d'un contrôle ayant le focus au moment où tu veux le passer à ta textbox ?

Si oui : lesquelles ?

Il faut bien qu'il y ait une raison quelque part ...
Messages postés
12
Date d'inscription
jeudi 26 octobre 2006
Statut
Membre
Dernière intervention
22 janvier 2008

Je suis sous visual basic editor (pour excel), je n'ai donc pas d'evenement gotfocus, ni lostfocus.