Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
694 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [vba] équivalent d'un regex

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[vba] équivalent d'un regex

n°1564389
Xocs
Posté le 24-05-2007 à 08:48:40  profilanswer
 

Nouveau problème de syntaxe plus bas !
 
Bonjour ! :)
 
Je cherche à lire une cellule sous Excel et à vérifier qu'elle contienne une chaîne de 3 chiffres suivis de 6 caractères alphanumériques avec un espace ou non au milieu.  
 
Ex : FGT 125698
      FHG0125871

 
Y a t-il en VBA un outil, un peu comme le regex en php, qui permette celà ? J'ai cherché sur le net, je n'ai rien trouvé de vraiment probant :/
 
Merci d'avance  :hello:


Message édité par Xocs le 25-05-2007 à 13:38:16
mood
Publicité
Posté le 24-05-2007 à 08:48:40  profilanswer
 

n°1564394
tegu
Posté le 24-05-2007 à 09:14:29  profilanswer
 

Il est possible d'ajouter à ton projet VBA une référence vers la bibliothèque « Microsoft VBScript Regular Expressions 5.5 »
 
Ça n'est pas aussi puissant qu'en Perl ou PHP mais ça dépanne bien.

n°1564478
jpcheck
Pioupiou
Posté le 24-05-2007 à 11:34:54  profilanswer
 

tu as trouvé ?
tu peux regarder aussi du coté de la fonction mid et trim

n°1564840
Xocs
Posté le 24-05-2007 à 19:50:22  profilanswer
 

Oui ! Merci bien tegu :)
 
Avec la fonction mid/trimça serait plus complexe et y'aurait bp d'inclusions successives de If, ça ralentirait un peu trop je crois ... non ?

n°1564883
Xocs
Posté le 24-05-2007 à 20:38:40  profilanswer
 

Mais j'ai un problème sur le regex.
 
Pour reconnaître une série comme "aozheohezoai aodh daojoih323 sp 34", j'ai mis : "^{a-z0-9 }$"
     
et pour reconnaître "D.DR 0345695" j'ai mis "^{a-z0-9 }$" "^{ }?[a-z][.]?[a-z][a-z]{ }?[0]?[0-9][0-9][0-9][0-9][0-9][0-9]$"
 
 
Cependant, je n'obtiens aucun résultat. Je me suis trompé ?

n°1564968
Xocs
Posté le 25-05-2007 à 08:18:09  profilanswer
 

Je ne comprends pas que ça ne marche pas ...
 
J'ai fait :
 

Code :
  1. Set CodeChantier = New RegExp
  2.    CodeChantier.Pattern = "[a-z][.]?[a-z][a-z]{ }?[0]?[0-9][0-9][0-9][0-9][0-9][0-9]"
  3.    CodeChantier.IgnoreCase = True
  4.    CodeChantier.Global = False
  5.    
  6.    For k = LigneDebutBalayage To LigneFinBalayage
  7.        CodeChantierPotentiel = FeuilleJour.Cells(k, 3)
  8.        Set occurrences = CodeChantier.Execute(CodeChantierPotentiel)
  9.        If occurrences.Count = 1 Then
  10.            CodeChantierValide = CodeChantierPotentiel
  11.        End If
  12.    Next


 
Ce code sert (normalement :D) à regarder si dans la feuille"FeuilleJour", les cellules(k,3) où k représente une valeur de balayage s'incrémentant contiennent une valeur correspondant au regex défini. Si c'est le cas, CodeChantierValide doit prendre cette valeur, sinon, le balayage continue.
 
Le problème : occurences ne change jamais de valeur alors que CodeChantierPotentiel prend des valeurs qui correspondent au regex (CFR 589745 par exemple).  
 
Vous sauriez m'aider ?


Message édité par Xocs le 25-05-2007 à 08:21:16
n°1565035
kiki29
Posté le 25-05-2007 à 10:56:19  profilanswer
 

Sans passer par des expressions régulières, à adapter


Option Explicit
Dim sStr as string
     .....
     sStr = ShData.Cells(k, 3)
     if sStr Like "[A-Z][.][A-Z][A-Z] #######" then
     ....
end if

Message cité 1 fois
Message édité par kiki29 le 25-05-2007 à 11:01:30
n°1565129
Xocs
Posté le 25-05-2007 à 13:01:34  profilanswer
 

