transformer facture PDF en liste Excel

sofysofe

XLDnaute Junior
Bonjour,

Voici ma problématique : nous recevons des factures en format PDF (fichier "1_attachment_BJ.pdf) et aimerions les transformer en liste excel afin de pouvoir les analyser

Ce que je sais et peut faire pour l'instant : à partir d'acrobat 9, je fais un enregistrer sous au format "Tables in Excel spreadsheet *.xml", ce qui génère le fichier "2_ brut.xml" également joint, dans le zip à cause du format. Ce fichier contient autant de feuilles qu'il y a de pages dans le pdf.

Le but est que toute la liste soit sur une seule feuille avec un seul type d'info dans chaque colonne (voir mon ébauche d'exemple "final" dans le fichier nommé "3_revu.xls" pour avoir une idée des colonnes)

Mon zip étant trop gros, voici un lien pour le telecharger ailleurs :

Je pourrait transformer tout ça "à la main", mais je suis sûre que l'un d'entre vous trouver un bon code VBA en 2 temps 3 mouvements !

Pour récapituler : à partir du fichier xml que je génère depuis le pdf, j'aimerai générer une liste ressemblant à celle du fichier 3_revu.xls, sans les erreur de décimales sur les chiffres ... je viens juste de voir ça ...

Un grand merci d'avance !!!

Sophie
 

pierrejean

XLDnaute Barbatruc
Re : transformer facture PDF en liste Excel

bonjour sofysofe

Voici une macro a integrer au brut.xml qui devrait donner une feuille REPORT correspondant a tes souhaits sous reserve que le dit brut .xml soit similaire a celui de ton exemple

Code:
Sub report()
ligne = 2
derfeuille = Sheets(Sheets.Count).Name
Sheets.Add.Name = "REPORT"
Sheets("REPORT").Columns("B:B").NumberFormat = "@"
Dim ladate As String
For Each sh In Sheets
 If sh.Name <> "REPORT" And sh.Name <> derfeuille Then
  For n = 2 To sh.Range("A65536").End(xlUp).Row - 1
   If sh.Range("B" & n) = "" Then
    greffe = sh.Range("A" & n)
   Else
    Sheets("REPORT").Cells(ligne, 1) = greffe
    ladate = Split(sh.Range("A" & n), " ")(0)
    Sheets("REPORT").Cells(ligne, 2) = ladate
    Sheets("REPORT").Cells(ligne, 3) = Split(sh.Range("A" & n), " ")(1)
    Sheets("REPORT").Cells(ligne, 4) = Split(sh.Range("A" & n), " ")(2)
    Sheets("REPORT").Cells(ligne, 5) = Split(sh.Range("A" & n), " ")(3)
    Sheets("REPORT").Cells(ligne, 6) = sh.Range("B" & n) / 100
    ligne = ligne + 1
   End If
  Next n
 End If
Next
For n = 1 To Sheets(derfeuille).Range("A65536").End(xlUp).Row
  Sheets("REPORT").Cells(ligne + 1 + n, 1) = Sheets(derfeuille).Cells(n, 1)
  Sheets("REPORT").Cells(ligne + 1 + n, 2).NumberFormat = "General"
  If InStr(Sheets(derfeuille).Cells(n, 2), ",") <> 0 Then
   Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) * 1
  Else
   Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) / 100
  End If
Next n
End Sub
 

Pièces jointes

  • 2_brut.xlsm
    27 KB · Affichages: 150
Dernière édition:

sofysofe

XLDnaute Junior
Re : transformer facture PDF en liste Excel

Merci beaucoup pierrejean, je vais de ce pas tester ce que tu as fait !

Par contre, concernant ta dernière remarque, sachant que le brut.xml est généré à partir de la facture pdf, et que cette dernière ne sera pas identique chaque mois, ça peut ne pas fonctionner à tous les coups ?

Encore merci de t'être penché sur ma problématique !

Sophie
 

pierrejean

XLDnaute Barbatruc
Re : transformer facture PDF en liste Excel

Re

Pas obligatoirement identique , simplement similaire (le nbre de feuilles peut varier mais pour chaque feuille 1 titre et une derniere ligne a ne pas prendre en compte , les totaux dans la derniere feuille , pour chaque ligne un espace separant les premieres données a recuperer )
Donc une verification sera de rigueur
 

sofysofe

XLDnaute Junior
Re : transformer facture PDF en liste Excel

ok. et encore merci !
Je ne pense pas que la mise en forme des factures PDF change, ça devrait donc bien se passer pour les suivantes.

Sinon, j'ai testé, une feuille REPORT contenant la liste est générée, par contre il y a une error '9' sur la ligne en rouge ci-dessous :

