IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec expression régulière


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut Problème avec expression régulière
    Salut à tous,

    Après avoir parcouru le très bon tutorial disponible ici, il faut croire que quelquechose m'échappe.
    J'essaye de controler que dans une textbox, le texte saisi doit suivre le format suivant :
    - Un mot obligatoirement au début suivi ou non d'un ou de plusieurs autres.
    - Si il y a plusieurs mots, ils doivent obligatoirement être séparés par un ";".
    - Entre les ";" et le mot, il peut y avoir des espaces.
    - Il ne peut pas y avoir de ";" en début ni en fin.


    Suivant donc ces principes, j'ai créé ce pattern :
    Mais avec ce dernier, il y a plusieurs problèmes :
    - Il peut y avoir un ";" à la fin.
    - Plusieurs ";" peuvent se suivre.
    - Les mots peuvent contenir des caractères spéciaux (autres que [a-zA-z_0-9]).

    Merci par avance de votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Donne un exemple de ce que tu as et le même une fois modifié.
    Je ne comprends pas ta dernière "objection"
    - Les mots peuvent contenir des caractères spéciaux (autres que [a-zA-z_0-9]).
    C'est un constat après modif de la phrase initiale ou une affirmation quant à la phrase d'origine ?

  3. #3
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Par exemple :

    - Autorisé :
    abc02
    abc02;abc
    abc02 ; abc

    - Interdit :
    ;abc
    abc;
    abc;;abc
    abc$01*


    Les caractères du mot doivent être alphanumériques.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, ça j'avais compris à part les caractères spéciaux, mais avant transformation, tu peux passer un exemple ?

  5. #5
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Je ne modifie pas le contenu de la textbox, je teste juste si ça respecte le pattern ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    reg.Pattern = "^( *\w *)(;{1} *\w *)*"
    if reg.Test(TextBox.Value) = True then '...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, je n'ai jamais utilisé.
    Mais as-tu lu cette phrase
    Pour préciser combien de fois se répète un motif, il suffit de préciser le nombre d'occurences entre des accolades.

    (ab){3} correspond avec ababab ou xxxabababxxx
    ainsi, pour éviter les doubles ";", ne dois-tu pas mettre
    Je poursuis ma lecture, c'est très intéressant en effet

  7. #7
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    J'ai testé avec les parenthèses et sans, et rien ne change.
    Un peu mal foutu les expressions régulières en VBA !!!

    ^( *\w *)(;{1} *\w *)*

    En la lisant, ça donne :
    la chaine commence par aucun ou plusieurs espaces, suivi d'un mot en caractère alphanumérique, suivi d'aucun ou plusieurs espaces ; avec aucune ou plusieurs fois : un seul ";" suivi d'aucun ou de plusieurs espaces, suivi d'un mot en caractères alphanumériques, suivi d'aucun ou de plusieurs espaces.

    L'erreur doit provenir de la "liaison" entre les 2 blocs entre parenthèses...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu vas dire que j'insiste mais regarde là
    + correspond si ce qui précède se répète 1 fois ou un nombre illimité de fois
    équivalent de {1,}
    (a)+battre par ailleurs équivalent de (a){1,}battre correspond avec "abattre", "aaaaabattre" mais pas avec "battre"
    Ce qui implique que veut dire que tu n'as le caractère qu'une fois... Non ?
    J'y retourne

  9. #9
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    J'avais déjà essayé de mettre le ; entre parenthèse ou non suivi de {1} et ça ne change rien
    Et en effet le {1} est censé impliquer que ce qui précède doit apparaitre qu'un seul fois

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et en séparant les "conditions" avec un | ?

  11. #11
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Nop j'avais essayé aussi mais ça ne marche pas non plus
    Ouin, je veux mes expressions régulières PHP

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je ne pratique pas les RegExp mais j'essayerais de définir ton besoin en français comme ceci:
    Dans la partie optionnelle commençant par un ;, le mot est obligatoire.

    Si j'ai bien compris ce que j'ai (très rapidement) lu dans le tuto
    l'astérisque "*" est un quantifieur : indique un nombre d'occurences supérieur ou égal à 0
    tu devrais remplacer l'astérisque devant le 2e \w par un +.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  13. #13
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Les quantifieurs devant et derrière les \w sont pour les espaces. C'est vrai que ce n'est pas très lisible

    Bon, force est de constater que les expressions régulières, ce n'est pas le top en VBA (à part si c'est un test simple genre format de date ou d'heure où là, ça passe sans soucis).

    Finalement en utilisant un split et en testant si aucune des cases du tableau renvoyé ne sont à vide, ça devrait être bon.

Discussions similaires

  1. Problème avec expression régulière
    Par Nico128 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 17/12/2012, 17h41
  2. Problème avec expression régulière
    Par Snote100024 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 19/04/2011, 07h48
  3. problème avec expression régulière
    Par kevins dans le forum Général Python
    Réponses: 7
    Dernier message: 21/05/2010, 12h15
  4. problème avec expressions régulières
    Par washh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/08/2008, 18h35
  5. [RegEx] Problème avec expressions régulières.
    Par Cygnus Saint dans le forum Langage
    Réponses: 12
    Dernier message: 14/08/2006, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo