Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Word Userform textbox

5 réponses
Avatar
Heffgé
Bonjour,

Question bête de débutant. Dans un testbox, je teste si la valeur me
convient. En cas d'erreur j'envoie un message d'ano mais comment je fais au
retour pour que mon textbox soit de nouveau sélectionné afin de pouvoir
ressaisir ?

d_lat est le nom du textbox

Private Sub d_lat_Change()
If IsNumeric(d_lat.Value) Then
If d_lat.Value > 180 Then
n = MsgBox("Valeur supérieure à 180", vbOKOnly)
????
Else
lat = d_lat.Value
End If
Else
n = MsgBox("Valeur non numérique", vbOKOnly)
????
End If
End Sub

J'ai essayé setfocus mais ça ne donne rien.

Merci d'avance pour vos réponses.

Heffgé

5 réponses

Avatar
David
Bonjour,

Avez-vous essayé ceci ,

Me.TextBox3.SetFocus

--
a+ Jean-Pol
Site Web : www.colovid.be
Site Web perso pour le fun : http://users.skynet.be/DAVID/
Cette page est transmise avec des électrons 100% recyclés.



"Heffgé" <*fgondard*@yahoo.fr> a écrit dans le message de news:

Bonjour,

Question bête de débutant. Dans un testbox, je teste si la valeur me
convient. En cas d'erreur j'envoie un message d'ano mais comment je fais
au retour pour que mon textbox soit de nouveau sélectionné afin de pouvoir
ressaisir ?

d_lat est le nom du textbox

Private Sub d_lat_Change()
If IsNumeric(d_lat.Value) Then
If d_lat.Value > 180 Then
n = MsgBox("Valeur supérieure à 180", vbOKOnly)
????
Else
lat = d_lat.Value
End If
Else
n = MsgBox("Valeur non numérique", vbOKOnly)
????
End If
End Sub

J'ai essayé setfocus mais ça ne donne rien.

Merci d'avance pour vos réponses.

Heffgé



Avatar
Jacques93
Bonjour Heffgé,
Heffgé a écrit :
Bonjour,

Question bête de débutant. Dans un testbox, je teste si la valeur me
convient. En cas d'erreur j'envoie un message d'ano mais comment je fais au
retour pour que mon textbox soit de nouveau sélectionné afin de pouvoir
ressaisir ?

d_lat est le nom du textbox

Private Sub d_lat_Change()
If IsNumeric(d_lat.Value) Then
If d_lat.Value > 180 Then
n = MsgBox("Valeur supérieure à 180", vbOKOnly)
????
Else
lat = d_lat.Value
End If
Else
n = MsgBox("Valeur non numérique", vbOKOnly)
????
End If
End Sub

J'ai essayé setfocus mais ça ne donne rien.

Merci d'avance pour vos réponses.

Heffgé




Tu peux utiliser l'événement BeforeUpdate, en positionnant la variable
Cancel, le focus retournera sur le contrôle :

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If [valeur incorecte] Then
MsgBox ....
Cancel = True
End If
End Sub


--

Cordialement,

Jacques.
Avatar
LE TROLL
Bonjour,

Mais a priori tu es dans la procédure de ton texteBox, donc tu devrais
t'y retrouver après le message ???
Oui, je viens de tester, tu retournes dans ton TextBox, alors tu n'as pas
besoin d'y aller puisque tu y es :o)

Sub d_lat_Change()
If IsNumeric(d_lat.Value) and d_lat.Value < 181 Then lat = d_lat.Value
If IsNumeric(d_lat.Value) and d_lat.Value > 180 Then msgbox("Valeur > à
180°)
If Not IsNumeric(d_lat.Value) then MsgBox("Valeur non numérique")
End Sub

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Heffgé" <*fgondard*@yahoo.fr> a écrit dans le message de
news:
Bonjour,

Question bête de débutant. Dans un testbox, je teste si la valeur me
convient. En cas d'erreur j'envoie un message d'ano mais comment je fais
au retour pour que mon textbox soit de nouveau sélectionné afin de pouvoir
ressaisir ?

d_lat est le nom du textbox

Private Sub d_lat_Change()
If IsNumeric(d_lat.Value) Then
If d_lat.Value > 180 Then
n = MsgBox("Valeur supérieure à 180", vbOKOnly)
????
Else
lat = d_lat.Value
End If
Else
n = MsgBox("Valeur non numérique", vbOKOnly)
????
End If
End Sub

J'ai essayé setfocus mais ça ne donne rien.

Merci d'avance pour vos réponses.

Heffgé



Avatar
Heffgé
Merci à tous pour vos réponses.

Comme je l'avais précisé le set focus seul ne donne rien. D'ailleurs je ne
comprend pas cette syntaxe, c'est quoi ce Me ?

J'ai essayé l'événement BeforeUpdate comme suggéré par Jacques93 mais ça ne
me donne rien et j'avoue ne pas vraiment comprendre la portée de cet
événement dans le cas présent.

Ben oui LE TROLL c'est bien ce que je pensais au départ mais si j'y suis
toujours ça ne se voit pas et rien n'est sélectionné.

J'ai sans doute mal exprimé ce que je souhaite obtenir. Je vais essayer de
faire mieux :
- à l'arrivée dans le champ la valeur par défaut (0 ici) est
sélectionnée et affichée en video inverse pour signaler qu'on est en mode
refrappe ;
- après saisie je veux faire des contrôles de validité et en cas
d'erreur décelée mettre le contenu en video inverse et en mode refrappe
comme avant la saisie.

En cherchant j'ai trouvé ça :
With ....
.SetFocus
.SelStart = 0
.SelLength = Len(d_lat.Text)
End With

Là je sélectionne bien tous les caractères du formtext (la touche Suppr
efface tout) mais ce n'est toujours pas visible. Faut-il que je me paye
aussi les changement de couleur à la minime et dans ce cas comment revenir
en affichage standard dès le 1er caractère saisi ?

Je suis surpris qu'il n'y ait pas un automatisme simple pour réaliser ça
alors que c'est quand même le minimum dans la gestion d'une fenêtre de
saisie.

D'autres idées maintenant que j'ai reformulé mon besoin ? Au fait je précise
également que c'est un Office 2000.

Heffgé
Avatar
Heffgé
C'est bien ce que j'avais fini par subodorer, mon Office était pourri !
Suppression, réinstallation, + 1 coup de Office Update et tout est rentré
dans l'ordre.

En utilisant l'événement Exit plutôt que Change, ça donne

Private Sub d_lat_Exit(ByVal Cancel As MSForms.ReturnBoolean)
......
Cancel = True
With ....
.SelStart = 0
.SelLength = Len(d_lat.Text)
End With
......
End Sub

Merci néanmoins pour vos suggestions.

Heffgé