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

  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)

  8. #8
    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

  9. #9
    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
    Chères amies, chers amis

    Je sollicite à nouveau votre aide à propos des expressions rationnelles.
    je dispose de cote financier du style:
    (Maturité) (NC) (depart) (cote) (frequence)
    cela donne un ceci

    7y nc 3m 63+/72+ (s-b, q-call)
    10y nc 1y 50/57
    5y nc 6m /33

    Grace au pattern suivant je les récupere:
    (\d+[y,m])\s*(nc|NC)\s*(\d+[y,m])\s*(\d*\+*/\d*\+*)\s*(\s*.*)

    Cependant cette cote n'est pas reperer malgré plusiseurs combinaisons:
    10y nc 1y 80

    Auriez vous une idée SVP?

    Merci

  10. #10
    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
    Ci-joint une fonction personnelle matricielle (résultat: tableau à 5 données)
    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
    Function Extract(ByVal MaCote As String) As Variant
    Dim Rg As New VBScript_RegExp_55.RegExp
    Dim Res(0 To 4) As String
    Dim j As Byte
     
    With Rg
        .Pattern = "(\d?\d.\s)(nc\s)(\d?\d.\s)(\d?\d?\+?\/?\d?\d?\+?)(.*)?"
        .IgnoreCase = True
     
        For j = 1 To 5
            Res(j - 1) = Trim(.Replace(MaCote, "$" & j))
        Next j
        Extract = Res
    End With
    Set Rg = Nothing
    End Function
    Extract("10y nc 1y 80")(0) donne 10y

    Extract("10y nc 1y 80")(4) donne 80

    Si l'utiliser directement sur la feuille et supposons tu as ta cote en A1, Sélectionne B1:F1 et un inscrit Valide par Ctrl Shift Enter

  11. #11
    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

    ton code me donne beaucoup d'indication qui m'ont permis d'avancer

  12. #12
    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
    Chères amies, chers amis

    Je remonte ce poste car je continue mon apprentissage des expression regulieres sur vba.

    je dispose à l'interieur de mes cote des suite de mot par exemple:

    6m5y atm berm rec locked 130 vs +100 payer 120/170
    1y5y +400 berm payers 42/50
    5y20y +200 Bermudan Receiver* 3280 / 3340** spot premium** 3.185% Forward

    voile je souhaite isoler le bout de string qui commence par berm et qui finit ou commence la cote (dans les exemples 120/170, 42/50 et 3280 / 3340)

    j'ai essayé plusieur bout de code comme à l'aide \w ou berm? ou ^berm mais cela marche pas

    auriez vous une idée SVP?

    Merci

    ,

  13. #13
    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
    Si la cote est toujours de la forme n/m (avec ou sans espace autour du slash et n, m des nombres)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Extract(ByVal BeforeCote As String) As String
    Dim Rg As Object
     
    Set Rg = CreateObject("Vbscript.RegExp")
    With Rg
        .Pattern = "(.*)(berm.*)(\s\d+\s?\/\s?\d+.*)"
        .IgnoreCase = True
        Extract = Trim(.Replace(BeforeCote, "$2"))
    End With
    Set Rg = Nothing
    End Function

  14. #14
    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
    Un grand merci, maleurheureusement je n'ai pas eu le temps de jetter un coup d'oeil je ferais un retour quend je serais de retour chez moi.

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