sthev
Messages postés12Date d'inscriptionjeudi 26 octobre 2006StatutMembreDernière intervention22 janvier 2008
-
16 janv. 2008 à 12:48
sthev
Messages postés12Date d'inscriptionjeudi 26 octobre 2006StatutMembreDernière intervention22 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
sthev
Messages postés12Date d'inscriptionjeudi 26 octobre 2006StatutMembreDernière intervention22 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???
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...
sthev
Messages postés12Date d'inscriptionjeudi 26 octobre 2006StatutMembreDernière intervention22 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)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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 ...