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 :

RegEx - Recupérer plusieur groupes sur plusieur lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut RegEx - Recupérer plusieur groupes sur plusieur lignes
    Bonjour à tous

    Je dois récupérer des infos d'un fichier PDF et j'utilise l'objet RegEx pour ne faire qu'une seule passe

    Prenons l'exemple suivant
    Test
    Test Number 000 fgkfdkgldj dsfhskdfh fdsqkfhdsk
    Test
    Length: 65
    Type: Numerical, Special
    Just: N/A
    Dec place: N/A
    Avec le pattern suivant
    (Test Number\s)(\w{3}\s)(\w.*)(.*\n)(.*\n)(Length:\s)(\d*)(\n)(Type:\s)(\w.*)(\n)(Just:\s)(\w.*)(\n)(Dec place:\s)(\w.*)
    j'obtiens le résultat suivant
    Nom : regExpMultilines.PNG
Affichages : 112
Taille : 51,3 Ko

    Donc jusque là content mais l'implémentation VBA je deviens

    Mon code

    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
    28
    29
    Private Function fGetRegEx(psInput As String, psPattern As String, Optional GlobalSearch As Boolean = True, _
                                Optional MultiLine As Boolean = False, Optional IgnoreCase As Boolean = True) As MatchCollection
     
        Dim mcolResults As MatchCollection
        Dim objRegEx As New RegExp
        Dim sInput As String
     
        If psInput = vbNullString Or psPattern = vbNullString Then GoTo Exit_
     
        'psInput = Replace(psInput, Chr(13), vbNewLine) '-------> Sans résultat
        'MultiLine  = True ------------------------------------------> Sans résultat
     
        With objRegEx
            .Global = GlobalSearch
            .MultiLine = MultiLine
            .IgnoreCase = IgnoreCase
            .Pattern = psPattern
        End With
     
        If objRegEx.Test(psInput) Then
            Set mcolResults = objRegEx.Execute(psInput)
            Set fGetRegEx = mcolResults
        End If
     
    Exit_:
     
        Exit Function
     
    End Function
    avec

    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
    Public Function fGetValueRegEx(Optional psValue As String)
     
        Dim oMatches As MatchCollection, oMatch As Match, oSubMatch As Variant
        Dim sValue As String, sPattern As String
     
        sPattern = "(Test Number\s)(\w{3}\s)(\w.*)(.*\n)(.*\n)(Length:\s)(\d*)(\n)(Type:\s)(\w.*)(\n)(Just:\s)(\w.*)(\n)(Dec place:\s)(\w.*)"
        Debug.Print Chr(13) & psValue
        Set oMatches = fGetRegEx(psValue, sPattern)
     
        If oMatches Is Nothing Then GoTo Exit_
     
        For Each oMatch In oMatches
     
            If oMatch.Value = "" Then GoTo Exit_ '-----------> toujours Vrai :aie:
            Debug.Print oMatch.Value
        Next oMatch   
     
    Exit_:
     
        Set oSht = Nothing
        Set oRg = Nothing
     
        Set oMatches = Nothing
     
    End Function
    Merci par avance pour tout aide

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    A priori les sauts de lignes perturbent le RegEx donc solution est de les remplacer par espace (" ")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Function fGetValueRegEx(Optional psValue As String)
     
           sStr = Replace (psValue , vbCrLf, " ")
           '... --> suite du code
     
    End Function
    Mais enlève la possibilité de patterns avec Debut/fin de ligne donc la question reste ouverte

Discussions similaires

  1. [AC-365] Exclure écritures réparties sur plusieurs lignes selon groupe de taille variable
    Par Lemanique dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/11/2019, 16h08
  2. Réponses: 5
    Dernier message: 06/04/2017, 20h13
  3. Regex Sur plusieurs lignes
    Par anis13015 dans le forum VB.NET
    Réponses: 2
    Dernier message: 27/07/2014, 19h52
  4. [Débutant] Regex sur plusieurs lignes
    Par tseki dans le forum VB.NET
    Réponses: 2
    Dernier message: 12/06/2014, 19h02
  5. recupérer plusieurs ligne d'un fichier
    Par vince2005 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 10h50

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