Exctration données PDF par power query sur Excel
Bonjour,
J'ai plein de fichier PDF de ce genre dans un dossier avec la même structure et je voudrais extraire les données suivantes :
Numéro de facture : 2026-07-6562
Date d'émission facture initiale / facture rectificative : 01/07/2026
Montant à payer montant brut 302,40
livraison/réalisation de prestation : ANGERS
pour tous les PDF
J'ai commencé un code mais cela ne fonctionne pas
let
// 1. Récupération du chemin du dossier depuis votre cellule Excel
CheminDossier = Excel.CurrentWorkbook(){[Name="Fichier.xml"]}[Content]{0}[Column1],
Source = Folder.Files(CheminDossier),
// 2. Filtrage pour ne garder que les fichiers PDF
FiltrePDF = Table.SelectRows(Source, each [Extension] = ".pdf"),
// 3. Fonction personnalisée intégrée pour extraire et nettoyer le texte de TOUTES les pages du PDF
ExtraireTextePDF = Table.AddColumn(FiltrePDF, "TexteBrut", each
let
// Extraction des données de toutes les pages du PDF
PagesPdf = Pdf.Tables([Content], [Implementation="1.3"]),
// On garde toutes les pages, pas seulement les tables
FiltrerPages = Table.SelectRows(PagesPdf, each [Kind] = "Page"),
// Fusion de toutes les pages en un seul gros bloc textuel
CombinerTexte = Text.Combine(
List.Transform(
FiltrerPages[Data],
each Text.Combine(List.Transform(Table.ToList(_), each Text.From(_)), " ")
),
" "
)
in
if Text.Length(CombinerTexte) = 0 then
"Aucune donnée trouvée"
else
CombinerTexte
),
// 4. Extraction chirurgicale des 4 données recherchées via des fonctions de texte
ExtractionDonnees = Table.AddColumn(ExtraireTextePDF, "InfosFacture", each
let
Texte = [TexteBrut],
// A. Extraction du Numéro de facture
PosNum = Text.PositionOf(Texte, "Numéro de facture"),
NumFacture = if PosNum = -1 then null else
Text.Middle(Texte, PosNum + Text.Length("Numéro de facture"), 30),
NumNettoye = Text.Trim(Text.Select(NumFacture, {"0".."9", "-", "/"})),
// B. Extraction de la Date d'émission
PosDate = Text.PositionOf(Texte, "ve :,"),
DateFacture = if PosDate = -1 then null else
Text.Middle(Texte, PosDate + Text.Length("ve :,"), 10),
DateNettoyee = Text.Trim(Text.Select(DateFacture, {"0".."9", "/"})),
// C. Extraction du Montant à payer (Brut)
PosMt = Text.PositionOf(Texte, "Montant à payer"),
MontantBrut = if PosMt = -1 then null else
Text.Middle(Texte, PosMt + Text.Length("montant brut"), 20),
MtNettoye = Text.Trim(Text.Select(MontantBrut, {"0".."9", ",", "."})),
// D. Extraction du Lieu de livraison
PosLiv = Text.PositionOf(Texte, "Localité Adresse de livraison"),
LieuLiv = if PosLiv = -1 then null else
Text.Middle(Texte, PosLiv + Text.Length("Localité Adresse de livraison/réalisation de prestation :"), 40),
// On récupère le premier mot qui suit)
LieuNettoye = Text.Start(Text.Trim(LieuLiv), Text.PositionOf(Text.Trim(LieuLiv), " "))
in
[Num = NumNettoye, Date = DateNettoyee, Total = MtNettoye, Ville = LieuNettoye]
)
in
ExtractionDonneesLe problème je pense est à l'étape 3 il n'extrait pas tout le document mais qu'une partie
Si quelqu'un pourrais regarder ou apporté sa propre solution ce serait cool
Je met en PJ un fichier PDF que j'ai anonymiser met touts les éléments se retrouve