Code:
Sub report()
ligne = 2
derfeuille = Sheets(Sheets.Count).Name
Sheets.Add.Name = "REPORT"
Sheets("REPORT").Columns("B:B").NumberFormat = "@"
Dim ladate As String
For Each sh In Sheets
If sh.Name <> "REPORT" And sh.Name <> derfeuille Then
For n = 2 To sh.Range("A65536").End(xlUp).Row - 1
If sh.Range("B" & n) = "" Then
greffe = sh.Range("A" & n)
Else
Sheets("REPORT").Cells(ligne, 1) = greffe
ladate = Split(sh.Range("A" & n), " ")(0)
Sheets("REPORT").Cells(ligne, 2) = ladate
Sheets("REPORT").Cells(ligne, 3) = Split(sh.Range("A" & n), " ")(1)
Sheets("REPORT").Cells(ligne, 4) = Split(sh.Range("A" & n), " ")(2)
Sheets("REPORT").Cells(ligne, 5) = Split(sh.Range("A" & n), " ")(3)
Sheets("REPORT").Cells(ligne, 6) = sh.Range("B" & n) / 100
ligne = ligne + 1
End If
Next n
End If
Next
For n = 1 To Sheets(derfeuille).Range("A65536").End(xlUp).Row
Sheets("REPORT").Cells(ligne + 1 + n, 1) = Sheets(derfeuille).Cells(n, 1)
Sheets("REPORT").Cells(ligne + 1 + n, 2).NumberFormat = "General"
If InStr(Sheets(derfeuille).Cells(n, 2), ",") <> 0 Then
Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) * 1
Else
Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) / 100
End If
Next n
End Sub
 

sofysofe

XLDnaute Junior
Re : transformer facture PDF en liste Excel

Après avoir regardé le resultat du report, en fait, ça a buggé au niveau de la feuille 5 du xml, qui a effectivement une autre mise en forme, je joins le fichier tel quel, çad après le bug du code.



ok. et encore merci !
Je ne pense pas que la mise en forme des factures PDF change, ça devrait donc bien se passer pour les suivantes.

Sinon, j'ai testé, une feuille REPORT contenant la liste est générée, par contre il y a une error '9' sur la ligne en rouge ci-dessous :

Code:
Sub report()
ligne = 2
derfeuille = Sheets(Sheets.Count).Name
Sheets.Add.Name = "REPORT"
Sheets("REPORT").Columns("B:B").NumberFormat = "@"
Dim ladate As String
For Each sh In Sheets
If sh.Name <> "REPORT" And sh.Name <> derfeuille Then
For n = 2 To sh.Range("A65536").End(xlUp).Row - 1
If sh.Range("B" & n) = "" Then
greffe = sh.Range("A" & n)
Else
Sheets("REPORT").Cells(ligne, 1) = greffe
ladate = Split(sh.Range("A" & n), " ")(0)
Sheets("REPORT").Cells(ligne, 2) = ladate
Sheets("REPORT").Cells(ligne, 3) = Split(sh.Range("A" & n), " ")(1)
Sheets("REPORT").Cells(ligne, 4) = Split(sh.Range("A" & n), " ")(2)
Sheets("REPORT").Cells(ligne, 5) = Split(sh.Range("A" & n), " ")(3)
Sheets("REPORT").Cells(ligne, 6) = sh.Range("B" & n) / 100
ligne = ligne + 1
End If
Next n
End If
Next
For n = 1 To Sheets(derfeuille).Range("A65536").End(xlUp).Row
Sheets("REPORT").Cells(ligne + 1 + n, 1) = Sheets(derfeuille).Cells(n, 1)
Sheets("REPORT").Cells(ligne + 1 + n, 2).NumberFormat = "General"
If InStr(Sheets(derfeuille).Cells(n, 2), ",") <> 0 Then
Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) * 1
Else
Sheets("REPORT").Cells(ligne + 1 + n, 2) = Sheets(derfeuille).Cells(n, 2) / 100
End If
Next n
End Sub
 

Pièces jointes

  • facture.zip
    11 KB · Affichages: 75
  • facture.zip
    11 KB · Affichages: 79
  • facture.zip
    11 KB · Affichages: 82

pierrejean

XLDnaute Barbatruc
Re : transformer facture PDF en liste Excel

Re

Le problème intervient en debut de la Sheet6 qui semble avoir deja été traitée
Elle est telle que je l'avais deja eue et c'est ce qui avais motivé mes reserves (Je ne comprends pas comment a partir du Pdf cette feuille a été sortie differemment)
Si c'est bien la cas je crains de ne pas avoir de solution
 

pierrejean

XLDnaute Barbatruc
Re : transformer facture PDF en liste Excel

Re

J'ai egalement tenté de travailler sur un fichier .txt enregistré a partir du .pdf
Mais la encore , j'ai une curiosité
Sur certaines lignes , le chiffre final est reporté une ligne plus loin !!!
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 965
Membres
103 069
dernier inscrit
jujulop