OVH Cloud OVH Cloud

[VBA] importer des données PDF dans Excel via VBA

13 réponses
Avatar
HD
Bonjour,

Je voudrais pouvoir importer les données d'un PDF dans Excel via le VBA. Il
existe des API Adobe tel que << AcroRd32.dll >>. Mais comment le piloter ?

Merci d'avance pour votre aide,

@+
HD

3 réponses

1 2
Avatar
HD
Il y'a pourtant des logiciels qui le permettent sur le net. On leur balance
n'importe quel PDF texte avec un tableau dedans et l'on nous retourne un
classeur xls avec toutes les données dans un tableau excel. Mais je pense
qu'ils doivent passer par des API de chez Adobe. Ces API sont elles
exploitables... gratuitement ? Y'a-t-il un équivalent dans le monde du libre
?

@+
HD
Avatar
MichD
OUI, tu as raison, tu as le programme acrobat -adobe
tu peux essayer ceci pour t'amuser.

Après, il s'agit de jouer avec les objets de la bibliothèque...
moi, je n'ai pas vraiment le temps d'approfondir le sujet, et toi ?


'--------------------------------------------------------------------
Sub OpenPDFPageView()

'By Christos Samaras
'http://www.myengineeringworld.net

'In order to use the macro you must enable the Acrobat library from VBA
editor:
'Go to Tools -> References -> Adobe Acrobat xx.0 Type Library, where xx
depends
'on your Acrobat Professional version (i.e. 9.0 or 10.0) you have
installed to your PC.

'Alternatively you can find it Tools -> References -> Browse and check
for the path
'C:Program FilesAdobeAcrobat xx.0Acrobatacrobat.tlb
'where xx is your Acrobat version (i.e. 9.0 or 10.0 etc.).

Dim PDFApp As AcroApp
Dim PDFDoc As AcroAVDoc
Dim PDFPageView As AcroAVPageView
Dim PDFPath As String
Dim DisplayPage As Integer

'Change this to your own complete PDF path
'Full path example
'PDFPath = "C:Program FilesAutodeskACADM
2010Setupen-USSetupResDocsAcad_Mech_2010_UserGuide.pdf"
'For Word
'PDFPath = ThisDocument.Path & "" & "PDF Sample.pdf"
'For Power Point
'PDFPath = ActivePresentation.Path & "" & "PDF Sample.pdf"
'For Excel
PDFPath = ThisWorkbook.Path & "" & "PDF Sample.pdf"

'Set the page you want to be displayed
DisplayPage = 3

'Initialize Acrobat by creating App object
Set PDFApp = CreateObject("AcroExch.App")

'Set AVDoc object
Set PDFDoc = CreateObject("AcroExch.AVDoc")

'Open the PDF
If PDFDoc.Open(PDFPath, "") = True Then
PDFDoc.BringToFront

'Maximize the document
Call PDFDoc.Maximize(True)

Set PDFPageView = PDFDoc.GetAVPageView()

'Go to the desired page
'The first page is 0
Call PDFPageView.GoTo(DisplayPage - 1)

'-------------
'ZOOM options
'-------------
'0 = AVZoomNoVary
'1 = AVZoomFitPage
'2 = AVZoomFitWidth
'3 = AVZoomFitHeight
'4 = AVZoomFitVisibleWidth
'5 = AVZoomPreferred

'Set the page view of the pdf
Call PDFPageView.ZoomTo(2, 50)

End If

Set PDFApp = Nothing
Set PDFDoc = Nothing

On Error Resume Next

'Show the adobe application
PDFApp.Show

'Set the focus to adobe acrobat pro
AppActivate "Adobe Acrobat Pro"

End Sub
'--------------------------------------------------------------------

MichD
---------------------------------------------------------------
Avatar
HD
chez moi quand je colle un tableau PDF dans excel, chaque ligne est dans
une
seule cellule, sans séparer les colonnes.
si le tableau n'est pas trop grand avec un peu de patience, on peut dans
chaque
cellule insérer un caractère qui n'existe pas dans les données (per
exemple
"&") à chauqe endroit où on veut un changement de colonne (2 fois si on
veut
laisser une colonne vide) .


Avec un petit tableau et un peu de patience c'est faisable effectivement...

Mais si l'on a un tableau de 20000 lignes comportant du texte et des nombres
avec espaces où même parmi les nombres l'on a l'espace en séparateur de
millier cela devient... ingérable.

Ce serait plus facile si on avait un moyen de délimiter par espace
seulement s'il est à côté d'un chiffre, mais je n'ai pas trouvé...


Il serait bien même de pouvoir choisir soit même le séparateur de colonne (;
ou tabulation ou autres)... mais je me demande si cette difficulté n'est pas
voulu par Adobe... qui réserverait ces possibilités de récupération de
tableau PDF dans Excel pour un logiciel payant... :-/

Après... je ne désespère pas que l'on trouve l'astuce un jour.

Malheureusement, en attendant j'utilise l'OCR d'un scanner... Mais le souci
des OCR est que leur qualité est variable d'un logiciel à l'autre et que
quoique l'on fasse ou dise l'OCR n'est jamais fiable à 100%...

@+
HD
1 2