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 :

Aide sur expression rationnelle sur VBA XL


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Aide sur expression rationnelle sur VBA XL
    Chères amies, chers amis

    Je sollicite à nouveaux votre aide, je souhaite recuperer une portion de string via les expressions regulieres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private m_Reg As VBScript_RegExp_55.RegExp
    Private m_Match As VBScript_RegExp_55.Match
    Private m_Matches As VBScript_RegExp_55.MatchCollection
     
    Set m_Matches = m_Reg.Execute(m_Quote)
     
    m_Reg.Pattern = "(c)\s*+(\d+[y,m])"
     
                For Each m_Match In m_Matches
                    m_OptBegin = m_Match.Value
                Next m_Match
    la chaine que j'entre en parametre est "30y nc 5y s/s 81+/87"et je souhaite recupere "5y" aprés le "c" suivi d'un espace. Or avec le pattern que j'ai entrer en parametre j'ai ce retour "30y nc" Auriez vous une idée SVP?

    J'ai essayé plusieur combinaisons mais rien a faire

    Merci

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Avec ceci tu récupères ce que tu veux je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub test_regexp(chaine As String)
     
        Dim reg As VBScript_RegExp_55.regexp
        Dim Match As VBScript_RegExp_55.Match
        Dim Matches As VBScript_RegExp_55.MatchCollection
     
        ' - instanciation
        Set reg = New VBScript_RegExp_55.regexp
        '- application sur toutes les occurences
        reg.Global = True
        ' - on ignore la casse
        reg.IgnoreCase = True
        ' - le motif
        reg.Pattern = "c\s\d+y\b"
        '- la recherche
        Set Matches = reg.Execute(chaine)
        ' - les occurences trouvées
        For Each Match In Matches
            Debug.Print Right(Match.Value, Match.Length - 2)
        Next Match
     
    End Sub
     
    Sub main()
        test_regexp "30y nc 5y s/s 81+/87"
    End Sub

  3. #3
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Meci cela fonctionne pas je n'arrive pas à recupere ce qui il ya après le "c" de "nc": le resulta est "y nc"

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Le bout de code que j'ai posté fonctionne chez moi et renvoie "5y".

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Extract(ByVal Str As String) As String
    Dim Rg As New VBScript_RegExp_55.RegExp
     
    With Rg
        .Pattern = "(.*c\s)(..)(.*)"
        .Global = True
        Extract = .Replace(Str, "$2")
    End With
    Set Rg = Nothing
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
     
    Debug.Print Extract("30y nc 5y s/s 81+/87")
    End Sub
    Donne les 2 caractères après le "nc "

  6. #6
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    merci beaucoup sa marche

    peux tu m'expliquer l'instruction $2 c'est la seule que je ne comprend pas

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Le pattern utilisé est composé de 3 parties: '.Pattern=(texte & c & espace)(2 caractères)(texte)

    la partie 1 est appelée par $1, la 2 par $2 et la 3 par $3

    Je remplace donc le texte en entier par la partie 2 (çàd les 2 caractères recherchés)

Discussions similaires

  1. [XL-2000] Expression rationnelle macro VBA
    Par jackoneill dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/04/2013, 14h38
  2. [RegEx] Aide sur expression régulière
    Par mosto dans le forum Langage
    Réponses: 1
    Dernier message: 18/03/2008, 10h58
  3. Réponses: 3
    Dernier message: 16/02/2007, 12h35
  4. Aide sur expression Reguliere
    Par chaser_T dans le forum Langage
    Réponses: 2
    Dernier message: 09/10/2006, 15h19

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