[VBA] Expressions régulières et LIKE
Résolu
Yoskopolite
Messages postés
92
Statut
Membre
-
Yoskopolite Messages postés 92 Statut Membre -
Yoskopolite Messages postés 92 Statut Membre -
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 :
La première partie semble fonctionner, mais en ce qui concerne le {1,20}, ça bloque. Les accolades ne semble pas passer pour les intervalles de reconnaissance... Sauriez-vous me dire pourquoi ?
Merci d'avance pour vos réponses
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
La première partie semble fonctionner, mais en ce qui concerne le {1,20}, ça bloque. Les accolades ne semble pas passer pour les intervalles de reconnaissance... Sauriez-vous me dire pourquoi ?
Merci d'avance pour vos réponses
A voir également:
- Vba like
- Voir like instagram - Guide
- Coco like - Accueil - Réseaux sociaux
- Excel compter cellule couleur sans vba - Guide
- Wawacity like - Accueil - Outils
- Comment supprimer un like sur facebook - Forum Facebook
5 réponses
Salut,
mais en ce qui concerne le {1,20}, ça bloque.
Tu peux écrire toi même la fonction
Par exemple
mais en ce qui concerne le {1,20}, ça bloque.
Tu peux écrire toi même la fonction
Par exemple
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
bonjour
Pour la première option
par exemple: signale une mauvaise syntaxe et l'efface
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
Pour la première option
....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
Merci bien à vous deux.
L'idée de faire moi même la fonction ne m'est venue qu'après. Merci de l'avoir implémenté pour moi : je crois que c'est ce que je vais utiliser :-)
Après tests : ça marche bien, mais je me suis permis de modifier un petit peu ta fonction pour l'optimiser et corriger un oubli de End If, aussi :
L'idée de faire moi même la fonction ne m'est venue qu'après. Merci de l'avoir implémenté pour moi : je crois que c'est ce que je vais utiliser :-)
Après tests : ça marche bien, mais je me suis permis de modifier un petit peu ta fonction pour l'optimiser et corriger un oubli de End If, aussi :
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,
et corriger un oubli de End If, aussi
Si tu parles de ça
Alors ce n'est pas un oubli ;-)
Voici la syntaxe de if..then..else
On peut écrire par exemple
If condition Then MsgBox "ok" Else MsgBox "pas ok"
et corriger un oubli de End If, aussi
Si tu parles de ça
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"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question