Problème de focus

B

Bruno P

Guest
Bonjour le Forum,

Me revoilà avec un petit problème. J'ai le code suivant :

Private Sub txtIdentFtAdv_AfterUpdate()
If Len(txtIdentFtAdv.Value) <> 8 Then
MsgBox "L'identifiant FT de l'ADV n'est pas correctement formaté." _
& "Veuillez le saisir à nouveau.", vbOKOnly + vbInformation, "Information incorrecte"
txtIdentFtAdv.Value = ""
txtIdentFtAdv.SetFocus
End If
End Sub

Si je ne me trompe, et c'est en tout cas ce que je veux faire (pas me tromper, mais ce qui suit ;o)) ), lors du passage du focus du champ txtIdentFtAdv, un contrôle du nombre de caractères saisis est effectué. Si le nombre est différent de 8, le message d'information ci-dessus s'affiche, la saisie du champ est effacée et le focus est re-donné à ce champ.
Or le focus reste sur le champ qui a lancé ce contrôle, donc pas sur txtIdentFtAdv.

Quelqu'un peut-il m'aider pour trouver la solution ? Merci d'avance.

Bruno
 
B

Bruno P

Guest
Re,

Merci à ceux qui sont en train de chercher, mais j'ai trouvé une solution en détournant le problème. Je n'agis plus lors du passage de focus au champ suivant, mais plutôt à la validation du formulaire par un bouton OK. Toutes les vérifications de saisie sont effectuées à ce moment là et le focus est bien redonné au champ de saisie souhaité.

Bonne fin de journée.
Bruno
 
@

@+Thierry

Guest
Bonjour Bruno, le Forum

Oui ce n'est pas étonnant, moi je ne fais pas de message (ou alors oui sur le bouton de validation, mais pas en cours de saisie, ça stresse tout mes Users (les Pauvres !! lol))

Non, moi je fais ceci si vraiment il est primordial qu'un TextBox soit "surveillée" :

Private Sub TextBox1_Change()
With Me.TextBox1
If Len(.Text) > 8 Then
.SelStart = 0
.SetFocus
.SelLength = Len(.Text)
End If
End With
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Me.TextBox1
If .Value <> "" And Len(.Text) <> 8 Then
Cancel = True
.SelStart = 0
.SetFocus
.SelLength = Len(.Text)
End If
End With
End Sub

C'est Radical, il n'y a pas de message, mais le User ne peut qu'obtempérer !!

D'accord c'est un peu de boulot mais si tu as beaucoup de TextBox on peut (of course) faire une sous sub Générale comme j'ai fait récemment Lien supprimé

Bonne Fin de Journée
@+Thierry
 
B

Bruno P

Guest
Bonsoir Thierry,

Merci pour ton Nième coup de main ;-)
Je vais gardé ce que j'ai trouvé cet après-midi, car j'arrive à le comprendre (je te rappelle que je débute totalement en VBA et que j'en suis à ma toute première macro), et finalement, ça me convient totalement (je te rejoins d'ailleurs, ainsi que tes Users pour trouver cette solution plus pratique et surtout moins stressante !). Et comme je serai peut-être amené à revoir cette macro pour la faire évoluer ultérieurement ...

Avec cette excuse d'être débutant, j'avoue avoir vite botté en touche à la lecture du fil que tu m'as indiqué. Trop complexe pour moi. On verra dans quelques années ;o))
 
P

peper-eliot

Guest
Bonsoir à tous

Je faisais une recherche sur
Exit(ByVal Cancel As MSForms.ReturnBoolean)
et suis tombé, entre autre, sur ce fil.

Mon problème est similaire à celui de Bruno P, à savoir contrôler la saisie dans une TextBox avant d'autoriser le User à sortir du contrôle. Dans mon cas, la TextBox DOIT être renseignée. (If .Value = "" Then
Cancel = True ...)

J'ai donc utilisé la solution de @+Thierry mentionnée dans ce fil - que je remercie au passage (je me demandais bien ou je devais mettre ce
cancel = true ... Pas d'exemple trouvé dans l'aide en ligne de VBA)
Mais, oh misère, j'ai du louper une marche, petite certe, mais qui fait que je peux sortir de la TextBox alors qu'elle est vide.

Alors, je fais humblement appel à vous avant d'aller au dodo.

Merci d'avance.

@+ peper-eliot
 

Discussions similaires