kiki29 a écrit :

Sans passer par des expressions régulières, à adapter


Option Explicit
Dim sStr as string
     .....
     sStr = ShData.Cells(k, 3)
     if sStr Like "[A-Z][.][A-Z][A-Z] #######" then
     ....
end if



 
 
Ah je vais essayer ça ... :)

n°1565138
Xocs
Posté le 25-05-2007 à 13:28:17  profilanswer
 

Xocs a écrit :

Ah je vais essayer ça ... :)


 
 
ça marche, mais mon problème veint en fait de la syntaxe de mon regex :/
 
Si j'écris " *[A-Z][A-Z][A-Z] *0*[0-9][0-9][0-9][0-9][0-9][0-9] *" ça ne marche pas avec une chaîne telle que KDJ 158975 alors que "[A-Z][A-Z][A-Z] [0-9][0-9][0-9][0-9][0-9][0-9]" va la reconnaître ... Je fais une faute quelque part ?


Message édité par Xocs le 25-05-2007 à 13:36:31
n°1565150
jpcheck
Pioupiou
Posté le 25-05-2007 à 14:03:39  profilanswer
 

pkoi y a-t-il un 0 tout seul, et pas un [0-9] dans ta commande ?

mood
Publicité
Posté le 25-05-2007 à 14:03:39  profilanswer
 

n°1565186
Xocs
Posté le 25-05-2007 à 14:48:25  profilanswer
 

jpcheck a écrit :

pkoi y a-t-il un 0 tout seul, et pas un [0-9] dans ta commande ?


 
 
Parce que parfois le CodeChantier est écrit comme ça : DJH0128754 , j'essaie donc de parer à toutes les éventualités ...

n°1565188
jpcheck
Pioupiou
Posté le 25-05-2007 à 14:50:44  profilanswer
 

et à la place de mettre *0*, quel est la séquence pour dire "espace ou 0" ?  
(je ne connais pas la syntaxe :()

n°1565196
Xocs
Posté le 25-05-2007 à 15:02:46  profilanswer
 

jpcheck a écrit :

et à la place de mettre *0*, quel est la séquence pour dire "espace ou 0" ?  
(je ne connais pas la syntaxe :()


 
 
 
ah, pas bête tiens, espace ou 0 normalement s'écrit " |0" mais là il peut y avoir un espace et un 0 aussi : DFT 0125897 :D

n°1565214
jpcheck
Pioupiou
Posté le 25-05-2007 à 15:23:07  profilanswer
 

casse-b***** :D

n°1565231
tegu
Posté le 25-05-2007 à 15:35:47  profilanswer
 

Pour ton masque RegExp, le problème vient des accolades enserrant l'espace.

 

Ta version : [a-z][.]?[a-z][a-z]{ }?[0]?[0-9][0-9][0-9][0-9][0-9][0-9]

 

La mienne, testée avec "D.DR 0345695" et "CFR 589745" : [a-z][.]?[a-z]{2}( )?[0-9]{6}

Message cité 1 fois
Message édité par tegu le 25-05-2007 à 15:36:42
n°1565483
Xocs
Posté le 25-05-2007 à 23:02:15  profilanswer
 

tegu a écrit :

Pour ton masque RegExp, le problème vient des accolades enserrant l'espace.
 
Ta version : [a-z][.]?[a-z][a-z]{ }?[0]?[0-9][0-9][0-9][0-9][0-9][0-9]
 
La mienne, testée avec "D.DR 0345695" et "CFR 589745" : [a-z][.]?[a-z]{2}( )?[0-9]{6}


Ah, merci bien de ta réponse :)
Je ne peux pas tester là mais je n'y manquerai pas dès mardi :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [vba] équivalent d'un regex

 

Sujets relatifs
Regex pour tester une adresse MACEquivalent à htmlentities() en java ?
[Regex]Enlever tous les epaces blancs entre [ et ]Bash/Shellscript, aide regex/sed/tr
Equivalent de "transférer à" via la fonction mail() ?Comment faire pour qu'un texte ne "sorte" pas de l'interface?
[C] parser les entêtes de mail... regex ?[wxpython] équivalent de z-index ?
Regex particulière ? (newbie inside)Equivalent dlsym sous dos
Plus de sujets relatifs à : [vba] équivalent d'un regex


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR