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

VBA Discussion :

Expression régulières en VBA


Sujet :

VBA

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut Expression régulières en VBA
    Je m'arrache les cheveux sur les expressions régulières en VBA (Access 2003). Elle ne réagissent pas de la même façon que ce que je teste par exemple sur http://regexstorm.net et qui marche sous VB.NET
    Le but (sous VBA), ne pas détecter un mot clef s'il fait partie des commentaires dont le marque est un #:

    Donc, detecter 'TOTO' dans les cas suivants:

    TOTO
    TITI + TOTO
    TUTU# + TOTO <-- une variable peut avoir une extension # donc ne pas confondre avec un commentaire

    et pas dans ceux là

    # TOTO
    blabla # TOTO
    #TOTO

    Auriez vous une idée ?

    Merci

    Olivier

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    je ne vois pas trop l'interet de sortir l'artillerie le canon 600mlmetres qu'est le regex pour sortir "toto" de tes combinaisonset meme un autre mot d'ailleur
    un simple split ou meme simplement un like voir un mid
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour !

    D'accord avec toi Patrick mais dans le cas de l'apprentissage de l'utilisation d'expressions rationnelles,
    mieux vaut commencer par un simple exercice, n'est-il pas ?!

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour Marcl
    je dis comme je l'ai dis a un autre demandeur ces derniers jours avant de commencer a apprendre la manipulation des expressions regulieres
    mieux vaut maitriser les fonctions que VB(/A/S) met a notre dispo

    mid,len,like,instr,instrrev,strreverse,match,etc......

    quand on une certaine aisance avec c'eux la ,on est capable de faire un raisonnement pour coder un pattern ,la syntaxe et quelques autres regles et subtilités etant ma fois que de l'apris par coeur

    un regex c'est avant tout un raisonnement pour moi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonsoir
    je ne vois pas trop l'interet de sortir l'artillerie le canon 600mlmetres qu'est le regex pour sortir "toto" de tes combinaisonset meme un autre mot d'ailleur
    un simple split ou meme simplement un like voir un mid
    J'ai eu tort de mettre un exemple trop simple . Je cherchais juste le principe.
    En fait, au lieu de TOTO, ce sont des expressions complexes (fonctions, arguments...) que je cherche dans un texte.
    J'ai la solution pure vb avec les split, instr... Je pourrai m'en contenter mais quand on cherche des expressions diverses, le code commence a être bien lourd. D'où mon intérêt pour les RegEx qui amène plus de souplesse quand à la gestion des occurrences. Le canon de 600 est bien plus efficace

    Kiki29: j'ai bien sûr cherché sur cette excellente présentation. Hélas je n'ai pas trouvé la solution à mon besoin

    Je continue de chercher...

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour zitoune92
    Juste un mot :
    Si tu cherches simplement à t'intéresser à l'utilisation des expressions régulières, c'est une chose.
    Si par contre tu entends les utiliser fréquemment, sache ceci :
    VBScript, sans lequel Regex se saurait être utilisé, est délibérément inhibé sur plusieurs machines (dont la mienne) pour des raisons de sécurité. La portabilité de tes classeurs sera dès lors sujette à d'importants aléas.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    donne moi ton morceau de texte et le/s parties que tu chaerche a chopper
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    donne moi ton morceau de texte et le/s parties que tu chaerche a chopper
    Et bien voici un extrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #   EXTRACT /PARAMETER=TOTO/PARVAR=x_m201z /FRAMENO=2 /CALIBRATE     //
    #   extractParameterReal("TOTO", 0, m201z, CAL);      
    #extractParameterInt("TOTO", 0, i_raw_data, RAW); 
    RAW :=RAW+1;     # this replaces insertParameterInt("TOTO", i_rngstat, RAW);
      extractParameterInt("TOTO", 0, i_raw_data, RAW);
    return(RAW# - TOTO);
      // Insert DRNG#
      insertParameterInt("TOTO", i_rngstat, RAW);
      extractParameterReal("TOTO", 0, x_p_fu, CAL);
    Le pattern "(insertParameterInt\(\x22|insertParameterReal\(\s*\x22|extractParameterReal\(\x22|extractParameterInt\(\s*\x22)(.*)(\x22)" me retourne bien les TOTO des lignes 5,8,9 mais aussi les lignes 2,3 & 4 c'est là mon problème car VBA ne supporte pas le LookBehind mais il doit bien y avoir un contournement.

    Merci d'avance

    Olivier

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    ok ca me parait moins compliqué que prevu
    dans le doute quelle ligne veux tu récupérer exactement
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    je veux récupérer les lignes 5,8,9 seulement

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    non c'est bon j'ai compris
    alors voila tes lignes :
    ligne5= extractParameterInt("TOTO", 0, i_raw_data, RAW);
    ligne8=insertParameterInt("TOTO", i_rngstat, RAW);

    ligne 9=extractParameterReal("TOTO", 0, x_p_fu, CAL);

    on cherche donc
    les ligne qui commence par extractParameterInt OU!!! insertParameterInt OU!! extractParameterReal

    on peut deja considérer que le 1er segment reccherché est une triple condition
    qui prourrait ce traduire par ce motif simple en utilisant que"^insert/^extract"

    segment1="(^insert|^extract)" :::: l'un ou l autre remarque le chapeau qui explicite qe rien ne doit etre devant et que ca doit etre absolument le debut de phrase
    au quel on ajoute (\D{1,20}::: suivi de 1 a 20 caractere on s'en fout n'importe les quels
    au quell on ajoute (TOTO) ::::: suivi de toto
    a partir de la on a toute les ligne toto correspondant


    attention comme il s'agit d'indentation javascript il se peut que tes lignes commencent peut etre par des espaces dans ce cas la c'est
    (^\s{1,10})+(insert|extract)::: deja ici celles qui ont le"#" sautent

    tu suis mon raisonnement ?
    essaie de comprendre la suite maintenant

    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Sélectionner le mot dans le pattern n'est pas un problème. Celui ci dessous, qui ressemble au tiens marche très bien MAIS - et c'est ce que je veux éviter- il marche aussi s'il se trouve après un # isolé
    Attention, le ^ au début fait que seul le pattern en début de texte est trouvé. Pas les autres (il y a plusieurs lignes!)

    Pattern="(insertParameterInt\(\x22|insertParameterReal\(\s*\x22|extractParameterReal\(\x22|extractParameterInt\(\s*\x22)(.*)(\x22)"


    Cela me permet d'extraire ce qui est entre les double-quotes (TOTO ou autre chose c'est à dire le 3ème bloc)

    En langage clair il me faudrait "Détecter Pattern sauf si # devant"

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    puré si les dieze doivent etre eccepté il te suffit de supprimer les lignes qui en contiennent c'est tout
    et dans ton exemple le pire c'est qu'il restera que les 3 lignes qui sont bonnes
    tu passe tes 3 ligne au regex pour prendre que ce qui est entre tes parentheses
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    puré si les dieze doivent etre eccepté il te suffit de supprimer les lignes qui en contiennent c'est tout
    et dans ton exemple le pire c'est qu'il restera que les 3 lignes qui sont bonnes
    tu passe tes 3 ligne au regex pour prendre que ce qui est entre tes parentheses


    C'est plus du canon de 600 c'est du lance flamme

    Merci quand même...

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    a bon ??
    parce que pour toi supprimer les lignes qui contiennent un "#" representerait un travail d'une usine a gaz??
    je le fait en une ligne dans une boucle
    de rien quand meme salut


    et au fait ton model de pattern avec tes x22 et je sais plus quoi chez moi il me retourne 9 lignes VIDES!!!!
    rien nada walouh walouh

    c'est ce qui se produit quand un pattern est mal pensé ;d'un pc a l'autre ou exploitation différente c'est jour/nuit

    surtout que l'argument caractere qui te pause probleme est lui meme un caractere a echaper dans VBA
    et il est meme fort possible qu'il y ai conflit avec le "#" echapé en vba et le fait d'en avoir besoins dans ton pattern dans le segment d'exclusion

    la zitoun elle est pas fraiche hein ou alors elle a perdu son noyeau
    bon courage

    une derniere petite aide qui t'aiderait a comprendre ce que je dit
    fait le en javascript ton regex dans un document local tu comprendra qu'il y a regex et regex
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 169
    Points : 100
    Points
    100
    Par défaut
    Ce n'est pas parce que tu n'a pas cerné le problème et encore moins l'avoir résolu qu'il faut être désagréable.
    Tu proposes une solution en dehors du contexte. Désolé si je ne suis pas béat devant. Quelle arrogance!

    Voilà. Fin de la discussion.

    Et essaie de te relire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expression régulière en VBA
    Par abso_ dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 22/01/2014, 13h46
  2. Expression régulière et vba
    Par qltmi dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/12/2008, 17h49
  3. Expression régulière en vba?
    Par Kikumaru dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/08/2007, 14h38
  4. VBA et expressions régulières
    Par zoidy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/08/2007, 15h29
  5. [RegEx] Traduire des "expression régulières" VBA en PHP
    Par jcachico dans le forum Langage
    Réponses: 13
    Dernier message: 19/01/2006, 14h02

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