Conflit en vb

raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016 - 22 avril 2005 à 15:34
raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016 - 25 avril 2005 à 13:49
salut tout le monde!



je suis en train faire une petite application genre "visdata" et j'ai un problème dans mon code que voici:

Sub text_licence_lostfocus()
'regle gestion: la saisie doit comporter 15 chiffres ni plus ni moins et pas de lettres
'si je suis postionner ailleurs que sur la zone texte licence alors
If Screen.ActiveControl.Name <> "texte_licence" Then
'si la zone texte de text_licence est vide alors
If text_licence = "" Then
'envoi message
MsgBox "la saisie de 15 caractères numérique est obligatoire"
'repositionner le focus sur text_licence
text_licence.SetFocus
Exit Sub
End If
End If

'verification du nombre de caractère qui doit être de 15
Dim j As Integer
j = 0
For j = 1 To Len(text_licence.Text)
'si le nombre de caratères saisi dans text_licence est différent de 15
If Len(text_licence.Text) <> 15 Then
'envoi message
MsgBox "il faut 15 caractères numériques"
'remettre text_licence à blanc
text_licence.Text = ""
'repositionner le focus sur text_licence
text_licence.SetFocus
Exit Sub
End If
Next j

'verification du type de caractères saisi: numérique obligatoire
Dim i As Integer
i = 0
For i = 1 To Len(text_licence.Text)
'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
If UCase(Trim(Mid(text_licence.Text, i, 1))) Like "[!0-9]" Then
'envoi message
MsgBox "la saisie ne peut comporter que des chiffres"
'remettre text_licence à blanc
text_licence.Text = ""
'repositionner le focus sur text_licence
text_licence.SetFocus
Exit Sub
End If
Next i
'si tout est ok positionner le focus sur text_nom

text_nom.SetFocus

End Sub

Sub text_nom_lostfocus()
'regle gestion: la saisie ne doit comporter que des lettres
'si je suis postionner ailleurs que sur la zone texte licence alors
If Screen.ActiveControl.Name <> "text_nom" Then
'si la zone texte de text_licence est vide alors
If text_nom = "" Then
'envoi message
MsgBox "la saisie d'un nom est obligatoire"
'repositionner le focus sur text_licence
text_nom.SetFocus
Exit Sub
End If
End If
'texte_nom en majuscules
text_nom.Text = UCase(text_nom.Text)

'verification du type de caractères saisi: alpha obligatoire
Dim k As Integer
k = 0
For k = 1 To Len(text_nom.Text)
'si un ou plusieurs caractères saisis sont différents de A à Z alors
If UCase(Trim(Mid(text_nom.Text, k, 1))) Like "[!A-Z]" Then
'envoi message
MsgBox "la saisie ne peut comporter que des lettres"
'remettre text_nom à blanc
text_nom.Text = ""
'repositionner le focus sur text_nom
text_nom.SetFocus
Exit Sub
End If
Next k
'si tout est ok positionner le focus sur text_nom
text_prenom.SetFocus
End Sub





mon code "text_licence" tout seul fonctionne parfaitement

il doit y avoir un conflit entre "text_licence" et "text-nom" car
si je fais exprès de sortir de la zone de text_licence j'ai d'abord la
msgbox "la saisie de 15 caractères numérique est obligatoire" qui est
le bon message et ensuite le msgbox"la saisie d'un nom est
obligatoire"qui lui n'a rien à faire là puisqu'il s'agit du code
"text_nom" alors que je devrais toujours être dans le bout de code
"text_licence", le problème c'est que je ne peut plus sortir de mon
execution car les deux msgbox reviennent constamment à tour de role



j'espere que vous aurez la réponse et je vous dit à+

3 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
22 avril 2005 à 15:58
Pour faire des validation de champ, je te conseille d'utiliser l'EVT Validate, plutot que LostFocus

Christophe R
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
23 avril 2005 à 01:51
Idem Et de plus
Ta boucle for j = ......... ne te sert à rien donc à supprimer
il me semble que tu as oublié le Not devant tes Like
si tu sort de ta textbox la prochaine prend le focus puis tu renvoie le focus à la première donc la seconde le perd et exécute le code pas trés bon utilise validate plutot que lostfocus

Sub text_licence_lostfocus()
'regle gestion: la saisie doit comporter 15 chiffres ni plus ni moins et pas de lettres
'si je suis postionner ailleurs que sur la zone texte licence alors
If Screen.ActiveControl.Name <> "texte_licence" Then
'si la zone texte de text_licence est vide alors elle fait mois de 15 caractères
If Len(text_licence) <> 15 Then
MsgBox "la saisie de 15 caractères numérique est obligatoire"
text_licence.SetFocus
Exit Sub
End If
End If

<STRIKE>'verification du nombre de caractère qui doit être de 15
Dim j As Integer
j = 0
For j = 1 To Len(text_licence.Text)
'si le nombre de caratères saisi dans text_licence est différent de 15
If Len(text_licence.Text) <> 15 Then
'envoi message
MsgBox "il faut 15 caractères numériques"
'remettre text_licence à blanc
text_licence.Text = ""
'repositionner le focus sur text_licence
text_licence.SetFocus
Exit Sub
End If
Next j
</STRIKE>

'verification du type de caractères saisi: numérique obligatoire
Dim i As Integer
For i = 1 To Len(text_licence.Text)
'si un ou plusieurs caractères saisis sont différents de 0 à 9 alors
If UCase(Trim(Mid(text_licence.Text, i, 1))) Not Like "[!0-9]" Then
MsgBox "la saisie ne peut comporter que des chiffres"
text_licence.Text = ""
'repositionner le focus sur text_licence
text_licence.SetFocus
Exit Sub
End If
Next i
'si tout est ok positionner le focus sur text_nom
text_nom.SetFocus
End Sub

Sub text_nom_lostfocus()
'regle gestion: la saisie ne doit comporter que des lettres
'si je suis postionner ailleurs que sur la zone texte licence alors
If Screen.ActiveControl.Name <> "text_nom" Then
'si la zone texte de text_licence est vide alors
If text_nom = "" Then
MsgBox "la saisie d'un nom est obligatoire"
'repositionner le focus sur text_licence
text_nom.SetFocus
Exit Sub
End If
End If
'texte_nom en majuscules
text_nom.Text = UCase(text_nom.Text)

'verification du type de caractères saisi: alpha obligatoire
Dim k As Integer
For k = 1 To Len(text_nom.Text)
'si un ou plusieurs caractères saisis sont différents de A à Z alors
If UCase(Trim(Mid(text_nom.Text, k, 1))) Not Like "[!A-Z]" Then

MsgBox "la saisie ne peut comporter que des lettres"
text_nom.Text = ""
text_nom.SetFocus
Exit Sub
End If
Next k
'si tout est ok positionner le focus sur text_nom
text_prenom.SetFocus
End Sub

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
raro Messages postés 140 Date d'inscription vendredi 5 septembre 2003 Statut Membre Dernière intervention 7 avril 2016
25 avril 2005 à 13:49
je te remercie Jean-Paul de tes conseils, je vais essayer ton code



ps. en fait il y a 2 manière de déterminer le type de caractères voulus:



If UCase(Trim(Mid(text_nom.Text, k, 1))) Not Like "[A-Z]" Then



est égal à:




If UCase(Trim(Mid(text_nom.Text, k, 1))) Like "[!A-Z]" Then



car le point d'exclamation est égal à "contraire de"





je te remercie encore, je code, et je te dis quoi



a+



"Donne un poisson à un homme, il mangera une journée.

Apprends-lui à pêcher, il mangera toute sa vie."
0
Rejoignez-nous