XL 2016 Extraction données pdf vers tableau excel

LIN88

XLDnaute Nouveau
Bonjour,
Etant débutante en VBA j'ai absolument besoin de votre aide pour écrire un code afin d'extraire les données depuis les fiches pdf vers le tableau excel. J'en ai environ 200 fiches cela sera donc un énorme preneur du temps pour faire ce travail manuellement. En effet dans les fiches à gauche j'ai les noms de paramètres et à droite les chiffres et le texte à copier et insérer dans le tableau. J'ai essayé d'écrire un code en me basant sur les précédentes discussions mais je n'ai pas réussi à le faire fonctionner. Je vous joins le tableau que j'ai commencé à remplir manuellement sous forme d'image pour une meilleure comprehension et une des fiches pdf. D'avance merci de votre aide !
1611672006773.png
 

Pièces jointes

  • 20-063358.pdf
    10.7 KB · Affichages: 29

kiki29

XLDnaute Barbatruc

Pièces jointes

  • LecturePDF.txt
    1.2 KB · Affichages: 20
Dernière édition:

LIN88

XLDnaute Nouveau
Bonjour kiki, merci pour ta réponse. J'ai cliqué sur le 2ème lien, j'ai récupéré ce code :
Option Explicit

Sub SelectionFichier2()
Dim FD As FileDialog

Set FD = Application.FileDialog(msoFileDialogFilePicker)
With FD
.InitialFileName = ThisWorkbook.Path
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "PDF", "*.pdf", 1
.ButtonName = "Ouvrir fichier"
.Title = "Sélectionner un fichier PDF"
End With

If FD.Show = True Then Lire2 FD.SelectedItems(1)

Set FD = Nothing
End Sub

' Cocher Reference : Microsoft Forms 2.0 Object Library
Sub Lire2(sFichier As String)
Dim PDDoc As Object
Dim PDPage As Object
Dim PDText As Object
Dim TextSelt As Object
Dim Rep As Long
Dim i As Long, j As Long
Dim wkPage As Long
Dim wkCnt As Long
Dim wkText As String
Dim FName As String
Dim oDO As Object

FName = sFichier
Set PDDoc = CreateObject("AcroExch.PDDoc")
Rep = PDDoc.Open(FName)

Set TextSelt = CreateObject("AcroExCh.HiliteList")
TextSelt.Add 0, 32767

wkPage = PDDoc.GetNumPages()
For i = 0 To wkPage - 1
Set PDPage = PDDoc.AcquirePage(i)
Set PDText = PDPage.CreatePageHilite(TextSelt)
wkCnt = PDText.GetNumText()
For j = 0 To wkCnt - 1
wkText = wkText & PDText.GetText(j)
Next j
Next i
PDDoc.Close

Set PDPage = Nothing
Set PDText = Nothing

Set oDO = New MSForms.DataObject
oDO.Clear
oDO.SetText wkText
oDO.PutInClipboard

Application.ScreenUpdating = False
ShTest.Cells.Clear
ShTest.Range("A1").PasteSpecial

Set oDO = Nothing
Set TextSelt = Nothing
Set PDDoc = Nothing

ShTest.Range("H1").Select
Application.ScreenUpdating = True
End Sub
Pourrais-tu le commenter un peu pour que je puisse l'adapter à mon cas ? malheureusement avec très peu de connaissances en VBA je ne me débrouillerai pas toute seule. Pour mon cas ça sera une selection d'une ligne après l'autre dans le pdf et l'insertion dans les colonnes du tableau excel, puis je suppose je devrai copier le code 200 fois pour les 200 fiches que j'ai à extraire
 

kiki29

XLDnaute Barbatruc
Re, donc via Manipulation des fichiers en VBA et Manipuler chaines de caractères en VB6/VBA Excel
tu devrais parvenir à lire le fichier obtenu qui ressemble à la pj, et placer les infos utiles à leur place dans ton tableau. Comme déjà précisé ce n'est pas une sinécure.

Sinon j'ai retrouvé PDF2XLS qui permet de balayer x fichiers pdf via le Reader, la séparation entre chaque fichier dans la feuille extraction est une ligne vide. c'est une version Office 32 bits.
 

Pièces jointes

  • 1.png
    1.png
    26.8 KB · Affichages: 45
  • 2.png
    2.png
    23.4 KB · Affichages: 39
  • PDF2XLS.zip
    56.8 KB · Affichages: 16
Dernière édition:

LIN88

XLDnaute Nouveau
Bonjour kiki, concernant pdf2xls cela ne fonctionne pas mlaheureusement dans mon cas ... la macro ne fait pas l'extraction (la fiche pdf s'ouvre, mais après c'est l'erreur qui s'affiche ; ça ne passe pas au niveau "paste" (j'ai mis en rouge ci-dessous) :

Private Sub Pdf2Txt()
Dim sFichier As String
Dim sAcro As String
Dim LastRow As Long, i As Long, LastRow2 As Long
Dim iDep As Long, iFin As Long
Dim sDossier As String
Const Tempo As Long = 500

QueryPerformanceCounter Debut
EffacerClipboard
DoEvents
DecompteA
If Cpt = 0 Then
MsgBox "Taper dans la colonne A un x ou X en vis à vis" & vbCrLf & _
"des fichiers à traiter de la colonne B", vbInformation + vbOKOnly, "x ou X"
Exit Sub
End If

Application.StatusBar = ""
sDossier = ShParam.Cells(1, 1)
LastRow = ShParam.Range("B" & Rows.Count).End(xlUp).Row
ShExtraction.Activate

sAcro = LocaliserAcroReader

