XL 2016 VBA - Récupérer le texte d'un fichier PDF

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,

Y a-t-il un moyen de chercher et récupérer du texte directement dans un PDF sans avoir à l'ouvrir / tout sélectionner / copier dans le clipboard texte ?

Merci pour toute information.

Edit: Titre modifié pour mieux refléter la solution de cette longue discussion.
 
Dernière édition:
Merci pour vos retours.
J'essaie en lançant Chrome (je dois l'utiliser) et faire Ctrl+A et Ctrl+C.

Mais d'une part j'ai du mal à savoir quand Chrome est prêt:
- Ça ne marche pas avec les Handle, il est présent avant l'affichage de la page
- Je dois faire une pause mais ça reste peu précis

D'autre part Chrome, contrairement à Firefox, ne prend pas le Ctrl+C après le Ctrl+A, même avec des tempos entre les 2, je sais pas pourquoi et ça m'énerve bien !
 
Bonjour à tous,
@Dudu2
Mais d'une part j'ai du mal à savoir quand Chrome est prêt:
Grace à ce petit code, on récupère une liste de toutes les applications ouvertes (visibles et non visibles)
Un fois la liste générée, tu peux rechercher le mot CHROME et s'il y est, c'est que chrome est ouvert
Peux être cela pourra t'aider

VB:
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
Private x&

Private Function EnumWindowsProc&(ByVal hwnd&, ByVal lParam&)
    Dim SLength&, Buffer As String, RetVal&
    SLength = GetWindowTextLength(hwnd) + 1
    If SLength > 1 Then
    Buffer = Space(SLength)
    RetVal = GetWindowText(hwnd, Buffer, SLength)
    x = x + 1
    Cells(x, 1) = Left(Buffer, SLength - 1)
    Cells(x, 2) = CBool(IsWindowVisible(hwnd))
    End If
    EnumWindowsProc = 1
End Function

Sub WinList()
    Application.ScreenUpdating = False
    Cells.ClearContents
    Cells(1, 1) = "CAPTION"
    Cells(1, 2) = "VISIBLE"
    Range("A1:B1").Font.Bold = True
    Range("A2").Select
    ActiveWindow.FreezePanes = True
    x = 1
    EnumWindows AddressOf EnumWindowsProc, 0
    Cells.Columns.AutoFit
End Sub

oups, pas rafraichi assez tôt

Ici par exemple on voit bien que le fichier PDF est ouvert das Chrome
1698157725287.png


@+ Lolote83
 
Bonjour @Cousinhub,
Je n'y connais strictement rien en Power Query, raison pour laquelle je n'y ai même pas pensé.
Par contre j'ai ramé pour arriver à cette fonction en essayant des tas de trucs API inopérants.
VB:
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'-----------------------------------------
'Open a PDF and copy the text in the sheet
'-----------------------------------------
Function GetPDFText(FichierPDF As String) As String
    Dim Clipboard As Object

    'Chrome exe file
    Const Chrome = "C:\Program Files\Google\Chrome\Application\chrome.exe"
    
    'DataObject late binding
    Set Clipboard = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    
    'Run Chrome
    Call Shell(Chrome & " --new-window -url " & """" & FichierPDF & """", vbNormalFocus)
    Sleep 2000
     
    'Send keys to Select All / Copy / Kill the application
    CreateObject("wscript.shell").SendKeys "^a"
    Temporisation 100
    CreateObject("wscript.shell").SendKeys "{TAB}"
    Temporisation 100
    CreateObject("wscript.shell").SendKeys "^c"
    Temporisation 100
    CreateObject("wscript.shell").SendKeys "%{F4}"
    Temporisation 10000
    
    'Get the text from the Clipboard
    With Clipboard
        .GetFromClipboard
        GetPDFText = .GetText(1)
        .SetText ""
        .PutInClipboard
    End With
End Function

'-------------
'Temporisation
'-------------
Private Sub Temporisation(NbDoEvents As Integer)
    Dim k As Integer
    
    For k = 1 To NbDoEvents
        DoEvents
    Next k
End Sub
 
Dernière édition:
Bonjour @Cousinhub,
Je n'y connais strictement rien en Power Query, raison pour laquelle je n'y ai même pas pensé.
Par contre j'ai ramé pour arriver à cette fonction en essayant des tas de trucs API inopérants.
Re-,
Moi non plus, il y a à peu près un an, je n'y connaissais rien...
Et tout ton code d'ouverture du fichier pdf se résumerait à ceci : (et le fichier pdf reste en mémoire, non inscrit dans le fichier xlxs)

PowerQuery:
let
    Source = Pdf.Tables(File.Contents("C:\Users\cousi\Documents\essai.pdf"), [Implementation="1.3"]),
    Expand = Table.ExpandTableColumn(Source, "Data", {"Column1", "Column2"}, {"Data.Column1", "Data.Column2"})
in
    Expand

L'essentiel est bien d'obtenir le résultat voulu, quelle que soit la méthode
Bonne soirée
 
L'essentiel est bien d'obtenir le résultat voulu, quelle que soit la méthode
Certes, mais si ton Power Query fait quelque chose:
- je ne sais absolument pas quoi
- ni comment l'exécuter
- ni comment en récupérer le résultat
Mais si ça récupère le texte d'un fichier PDF en presse-papier ou en feuille, alors c'est parfait👍
 
Re-,
Oui, (ps, ce n'est pas à moi, PQ😉 )
La manip est très simple
Dans le menu "Données", tu cliques sur :

1698171957579.png


Puis tu te laisses guider..
Le mode de fonctionnement de base de PQ est totalement similaire à l'enregistreur de macro.
Tout ce que tu vas faire va être enregistré.
Et tout comme dans le VBE, tu as accès à l'éditeur avancé de PQ qui te permet de modifier, optimiser, adapter la requête.
Si cela t'intéresse, demain, on peut faire une extraction "Pdf" en direct-live (ce soir, c'est "Au Nord, c'était les corons")
@ toi de voir
Bonne soirée (et bon match, du moins, pour ma part)🙂
 

Pièces jointes

  • 1698171902832.png
    1698171902832.png
    58.3 KB · Affichages: 15
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour