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 :

Recherche Mot ds un PDF


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Points : 493
    Points
    493
    Par défaut Recherche Mot ds un PDF
    Bonjour,

    J'utilise un code de KIKI29, mais ça bloque par un message :
    Erreur d'exécution "Cette interface n'est pas prise en charge"
    le 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Option Explicit
     
    Sub SelFichier_Acrobat()
    Dim Fichier As Variant
    Dim sMot As String
     
        ChDir ThisWorkbook.Path
     
        ' Mot à rechercher
        sMot = "Système de refroidissement"
     
        Fichier = Application.GetOpenFilename("Fichier PDF (*.pdf), *.pdf")
        If Fichier <> False Then AcrobatFindText Fichier, sMot
    End Sub
     
    Private Sub AcrobatFindText(ByVal sFichier As String, ByVal sRch As String)
    Dim AcroApp As Object
    Dim AvDoc As Object
    Dim iTrouvé As Integer
     
        Set AcroApp = CreateObject("AcroExch.App")
        AcroApp.Hide
     
        Set AvDoc = CreateObject("AcroExch.AVDoc")
        Application.StatusBar = ""
     
        If AvDoc.Open(sFichier, "") Then
            If Len(sRch) > 0 Then
                '   Parametres FindText
                '       StringToSearchFor ,
                '       caseSensitive (1 Or 0),
                '       WholeWords(1 Or 0),
                '       ResetSearchToBeginOfDocument (1 Or 0)
     
                '   Renvoie -1 si Trouvé, 0 autrement
     
                iTrouvé = AvDoc.FindText(sRch, True, True, True)
                If iTrouvé = True Then
                    Application.StatusBar = sRch & " : Trouvé"
                    AcroApp.Show
                    AvDoc.BringToFront
                Else
                    AvDoc.Close (1)
                    Application.StatusBar = sRch & " : Introuvable"
                End If
            End If
        End If
     
        Set AvDoc = Nothing
        Set AcroApp = Nothing
    End Sub
    j'utilise Acrobat reader DC version 2022.001.20169 64 bits
    le problème est surement là??

  2. #2
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 977
    Points : 4 102
    Points
    4 102
    Par défaut
    Bonjour,
    En effet c'est sûrement un problème de version de pdf Creator
    KIKI29 signale dans cette discussion que ces fonctions marchent avec la version antérieure : pdfcreator-1-7-3

    Cordialement.

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 069
    Points : 9 510
    Points
    9 510
    Par défaut
    Hello,
    Citation Envoyé par laurent_ott Voir le message
    Bonjour,
    En effet c'est sûrement un problème de version de pdf Creator
    jijie cherche à utiliser acrobat pdf reader pas pdf Creator. Acrobat Pdf Reader ne permet pas d'utiliser les objets AcroExch

    Ami calmant, J.P

  4. #4
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 977
    Points : 4 102
    Points
    4 102
    Par défaut
    Bonjour,
    Par curiosité j'ai regardé comment faire pour trouver un texte dans un fichier PDF.
    J'utilise PDF Creator Pro.

    Plus d'informations sur ce site : https://opensource.adobe.com/dc-acro...2FFindText.htm

    Qui donne aussi d'autres ressources pour PDF Creator Pro.

    Voici un exemple vite fait en mettant les arguments en dur dans le code, juste pour tester.

    Code VBA : 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
    '------------------------------------------------------------------------------------------------------
    Sub Test_Recherche_Un_Texte_Dans_PDF()
    '------------------------------------------------------------------------------------------------------
    ' https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FIAC_API_OLE_Objects%2FFindText.htm
    '------------------------------------------------------------------------------------------------------
    Dim AcroAVDoc As Object
    Dim Fichier As String
    Dim Texte As String
    Dim bCaseSensitive As Boolean
    Dim bWholeWordsOnly As Boolean
    Dim bReset As Boolean
     
    Fichier = "C:\_Formation_VBA\VBA - Création des Classes Personnalisées.pdf"
    Texte = "Code."
    bCaseSensitive = False
    bWholeWordsOnly = True
    bReset = False
     
    Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
    If AcroAVDoc.Open(Fichier, "") Then
        Debug.Print AcroAVDoc.FindText(Texte, bCaseSensitive, bWholeWordsOnly, bReset)
    End If
     
    End Sub
    '------------------------------------------------------------------------------------------------------

    Bonne programmation.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello,

    jijie cherche à utiliser acrobat pdf reader pas pdf Creator. Acrobat Pdf Reader ne permet pas d'utiliser les objets AcroExch

    Ami calmant, J.P
    Oui effectivement, mais comment j'utilise "Acrobat Pdf Reader"?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par laurent_ott Voir le message
    Bonjour,
    Par curiosité j'ai regardé comment faire pour trouver un texte dans un fichier PDF.
    J'utilise PDF Creator Pro.

    Plus d'informations sur ce site : https://opensource.adobe.com/dc-acro...2FFindText.htm

    Qui donne aussi d'autres ressources pour PDF Creator Pro.

    Voici un exemple vite fait en mettant les arguments en dur dans le code, juste pour tester.

    Bonne programmation.
    Merci, mais ça plante ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
    Je vais continuer à chercher!!

    un grand merci!

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 069
    Points : 9 510
    Points
    9 510
    Par défaut
    Hello,
    si tu possèdes une version d'Excel qui le permet, tu peux aussi essayer d'utiliser Power Query. Il faudra aussi que tes fichiers PDF fonctionnent avec Power Query. Cela pourrait marcher même avec des fichiers PDF qui ne contiennent pas des tables.
    Voici un exemple pour rechercher une chaîne de texte dans un fichier PDF avec Power Query.
    Le principe :
    Dans un tableau structuré (TabPar) on indique le fichier dans lequel chercher et la chaîne à chercher.
    On va passer ces paramètres à la requête Power Query (RechercheChainePDF).
    Dans la requête Power Query on :
    1 - Lit les paramètres de recherche
    2 - Lit le fichier passé en paramètre
    3 - Filtre le tableau source avec le type "Page"
    4 - On développe toutes les colonnes trouvées Data.
    5 - On fusionne toutes ces colonnes en une seule (Trouvé) avec comme séparateur un caractère <espace>.
    6 - On filtre les lignes qui contiennent la chaîne à rechercher.


    Cela ne fonctionnera pas si la chaîne à chercher est coupée sur deux lignes. Dans ce cas, il faudrait fusionner toutes les lignes en une seule avec comme séparateur un espace et rechercher dans la ligne qui contiendrait alors tout le contenu texte du PDF.
    Voici les deux pages de mon fichier PDF de test (Refroidissement-version-eleves.pdf) qui contiennent la chaîne à rechercher :

    Nom : RechercheTexte.PNG
Affichages : 1098
Taille : 88,9 Ko

    Voici le code Power Query M de la requête de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let
        Params = Excel.CurrentWorkbook(){[Name="TabPar"]}[Content]{0},
        Source = Pdf.Tables(File.Contents(Params[Fichier]), [Implementation="1.3"]),
        #"FiltrePages" = Table.SelectRows(Source, each ([Kind] = "Page")),
        #"Data développé" = Table.Combine (#"FiltrePages"[Data] ),
        #"Fusionné" = Table.CombineColumns(#"Data développé", Table.ColumnNames(#"Data développé"), Combiner.CombineTextByDelimiter(" ", QuoteStyle.None), "Trouvé"),
        #"Résultat" = Table.SelectRows(#"Fusionné", each Text.Contains([Trouvé], Params[Recherche],Comparer.OrdinalIgnoreCase))
    in
        #"Résultat"
    et voici le résultat :
    Nom : ResRechPDF.PNG
Affichages : 1008
Taille : 12,6 Ko

    En pièce jointe, le classeur qui contient la requête Power Query. Ne pas oublier d'actualiser la requête en cas de changement dans les paramètres de recherche.

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  8. #8
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    977
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 977
    Points : 4 102
    Points
    4 102
    Par défaut
    Bravo jurassic pork pour cette technique.

    Pour les heureux possesseurs d'Acrobat Pro, j'ai travaillé sur l'exercice qui consiste à compter le nombre de fois qu'un mot est trouvé dans un document PDF (un mot et pas une suite de mot, mais on pourrait adapter à ce cas).

    Je me suis demandé comment compter le nombre de fois qu’un mot est trouvé dans un document PDF, car il n’est pas possible d’utiliser la fonction « FindText » puisqu’elle boucle sur le document indéfiniment sans prévenir qu’elle repart du début.

    Une solution est de parcourir toutes les pages du document et pour chaque page de charger les mots qui la constituent en les analysant un à un pour voir s’ils correspondent au mot cherché.
    Mais vous imaginez que sur de gros documents ça risque de prendre du temps.

    Pour aller plus vite dans les traitements j’ai fait un mixe de ces deux méthodes : lors du premier appel de « FindText » je lis tous les mots de la page pour compter combien de fois le mot cherché est trouvé. Je sais qu’il y en a au moins un. S’il y en a plusieurs, par exemple 4, je lance « FindText » 3 fois (dans le vide), de façon à « sortir » la page.
    Je mémorise le numéro de cette page.
    Et je lance la fonction « FindText » tant qu’elle trouve quelque chose. A chaque fois je regarde quel est le numéro de la page sélectionnée par « FindText ». Si c’est le numéro mémorisé pour la première recherche c’est que « FindText » tourne en rond. Je termine le traitement. Sinon j’additionne 1 au nombre de recherches fructueuses.
    Tout simplement.

    Ci-dessous le code de la fonction.
    Elle contient des arguments qui seront renseignés par le traitement : la liste des pages concernées, le nombre de pages concernées, le nombre total de pages dans le document.
    Elle renvoie le nombre de fois que le mot est trouvé.

    Ne pas oublier d’inclure en en-tête les déclarations des API :
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Declare PtrSafe Function BringWindowToTop Lib "user32" (ByVal hwnd As LongPtr) As Long
    Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As LongPtr) As Long

    Code VBA : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    '------------------------------------------------------------------------------------------------------
    Public Function Rechecher_Mot_Dans_PDF(ByVal FichierPDF As String, ByVal MotCherché As String, _
                                           ByVal RespecterCasse As Boolean, ByVal MotEntier As Boolean, _
                                           Optional ByRef ListePages As String = "", _
                                           Optional ByRef NbPage As Long = 0, _
                                           Optional ByRef TotalPage) As Long
    '------------------------------------------------------------------------------------------------------
    ' Recherche un mot dans un document PDF.
    ' FichierPDF : le nom complet du fichier (avec son chemin).
    ' MotCherché : le mot cherché.
    ' RespecterCasse : True s'il faut respecter la casse, False si l'on ne gère pas la casse.
    ' MotEntier : True s'il faut prendre la totalité du mot, False si une partie suffit.
    ' ListePages : ne pas renseigner, contiendra la liste des numéros de page où le mot est trouvé.
    ' NbPage : ne pas renseigner, contiendra le nombre de pages où le mot est trouvé.
    ' TotalPage : ne pas renseigner, contiendra le nombre de pages du document.
    '------------------------------------------------------------------------------------------------------
    ' Renvoie : le nombre de fois que le mot est trouvé (donc zéro si rien n'est trouvé), ou -1 si erreur.
    '------------------------------------------------------------------------------------------------------
    ' Sources:
    'https://stackoverflow.com/questions/15161209/find-certain-text-in-pdf-then-return-page-number-found-on-to-another-section-no
    'https://www.developpez.net/forums/d431662-20/logiciels/microsoft-office/general-vba/contribuez/excel-word-pdf-adobe-acrobat-pro-pdfcreator-1-7-3-obsolete/
    '------------------------------------------------------------------------------------------------------
    Dim AcroApp As Object
    Dim AcroAVDoc As Object
    Dim AcroAVPage As Object
    Dim AcroPDDoc As Object
    Dim PageNum As Object, PageContent As Object, AcroTextSelect As Object
    Dim iPage As Long
    Dim sContent As String, sChar As String, Trouve As Boolean
    Dim j As Long, PremPage As Long, AncPage As Long
    Dim bReset As Byte
    Dim AncCursor As Integer
    Dim NbTrouve As Long
     
    ' Gestion des erreurs:
    On Error GoTo Gest_err
    Err.Clear
     
    ' Initialisation des variables:
    bReset = 1
    NbPage = 0
    ListePages = ""
    AncCursor = Application.Cursor
     
    ' Création des objets:
    Set AcroApp = CreateObject("AcroExch.App")
    Set AcroAVDoc = CreateObject("AcroExch.AVDoc")
     
    ' Ouverture du fichier PDF:
    Call AcroAVDoc.Open(FichierPDF, "")
     
    ' Laisse Excel au premier plan:
    BringWindowToTop Application.hwnd
    SetForegroundWindow Application.hwnd
     
    ' Pointe sur la première page:
    Set AcroAVPage = AcroAVDoc.GetAVPageView()
    AcroAVPage.Goto 0
     
    ' Renseigne le nombre de pages du document:
    Set AcroPDDoc = AcroAVDoc.GetPDDoc
    TotalPage = AcroPDDoc.GetNumPages
     
    ' Si le document est valide:
    If AcroAVDoc.IsValid = True Then
     
        ' Curseur en mode attente:
        Application.Cursor = xlWait
     
        ' Premiere recherche:
        If AcroAVDoc.FindText(MotCherché, RespecterCasse, MotEntier, bReset) = True Then
     
            ' Identification de la page concernée:
            iPage = AcroAVPage.GetPageNum
     
            ' Compte le nombre de pages:
            NbPage = 1
            ' Et mémorise le numéro de la page de la première solution trouvée:
            PremPage = iPage
            AncPage = iPage
     
            ' Sélectionne la page:
            Set PageNum = AcroPDDoc.AcquirePage(iPage)
            Set PageContent = CreateObject("AcroExch.HiliteList")
            If PageContent.Add(0, 9000) <> True Then GoTo Gest_err
            Set AcroTextSelect = PageNum.CreatePageHilite(PageContent)
     
            ' Boucle sur tous les mots de la page:
            For j = 0 To AcroTextSelect.GetNumText - 1
     
                sContent = AcroTextSelect.GetText(j)
                Trouve = False
     
                ' Si le mot peut éventuellement correspondre:
                If InStr(1, LCase$(sContent), LCase$(MotCherché)) > 0 Then
     
                    Select Case MotEntier
     
                        Case False
     
                        ' Si le mode est "Partie du mot" Et "Sans casse":
                        If RespecterCasse = False Then
                            ' Il est donc trouvé:
                            Trouve = True
                        ' Si le mode est "Partie du mot" Et "Avec casse":
                        Else
                            ' Il faut vérifier avec la casse:
                            If InStr(1, sContent, MotCherché) > 0 Then
                                Trouve = True
                            End If
                        End If
     
                        Case True
     
                        ' Ne pas retenir l'éventuel espace de fin du mot:
                        sContent = RTrim(sContent)
                        ' Si le mot a un ou des caractères de plus (un point, une virgule, retour ligne, etc):
                        If Len(sContent) > Len(MotCherché) Then
                            ' Quel est le caractère suplémentaire:
                            sChar = Mid(sContent, Len(MotCherché) + 1, 1)
                            ' S'il n'est pas une lettre ordinaire alors l'accepter:
                            If (sChar >= "A" And sChar <= "Z") Or (sChar >= "a" And sChar <= "z") Or Asc(sChar) > 159 Then
                                Trouve = False
                            Else
                                sContent = Left(sContent, Len(MotCherché))
                            End If
                        End If
                        ' Analyse si le mot est celui recherché:
                        If RespecterCasse = True Then
                            If sContent = MotCherché Then Trouve = True
                        Else
                            If LCase$(sContent) = LCase$(MotCherché) Then Trouve = True
                        End If
     
                    End Select
     
                    ' Si le mot a été trouvé:
                    If Trouve = True Then
                        NbTrouve = NbTrouve + 1
                        ListePages = ListePages & iPage + 1 & ";"
                    End If
     
                End If
     
            Next j
     
            ' Boucle sur éventuels autres mots trouvés de la page pour sortir de cette page:
            For j = 2 To NbTrouve
                Call AcroAVDoc.FindText(MotCherché, RespecterCasse, MotEntier, bReset)
            Next j
     
            ' Boucle tant que le texte cherché est trouvé:
            Do While AcroAVDoc.FindText(MotCherché, RespecterCasse, MotEntier, bReset) = True
     
                ' Identification de la page concernée:
                iPage = AcroAVPage.GetPageNum
     
                '  Si elle est la première analysée alors c'est la fin du traitement :
                If iPage = PremPage Or iPage < AncPage Then Exit Do
     
                ' Sinon compte nombre de mots trouvés et leur page:
                NbTrouve = NbTrouve + 1
                ListePages = ListePages & iPage + 1 & ";"
     
                ' Et compte le nombre de page concernée:
                If iPage <> AncPage Then NbPage = NbPage + 1
                AncPage = iPage
     
                DoEvents ' Cas d'une boucle sans fin pour ouvrir l'EDI.
     
            Loop
     
        End If
     
    End If
     
    ' Gestion des erreurs:
    Gest_err:
     
    ' Message si erreur:
    Application.Cursor = AncCursor
    If Err.Number <> 0 Then
        MsgBox "Erreur : " & Err.Number & vbCrLf & vbCrLf _
             & "Description : " & Err.Description & vbCrLf & vbCrLf _
             & "Source : " & Err.Source & vbCrLf & vbCrLf _
            , vbCritical, "L'application ''Rechecher_Mot_Dans_PDF'' rencontre une erreur de traitement"
        Rechecher_Mot_Dans_PDF = -1
    Else
        Rechecher_Mot_Dans_PDF = NbTrouve
    End If
     
    ' Fermeture du document et des objets:
    On Error Resume Next
    AcroAVDoc.Close True
    AcroApp.Exit
    Set AcroApp = Nothing
    Set AcroAVDoc = Nothing
    Set AcroAVPage = Nothing
    Set AcroPDDoc = Nothing
    Set PageNum = Nothing
    Set PageContent = Nothing
    Set AcroTextSelect = Nothing
     
    Err.Clear
    End Function
    '------------------------------------------------------------------------------------------------------


    Et un exemple d’utilisation.

    Code VBA : 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 Sub Test_Rechecher_Mot_Dans_PDF()
    '------------------------------------------------------------------------------------------------------
    Dim ListePages As String
    Dim NbTrouve As Long
    Dim NbPage As Long
    Dim TotalPage As Long
    Dim MotCherché As String
    Dim Fichier As String
    Dim RespecterCasse As Boolean
    Dim MotEntier As Boolean
     
    Fichier = "votre fichier PDF avec son chemin"
    MotCherché = "défi"
    RespecterCasse = True
    MotEntier = False
     
    NbTrouve = Rechecher_Mot_Dans_PDF(Fichier, MotCherché, RespecterCasse, MotEntier, ListePages, NbPage, TotalPage)
     
    MsgBox "[" & MotCherché & "] a été trouvé : " & NbTrouve & " fois." _
            & vbCrLf & vbCrLf _
            & "Page(s) concernée(s) : " & NbPage _
            & vbCrLf & vbCrLf _
            & "Détail : " & ListePages _
            & vbCrLf & vbCrLf _
            & "Sur un document de " & TotalPage & " page(s)"
     
    End Sub
    '------------------------------------------------------------------------------------------------------
    Bonne continuation.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2023
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Tabulation dans un PDF
    Citation Envoyé par jurassic pork Voir le message
    Hello,
    si tu possèdes une version d'Excel qui le permet, tu peux aussi essayer d'utiliser Power Query. Il faudra aussi que tes fichiers PDF fonctionnent avec Power Query. Cela pourrait marcher même avec des fichiers PDF qui ne contiennent pas des tables.
    Voici un exemple pour rechercher une chaîne de texte dans un fichier PDF avec Power Query.
    Le principe :
    Dans un tableau structuré (TabPar) on indique le fichier dans lequel chercher et la chaîne à chercher.
    On va passer ces paramètres à la requête Power Query (RechercheChainePDF).
    Dans la requête Power Query on :
    1 - Lit les paramètres de recherche
    2 - Lit le fichier passé en paramètre
    3 - Filtre le tableau source avec le type "Page"
    4 - On développe toutes les colonnes trouvées Data.
    5 - On fusionne toutes ces colonnes en une seule (Trouvé) avec comme séparateur un caractère <espace>.
    6 - On filtre les lignes qui contiennent la chaîne à rechercher.


    Cela ne fonctionnera pas si la chaîne à chercher est coupée sur deux lignes. Dans ce cas, il faudrait fusionner toutes les lignes en une seule avec comme séparateur un espace et rechercher dans la ligne qui contiendrait alors tout le contenu texte du PDF.
    Voici les deux pages de mon fichier PDF de test (Refroidissement-version-eleves.pdf) qui contiennent la chaîne à rechercher :

    Nom : RechercheTexte.PNG
