Power Query Importer plusieurs fichiers .pdf

M92_

XLDnaute Junior
Bonjour le fil,

Y'a t-il un moyen d'importer plusieurs fichiers .pdf (contenus dans un même dossier) via PowerQuery, svp ?
La fonction « Pdf.Tables(File.Contents("c:\sample.pdf")) » ne permet d'importer qu'un seul fichier .pdf.

Quand j'essaye de combiner plusieurs fichiers .pdf d'un même dossier, je reçois le message d'erreur suivant :

1653523299277.png


Cdlt,
M92
 

chris

XLDnaute Barbatruc
Bonjour à tous

A noter qu'il faut 2019 ou plus récent il me semble pour le pdf
l'add on ne traite pas le pdf et pour 2016 je pense que non, sans certitude

Sinon, comme pour les autres formats de fichiers lus par POwerQuery, il faut utiliser l'importation d'un dossier.

On obtient alors un fichier exemple que l'on traite et PowerQuery construit au fur et à mesure du traitement la fonction en code M qu'il applique à l'ensemble des fichiers du dossier mis bout à bout

Selon la structure des pdf cela peut aller du quasi magique au n'importe quoi.

J'ai eu un cas récemment où il n'existait pas d'alignements assez marqués pour traiter correctement...
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[Juste pour infos complémentaires]
2019 malheureusement c'est niet
(je me suis échiné à essayer puis j'ai lu ceci et j'ai été chafouin tout le reste de la journée
Cliquez sur : Excel 2016 ou version ultérieure pour Windows et Microsoft 365
(et comme moi maudissez les décisionnaires de chez Redmond.)
[/juste pour infos]

PS: Si jamais, Madame la Directrice des Services Numériques, tu lis ceci, n'oublie pas de vite nous faire rapidement migrer vers 365.
(Car je vais pas bosser sur mon PC perso au motif que je dispose de 365!)
 

Staple1600

XLDnaute Barbatruc
Bonjour chris

Ce n'est pas une vérification
J'ai simplement été confronté au problème hier au boulot (où je n'ai qu'Excel 2019)
Et en faisant des recherches sur le net, je suis tombé sur ce fil.
Et en creusant, j'ai compris pourquoi je ne pouvais pas combiner des PDFS sur Excel 2019 avec PQ.
J'ai donc partagé l'info dans le fil en postant le lien de Microsoft
(et au passage exprimer mon acrimonie envers M. )
 

mromain

XLDnaute Barbatruc
Bonjour à tous,

Chez moi (Office 2019 Professionnel Plus), bien que l'interface ne propose pas de charger les données à partir d'un PDF, il est tout à fait possible de le faire. La fonction Pdf.Tables marche bien.

@Staple, peut-être qu'au travail tu n'as pas le .Net Framework 4.5 ou version ultérieure comme précisé sur le lien que tu nous as fourni.

A+
 

mromain

XLDnaute Barbatruc
Bonjour à tous,

Et j'ai exactement le même message que dans le message#1
Effectivement, j'ai fait le test et j'ai le même message d'erreur...

Après, rien n'empêche de le faire.
Personnellement, je construis une fonction une fois pour toute qui prend le fichier pdf en paramètre. Une fonction du type :
Code:
(ParamPdfFile as binary) => let
    TablsPdf = Pdf.Tables(ParamPdfFile, [Implementation="1.3"]),
    ...
in
    ...
Et ensuite, dans la requête qui liste tous les fichiers pdf, on peut ajouter une colonne avec Appeler une fonction personnalisée ou on appelle cette fonction en lui passant pour paramètre le champ [Content].

Cette solution marche très bien mais ne permet pas d'avoir les 4 requêtes créées automatiquement qui permettent d'éditer la fonction de traitement du pdf (Paramètre1 (Exemple de fichier), Exemple de fichier, Transformer le fichier et Transformer l'exemple de fichier).

Cependant, il est tout à fait possible d'avoir ça.
Pour ce, il faut :
  • Créer en premier lieu l'équivalent de l'Exemple de fichier
    Créer une requête vide, la renommer ExempleFichierPdf et y ajouter ce code :
    Code:
    let
        PdfBinary = File.Contents("C:\Exemple de fichier pdf.pdf")
    in
        PdfBinary
  • Créer un paramètre (onglet Accueil > Gérer les paramètres > Nouveau paramètre
    • Nom : ParamPdfFile
    • Type : Binaire
    • Valeurs suggérées : Binaire
    • Valeur par défaut : Exemple de fichier (la requête créée en premier lieu)
    • Valeur actuelle : Exemple de fichier
    Image1.png
  • Créer le fichier exemple de traitement qui défini ce que fait la fonction (l'équivalent de Transformer l'exemple de fichier).
    Clic droit sur le paramètre puis Référence. Ensuite, double-cliquer sur le fichier pdf (pour appeler la fonction Pdf.Tables et effectuer le traitement à appliquer.
    Renommer la requête DevFonction_fnTraitementPdf par exemple.
  • Créer la fonction à proprement parler
    • Clic droit sur la requête DevFonction_fnTraitementPdf
    • Créer une fonction...
    • Nommer la fonction fnTraitementPdf (par exemple)
  • Pour finir, dans la requête qui liste tous les pdf, ajouter une colonne avec Appeler une fonction personnalisée ou on appelle cette fonction (fnTraitementPdf) en lui passant pour paramètre le champ [Content].
A ce stade, on a bien la requête de définition de la fonction (DevFonction_fnTraitementPdf) qui est "liée" à la fonction elle-même (fnTraitementPdf). Toute modification apportée à DevFonction_fnTraitementPdf est répercutée dans fnTraitementPdf.

C'est plutôt laborieux, mais ça permet d'arriver à la même chose que ce que fait PowerQuery automatiquement quand on clique sur Combiner les fichiers avec les formats compatibles.

Bonne journée

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 894
Messages
2 093 378
Membres
105 710
dernier inscrit
makaya