beegeezzz
Messages postés152Date d'inscriptionmardi 4 novembre 2008StatutMembreDernière intervention10 avril 2017
-
8 avril 2009 à 09:47
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
8 avril 2009 à 12:09
Bonjour tout le monde,
Je fais un double tests, si un des deux test n'est pas respecté, j'aimerais exécuter cette procédure :
Remettre_valeur_originale txtNouveauClient(Index)
Le problème, c'est que un des deux test, même si il me renvoie FAUX, ne rentrre pas dans l'appel de la méthode ci-dessus.
Voici le test en question :
Public Function EstUneChaine(ByVal chaine As String) As Boolean
'tiret vaut 0 au départ.
'si je trouve un tiret, j'incrémente tiret de 1, je ne peux pas avoir deux tiret par nom de famille
Dim Indice As Integer, car As String, tiret As Integer
tiret = 0
For Indice = 1 To Len(chaine)
car = Mid(chaine, Indice, 1)
If (car >= "a") And (car <= "z") Or (car >= "A") And (car <= "Z") Or (car = " ") Or (car = "é") Then
ElseIf (car = "-") Then
If (tiret < 1) Then
tiret = tiret + 1
Else
MsgBox "Cette information ne peut être que des lettres ou contenir un tiret (-)"
EstUneChaine = False
Exit Function
End If
Else
MsgBox "Cette information ne peut être que des lettres ou contenir un tiret (-)"
EstUneChaine = False
Exit Function
End If
Next Indice
EstUneChaine = True
End Function
Si la chaine envoyée est autre chose qu'une lettre ou un tiret, je renvoie faux.
Ce code (en rouge) :
Private Sub txtNouveauClient_LostFocus(Index As Integer)
If Not (Validation(Trim(txtNouveauClient(Index).Text)) Or Not (EstUneChaine(Trim(txtNouveauClient(Index).Text)))) Then
Remettre_valeur_originale txtNouveauClient(Index)
End If
End Sub
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 8 avril 2009 à 12:02
Bonjour,
tu t'y prends mal (ton approcje...)
Inspire-toi de ceci et adapte :
Private Sub Command1_Click()
Dim toto As String
toto = "aBcé-dexab"
MsgBox verif(toto)
End Sub
Private Function verif(chaine As String) As Boolean
If chaine Like "*#" Or chaine Like "*-*-*" Then Exit Function
permis = "-éàç" ' tu mets ici tout ce qui est autorisé en plus du tiret et des lettres normales
For i = 1 To Len(chaine)
quoi = Mid(chaine, i, 1)
If quoi Like "[!A-z]" And InStr(permis, quoi) = 0 Then Exit Function
Next
verif = True
End Function
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 8 avril 2009 à 12:09
Salut
Pour répondre à ta première question :
Si tu imbriques des AND et des OR dans la même ligne, il y a un ordre de préférence d'exécution, comme avec les signes + - * / d'une opération.
Il faut rajouter des parenthèses :
If ( (car >= "a") And (car <= "z") ) Or _
( (car >= "A") And (car <= "Z") ) Or _ (car " ") Or (car "é") Then
La solution de jmf0 est quand même meilleure qu'une succession de conditions
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)