XL 2016 Extraction pdf vers excel

berta8683

XLDnaute Nouveau
Bonjour la communauté excel,
Je viens vers vous pour trouver une solution vba peut-être pas très compliquée mais je ne suis pas expert dessus. En effet, j'aimerais extraire les données d'un fichier pdf page par page. Le code que j'ai pu travaillé me permet de récupérer les pages alignées les unes aux autres dans le meme onglet. Je souhaiterais que chaque page pdf corresponde à un onglet différent dans le classeur excel. Voici un exemple de fichier pdf avec le fichier Excel vba. Merci d'avance !
 

Pièces jointes

  • Convert_PDF_TO_EXCEL.xlsm
    42.3 KB · Affichages: 44
  • 20_04_Au_02_05_.pdf
    96.8 KB · Affichages: 27

kiki29

XLDnaute Barbatruc
Salut, à lire

Pour le lire le nombre de pages d'un pdf
Acrobat Pro ( pas le Reader ) Nombre de pages d'une liste de fichiers pdf
PDFCreator 1.7.3 : Nombre de pages d'une liste de fichiers PDF

RegExp : Nombre de pages d'une liste de fichiers PDF, à tester
VB:
Private Function GetPageNum(PDF_File As String) As Long
Dim FileNum As Long
Dim sStr As String
Dim RegExp As Object

    Set RegExp = CreateObject("VBscript.RegExp")
    RegExp.Global = True
    RegExp.Pattern = "/Type\s*/Page[^s]"
 
    FileNum = FreeFile
    Open PDF_File For Binary As #FileNum
        sStr = Space(LOF(FileNum))
        Get #FileNum, , sStr
    Close #FileNum

    GetPageNum = RegExp.Execute(sStr).Count
   
    Set RegExp = Nothing
End Function
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je ne sais pas si la fonction M 'Pdf.Tables' fonctionnera sur excel 2016 mais excel 2019 cela fonctionne.
Aussi vous trouverez des requêtes à partir de votre fichier Pdf.
J'ai traité la chose comme pour former une base de données.

Cordialement
 

Pièces jointes

  • Récupération Pdf.xlsm
    67.8 KB · Affichages: 55
  • 20_04_Au_02_05_.pdf
    96.8 KB · Affichages: 23

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Une petite erreur dans la requêtes 'Données Horaires', à l'étape 'Conversion des Heures' :
= Table.TransformColumns( #"Tirets remplacés", List.Transform({"Entrée","Sortie","Heures","Saldo"}, each {_, (_)=> try Time.From( "00" & _ ) otherwise null , type time} ))

Il faut remplacer Time.From( "00:" & _ ) par Time.From( _ & ":00")
Ce ne sont pas les heures qui sont égales à zéro dans les données textuelles mais les secondes :)

Cordialement
 

berta8683

XLDnaute Nouveau
Bonjour,

Une petite erreur dans la requêtes 'Données Horaires', à l'étape 'Conversion des Heures' :


Il faut remplacer Time.From( "00:" & _ ) par Time.From( _ & ":00")
Ce ne sont pas les heures qui sont égales à zéro dans les données textuelles mais les secondes :)

Cordialement
Un grand Merci @Roblochon, ça passe nickel avec ta correction !! Je viens de découvrir avec toi la puissance du langage M et donc de l'automatisation via power query !!
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour @sergio8683,

Voyez tout de même les imperfections, notamment sur la récupération des noms/prénoms qui sont répartis sur 2 à trois colonnes. Il y a un item (Id 318) dont l'id apparaît au milieu du nom. Je n'ai pas traité le cas pour ne pas allourdir la requête, je pense que ce genre de problème devrait se régler en amont ( certainement à la saisie avant enregistrement du pdf)

cordialement
 

berta8683

XLDnaute Nouveau
bonjour @sergio8683,

Voyez tout de même les imperfections, notamment sur la récupération des noms/prénoms qui sont répartis sur 2 à trois colonnes. Il y a un item (Id 318) dont l'id apparaît au milieu du nom. Je n'ai pas traité le cas pour ne pas allourdir la requête, je pense que ce genre de problème devrait se régler en amont ( certainement à la saisie avant enregistrement du pdf)

cordialement
Bonjour @Roblochon, oui j'ai vu effectivement ce problème mais il n'est pas très important car je me base uniquement sur l'ID pour consolider les informations avec un autre fichier qui lui a les noms complets. Par contre, je vais devoir retravailler certaines formules sur ce format car je récupérais les heures de tout le monde par ligne, c'est à dire sur une ligne (id, nom, entrée du 03, sortie du 03, entrée du 04, sortie du 04 etc....)
 

Wayki

XLDnaute Impliqué
Sauf erreur de ma part 2016 comme 2019 à jour a le même PowerQuery que 365
Salut Chris, Roblochon, sergio8683 et tous les autres,
J'ai 2016 au boulot et 365 à la maison, j'ai le module d'importation de pdf qu'avec mon pc perso (donc 365).
Voir photo de 2016 :
1630775360741.png


J'ai tenté d'importer une macro faite avec 365 et donc cette fonction d'import de pdf et ça n'a pas fonctionné sur 2016.
D'où ma suggestion :)
Si jamais c'est un paramètre à activer je suis preneur, mais j'ai jamais trouvé aha
A +
 

Hasco

XLDnaute Barbatruc
Repose en paix
Si jamais c'est un paramètre à activer je suis preneur, mais j'ai jamais trouvé aha
Bonjour,

Ce n'est pas un paramètre ni même un choix de menu. Ce sont simplement les fonctions M d'accès aux données que vous pouvez utiliser même si elle n'ont pas leur équivalent dans l'interface.

Ouvrez une nouvelle requête vide et tapez dans la barre de formule de l'éditeur PQ , à l'étape source :

= Pdf.Tables(File.Contents( CheminVersLeFichierPDF))

Où CheminVersLeFichierPdf est à adapter bien-sûr.
Après validation vous devriez voir une table listant les pages et tables du document pdf

Cordialement
 

Wayki

XLDnaute Impliqué
Bonjour,

Ce n'est pas un paramètre ni même un choix de menu. Ce sont simplement les fonctions M d'accès aux données que vous pouvez utiliser même si elle n'ont pas leur équivalent dans l'interface.

Ouvrez une nouvelle requête vide et tapez dans la barre de formule de l'éditeur PQ , à l'étape source :



Où CheminVersLeFichierPdf est à adapter bien-sûr.
Après validation vous devriez voir une table listant les pages et tables du document pdf

Cordialement
Ah oui voilà peut être pour ça que ça marchait pas, la formule passait par VBA elle n'était pas saisie directement dans PQ, je réessaierai avec cette astuce merci 😁
 

Discussions similaires

Réponses
8
Affichages
654

Statistiques des forums

Discussions
314 718
Messages
2 112 177
Membres
111 452
dernier inscrit
christine64