|
|
|
|
Bonjour à tous,
Je cherche à vérifier par le code (en VBA Excel sur Excel 2003) si un champ contient bien certaines formes précises. En gros, voici les règles à respecter :
* 2 caractères alphabétiques (a->z ou A->Z) suivis d'un tiret, suivis de 3 chiffres, suivis d'un tiret, suivis de 2 caractères alphabétiques
* OU : entre 1 et 20 caractères alphanumériques (a->z OU A->Z ou 0->9)
Voici en gros le code que j'ai fait :
If Not Range("A1").Value Like "[A-Z][A-Z][-][1-9][2-9][3-9][-][A-Z][A-Z]" And _
Not Range("A1").Value Like "[a-zA-Z0-9]{1,20}" Then
Configuration: Laptop sous XP (AMDTurion64 1,6GHz, 512MoRAM) UC sous XP Pro 64 (Core2Duo, 4GoRam, 9600GT) Navigateur : Firefox 3 (en général), Firefox 2 et IE6 (au boulot)
Bonjour
....Like "[a-zA-Z][a-zA-Z][-]###[-][a-zA-Z][a-zA-Z]" par exemple: signale une mauvaise syntaxe et l'efface Private Sub Worksheet_Change(ByVal Target As Range)
'A partir démo Michel_xld
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
If Target.Value Like "[a-zA-Z][a-zA-Z][-]###[-][a-zA-Z][a-zA-Z]" Then Exit Sub
On Error GoTo Fin
Application.EnableEvents = False
MsgBox "Format non conforme."
Application.Undo
End If
Fin:
Application.EnableEvents = True
End Sub
pour la 2° je regarde avec Like mais je crois qu'on ne va pas couper à une fonction VBA avec l'objet vbscript.regexp à+ si je trouve qq chose Cordialement, Michel |
Salut,
Function regexA_Za_z0_9(s As String) As Boolean
Dim len_s As Byte, i As Byte
Dim test As Boolean
test = False
len_s = Len(s)
' si chaîne vide la fonction renvoie FAUX
' si nombre caractères plus grands que 20 la fonction renvoie FAUX
' si caractère non inclus la fonction renvoie FAUX
' si entre 1 et 20 caractères inclus la fonction renvoie VRAI
If len_s >= 1 And len_s <= 20 Then test = True
If test = True Then
For i = 1 To len_s
If Mid(s, i, 1) Like "[a-zA-Z0-9]" Then
test = True
Else
test = False
Exit For
End If
Next
End If
If test = True Then
regexA_Za_z0_9 = True
Else
regexA_Za_z0_9 = False
End If
End Function
106485010510997108 |
Merci bien à vous deux.
Function regexA_Za_z0_9(s As String) As Boolean
Dim len_s As Byte, i As Byte
Dim test As Boolean
test = False
len_s = Len(s)
' si chaîne vide la fonction renvoie FAUX
' si nombre caractères plus grands que 20 la fonction renvoie FAUX
' si caractère non inclus la fonction renvoie FAUX
' si entre 1 et 20 caractères inclus la fonction renvoie VRAI
If len_s >= 1 And len_s <= 20 Then
test = True
For i = 1 To len_s
If Not Mid(Range("A1").Value, i, 1) Like "[a-zA-Z0-9]" Then
test = False
Exit For
End If
Next
End If
If test = True Then
regexA_Za_z0_9 = True
Else
regexA_Za_z0_9 = False
End If
End Function
|
Salut,
If len_s >= 1 And len_s <= 20 Then test = True Alors ce n'est pas un oubli ;-) Voici la syntaxe de if..then..else Syntaxe If condition Then [statements] [Else elsestatements] Vous pouvez également utiliser la syntaxe suivante : If condition Then [statements] [ElseIf condition-n Then [elseifstatements] ... [Else [elsestatements]] End If On peut écrire par exemple If condition Then MsgBox "ok" Else MsgBox "pas ok" 106485010510997108 |