If ExistenceFichier(sAcro) = False Then
MsgBox "Le chemin d'Acrobat Reader est erroné ou" & vbCrLf & "Acrobat Reader n'est pas installé" & vbCrLf & vbCrLf & _
"Voir la procédure Pdf2Txt du module mPDF" & vbCrLf & "à sAcro = .....", vbInformation + vbOKOnly, "Chemin du Reader erroné"
Debug.Print sAcro
Exit Sub
End If

With ShExtraction
.Activate
.Cells.Delete Shift:=xlUp
.Range("A1").Select
End With

iDep = 0
iFin = LastRow - RDepart + 1
For i = RDepart To LastRow
If UCase$(ShParam.Range("A" & i)) = "X" Then
iDep = iDep + 1
sFichier = sDossier & "\" & ShParam.Range("B" & i)

Shell sAcro & " " & sFichier, vbNormalFocus

With CreateObject("WScript.Shell")
.SendKeys "^a^c", True
Sleep Tempo
.SendKeys "^q", True
Sleep 2 * Tempo
End With

LastRow2 = ShExtraction.Range("A" & Rows.Count).End(xlUp).Row
If LastRow2 = 1 Then LastRow2 = 0

DoEvents

With ShExtraction
.Activate
.Range("A" & LastRow2 + 2).Select
.Paste
End With

Application.StatusBar = "Extraction : " & iDep & " / " & Cpt
End If
DoEvents
Next i

' l'Appel des procédures de formatage des données extraites est à placer ici

With ActiveWindow
.ScrollColumn = 1
.ScrollRow = 1
End With
DoEvents

With ShExtraction
.Activate
.Range("B1").Select
End With

QueryPerformanceCounter Fin
QueryPerformanceFrequency Freq
Application.StatusBar = "Terminé : " & Format((Fin - Debut) / Freq, "0.00 s")
End Sub
 

Tony74

XLDnaute Nouveau
Bonjour @kiki29 , tout d'abord je te remercie pour ton fichier Excel qui permet de "dépouiller" un PDF vers Excel, il m'a été très utile. Cependant récemment je suis sur Windows 10 et Office 64 bits. J'ai beau cherché mais je n'ai pas trouvé la version 64 bits. J'ai essayé de compléter les fonctions avec des "Ptr Safe" mais sans succès.
Pourrais tu m'indiquer où se trouve la version 64 bits si elle existe stp?
Bonne continuation
 

kiki29

XLDnaute Barbatruc
Salut, même Microsoft déconseillait l'installation d'une version 64 bits d'Office.
Je suis tjs avec W10 64 / Office 32

Office 32 bits est recommandé pour la plupart des utilisateurs
Nous recommandons la version 32 bits d’Office pour la plupart des utilisateurs, car elle offre une plus grande compatibilité avec la plupart des autres applications, en particulier les compléments tiers. C’est la raison pour laquelle la version 32 bits d’Office était installée par défaut, même sur les systèmes d’exploitation Windows 64 bits. Sur ces systèmes, le client Office 32 bits est pris en charge en tant qu’installation Windows-32-on-Windows-64 (WOW64). WOW64 est l’émulateur x86 qui permet l’exécution de façon transparente des applications Windows 32 bits sur les systèmes Windows 64 bits. Cela permet aux utilisateurs de continuer à utiliser les contrôles ActiveX et les compléments COM Microsoft avec la version 32 bits d’Office.
 

Tony74

XLDnaute Nouveau
Salut, même Microsoft déconseillait l'installation d'une version 64 bits d'Office.
Je suis tjs avec W10 64 / Office 32
Merci pour ta réponse, et je suis d'accord que ça apporte pas mal d'inconvénients mais est-il possible d'adapter le code pour que ça fonctionne stp? Ou tu as déjà essayé et ce n'est pas "jouable" stp?
S'il faut modifier le chemin pour aller chercher à la racine dans le wow64 ça ne me dérange pas mais je ne me rend pas compte de tout le travail à effectuer. :(
Dans tous les cas je vais m'arranger pour remettre office en 32 bits en attendant, merci.
 

Tony74

XLDnaute Nouveau
Salut, @Tony74 : une version 32/64 qui devrait fonctionner, n'ayant pas d'environnement Office 64 de disponible, dans l'attente de tes retours.
Hello @kiki29 , Merci beaucoup.
La lecture des fichiers PDF se passe bien mais il y un bug au niveau de l'Extraction PDF.
Erreur d'exécution 53, Fichier Introuvable : User

Cela se passe sur le :
Private Sub EffacerClipboard()
Au niveau de la fonction : OpenClipboard (0&)

Ce problème se trouve au niveau des variables du module mPDF. Il faut remplacer User par "User32".
J'ai vérifié la DLL dans le system32 et dans le SysWow64 pour info.

J'ai ensuite placé un "X" dans la Colonne A devant les fichiers.
Mais je me retrouve avec un autre bug. Erreur d'exécution 1004, la méthode Paste de l'objet _Worksheet a échoué.
Et en parallèle j'ai Acrobat Reader DC qui m'indique une erreur d'ouverture du document.
Pour info je viens de voir que j'avais une version Acrobat Reader DC en 32 bits.
Est-ce que tu vois de quoi cela pourrait venir stp?

@st007 merci pour le power query mais je n'ai pas la version office à jour avec cette option.
 

kiki29

XLDnaute Barbatruc
Re, pour erreur 1004 sur le paste il faut à priori modifier la valeur Tempo dans
VB:
Const Tempo As Long =.....
en augmentant sa valeur. Il faut éviter d'avoir d'autres choses qui moulinent en arrière plan.

Corrections apportées plus haut sur pdf2xls_02_fso.zip
 
Dernière édition:

Discussions similaires

M
Réponses
9
Affichages
466
Maikales
M

Statistiques des forums

Discussions
312 101
Messages
2 085 297
Membres
102 855
dernier inscrit
creed