VBA Excel : tester une chaine de caracteres variable
Résolu/Fermé
Eaheru
Messages postés
197
Date d'inscription
mercredi 23 juin 2010
Statut
Membre
Dernière intervention
12 mars 2018
-
17 juil. 2014 à 15:01
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 juil. 2014 à 12:02
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 18 juil. 2014 à 12:02
A voir également:
- Vba contient chaine
- Chaine tnt gratuite sur mobile - Guide
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Excel si cellule contient partie texte ✓ - Forum Excel
- Nouvelle chaîne tnt gratuite 2024 - Accueil - TV & Vidéo
- Si cellule contient texte alors ✓ - Forum Excel
6 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 757
18 juil. 2014 à 11:22
18 juil. 2014 à 11:22
Bonjour,
Pourquoi pas avec une petite fonction Boolean bâtie sur une expression régulière...
J'ai, normalement, suffisamment commenté la règle de l'expression pour que tu puisses l'adapter. Mais n'hésite pas si je suis à côté de la plaque!!
ATTENTION : Bien cocher la référence nécessaire (cf code)
Pourquoi pas avec une petite fonction Boolean bâtie sur une expression régulière...
J'ai, normalement, suffisamment commenté la règle de l'expression pour que tu puisses l'adapter. Mais n'hésite pas si je suis à côté de la plaque!!
ATTENTION : Bien cocher la référence nécessaire (cf code)
Option Explicit 'cocher la référence Microsoft vbscript regular expression 5.5 'Dans Outils/Références Function TestVis(texto As Range) As Boolean Dim reg As Object Set reg = CreateObject("vbscript.regexp") reg.Global = False reg.Pattern = "(^Vis )([a-zA-Z]{1,3})( )(M)([a-zA-Z]{1,2})(-)([a-zA-Z]{1,3})( classe )([a-zA-Z]{1,2})(.)([a-zA-Z]{1})" TestVis = reg.Test(texto) 'Explication du Pattern : 'entre chaque parenthèse, on place un élément de l'enchainement 'La chaine de caractères à tester est un enchainement précis de : 'Le mot Vis au début de la chaine, => (^Vis) ^ représente le début de la chaine et Vis respecte la casse (Majusc, minusc) 'suivi de 1 à 3 lettres, => ([a-zA-Z]{1,3}) 'suivi d'un espace, => ( ) *--- Note : on aurait pu l'insérer avec le M qui suit... Mis pour l'exemple 'suivi de la lettre M, => (M) 'suivie de 1 à 2 lettres, => ([a-zA-Z]{1,2}) 'suivie d'un tiret, => (-) 'suivi de 1 à 3 lettres, => ([a-zA-Z]{1,3}) 'suivi du mot classe entouré d'espace ET en minuscules, => ( classe ) 'suivi d'1 à 2 lettres, => ([a-zA-Z]{1,2}) 'suivi d'un point, => (.) 'suivi d'une lettre. => ([a-zA-Z]{1}) 'Le tout mis bout à bout nous donne la règle (Pattern) à respecter, soit : ' "(^Vis )([a-zA-Z]{1,3})( )(M)([a-zA-Z]{1,2})(-)([a-zA-Z]{1,3})( classe )([a-zA-Z]{1,2})(.)([a-zA-Z]{1})" End Function Sub Test() Dim i& For i = 1 To 5 'Lance le test sur les cellules de A1 à A5 MsgBox TestVis(Range("A" & i)) Next i End Sub