Frame textbox et setfocus

sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008 - 16 janv. 2008 à 12:48
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008 - 18 janv. 2008 à 06:45
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

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 janv. 2008 à 13:21
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
16 janv. 2008 à 13:28
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) ...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
16 janv. 2008 à 21:21
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 #   
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
17 janv. 2008 à 07:32
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???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 janv. 2008 à 09:15
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 ...
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
17 janv. 2008 à 09:36
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)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 janv. 2008 à 09:44
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)
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
17 janv. 2008 à 09:51
non c'est toujours pareil. J'avais deja essyer en fait. Je ne comprend vraiment pourquoi ca ne marche pas.
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
17 janv. 2008 à 09:53
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)
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
17 janv. 2008 à 10:03
Mon frame1 est bien sur enable=true. Mais je viens de decouvrir que mon textbox1 n'apparait pas dans l'ordre de tabulation. Bizarre??
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 janv. 2008 à 11:56
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
17 janv. 2008 à 14:58
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 ...
0
sthev Messages postés 12 Date d'inscription jeudi 26 octobre 2006 Statut Membre Dernière intervention 22 janvier 2008
18 janv. 2008 à 06:45
Je suis sous visual basic editor (pour excel), je n'ai donc pas d'evenement gotfocus, ni lostfocus.
0
Rejoignez-nous