Affichages : 1098
Taille : 88,9 Ko

    Voici le code Power Query M de la requête de recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let
        Params = Excel.CurrentWorkbook(){[Name="TabPar"]}[Content]{0},
        Source = Pdf.Tables(File.Contents(Params[Fichier]), [Implementation="1.3"]),
        #"FiltrePages" = Table.SelectRows(Source, each ([Kind] = "Page")),
        #"Data développé" = Table.Combine (#"FiltrePages"[Data] ),
        #"Fusionné" = Table.CombineColumns(#"Data développé", Table.ColumnNames(#"Data développé"), Combiner.CombineTextByDelimiter(" ", QuoteStyle.None), "Trouvé"),
        #"Résultat" = Table.SelectRows(#"Fusionné", each Text.Contains([Trouvé], Params[Recherche],Comparer.OrdinalIgnoreCase))
    in
        #"Résultat"
    et voici le résultat :
    Nom : ResRechPDF.PNG
Affichages : 1008
Taille : 12,6 Ko

    En pièce jointe, le classeur qui contient la requête Power Query. Ne pas oublier d'actualiser la requête en cas de changement dans les paramètres de recherche.

    Ami calmant, J.P
    Bonjour et merci pour la technique.
    Existe t'il un moyen après que la requête est trouvée la valeur, prenons l'exemple du mot "Réalisation" dans ton exemple, d'extraire aussi la chaine de caractères "fluide réfrigérant" située 2 lignes au dessous (d'où mon intitulé de fabulation )?
    Encore merci, Didier

Discussions similaires

  1. [XL-2016] Effectuer une recherche d'un mot sur un PDF ouvert avec un navigateur Internet
    Par marseille13 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 19/12/2019, 11h14
  2. Recherche mot dans .PDF avec macro VBA
    Par klemsy20 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/09/2019, 14h15
  3. Rechercher mot dans PDF
    Par xev74 dans le forum ASP
    Réponses: 7
    Dernier message: 20/10/2006, 16h22
  4. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  5. [langage] exp reg: recherche mot ou ensemble de mot
    Par eautret dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h25

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