Power Query Convertir un fichier PdF en Excel et restitution d'un état de synthèse

Merlin258413

XLDnaute Occasionnel
Bonjour à tous,

Tout d'abord je tenais à signaler que j'ai posté quelque chose sur le Forum Excel qui se rapproche dans la restitution mais ce n'est pas du tout la même source. Ici je pars d'un Pdf.
Je ne sais pas du tout si ma demande est réalisable mais qui tente rien n'a rien. et je vous remercie par avance d'avoir jeter un coup d'oeil.

J'ai un fichier PDf que je veux convertir en Excel. j'ai vu que cela était par Power Query mais je ne connais pas du tout le fonctionnement. j'ai essayé avec les convertisseurs en ligne mais cela ne donne pas de bon résultat

J'ai tout de même essayé Données > Obtenir des données > A partir d'un fichier > A partir du PDF.
Mais le résultat n'est pas concluant.

Pouvez vous m'aider à convertir ce fichier ? A savoir que j'ai plusieurs agences et que j'aurais un fichier Excel par agence.
Je ne sais pas quelle est la procédure notamment si je dois émettre mes états de synthèse pour une autre agence

J'aimerais avoir 2 rapports de synthèse :

1- Un rapport qui me donne le tableau ci dessous avec toutes les lignes en écarts (dernier champ = Ecarts)
Sachant que les 3 derniers champs sont calculés
FAR recalculée = Montant réception - Montant Facturé
Ecarts =Montant FAR - FAR recalculée

Code agenceLibelle AgenceCode secteurNom secteurNo projetNo tacheType fournisseurFournisseurNo commandeMontant commandeDescription ligne commandeDate livraison ligneDate reception ligneMontant CdeMontant RecMontant FacturéMontant FARFAR recalculéeEcarts


2-Un tableau synthétique sur la commande
Attention Il y a une différence entre Montant commande et Montant Cde
Le Montant commande il ne faut pas faire la somme c'est le montant de la commande
Montant Cde il faut faire la somme c'est le montant de la commande pour un projet. Logiquement la somme Montant Cde doit être égale à Montant commande

No commandeFournisseurMontant commandeMontant CdeMontant RecMontant FacturéMontant FAR
 
Solution
Rebonjour Merlin258413,

Tu trouveras ci-dessous une version mise à jour qui semble fonctionner.
Par contre, il y a un souci au niveau des Secteurs, Projets et Taches pour le fichier de Lyon.
Ils semblent décalés dans PowerQuery.
Image1.png


Il n’y aura pas moyen de régler ce souci, mais il ne semble pas impacter l’analyse des Commandes...

A+

mromain

XLDnaute Barbatruc
Bonjour Merlin258413, le forum,

Je viens sans des solutions toutes faites, mais avec une solution permettant de "nettoyer" les données de ton pdf.
J'ai tout de même essayé Données > Obtenir des données > A partir d'un fichier > A partir du PDF.
Mais le résultat n'est pas concluant.
Il y a effectivement quelques problèmes dus à la disposition du tableau.
Par exemple des références sur plusieurs lignes
Image1.png


Le code ci-dessous permet de gérer ces cas. Je suis parti du principe que s’il y a une référence de mois de 4 caractères sur les champs Projet ou Tache, alors il s’agit de "la suite de la référence du dessus".
Il faudra adapter l’étape pathPdf pour définir l’emplacement du fichier pdf :
PowerQuery:
let
    pathPdf = "C:\...\ETAT DES FARs.pdf",
    fnTableCleanColumn = (tableSource as table, columnName as text, minCar as number) as table =>
        let
            fnConcatenate = (listRawVals as list, minCar as number) as list =>
                let
                    lstRaw = List.ReplaceValue(listRawVals, null, "", Replacer.ReplaceValue),
                    newVals = List.Transform({0 .. List.Count(lstRaw)-1}, each let nextVal = try lstRaw{_+1} otherwise "" in if Text.Length(lstRaw{_}) <= minCar then "" else if Text.Length(nextVal) > minCar then lstRaw{_} else lstRaw{_} & nextVal)
                in
                    List.ReplaceValue(newVals, "", null, Replacer.ReplaceValue),
            NewColumnValues = fnConcatenate(Table.ToList(Table.SelectColumns(tableSource, columnName)), minCar),
            otherColumns = List.RemoveItems(Table.ColumnNames(tableSource), {columnName}),
            ChangeColumnValues = Table.SelectColumns(Table.FromColumns(Table.ToColumns(Table.SelectColumns(tableSource, otherColumns)) & {NewColumnValues}, otherColumns & {columnName}), Table.ColumnNames(tableSource))
        in
            ChangeColumnValues,
    SourcePdf = Pdf.Tables(File.Contents(pathPdf), [Implementation="1.3"]),
    TableData = SourcePdf{[Id="Table001"]}[Data],
    EntêtesPromus = Table.PromoteHeaders(TableData, [PromoteAllScalars=true]),
    CleanProjectColumn = fnTableCleanColumn(EntêtesPromus, "Projet", 3),
    CleanTacheColumn = fnTableCleanColumn(CleanProjectColumn, "Tache", 3),
    LignesFiltrées = Table.SelectRows(CleanTacheColumn, each ([Compte] <> null)),
    ColonnesFusionnéesDateMax = Table.CombineColumns(LignesFiltrées,{"Date max.", "Column7"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Date max..1"),
    ColonnesFusionnéesDescription = Table.CombineColumns(ColonnesFusionnéesDateMax,{"Column9", "Description", "Column11", "Column12"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Description.1"),
    ColonnesRenommées = Table.RenameColumns(ColonnesFusionnéesDescription,{{"Date max..1", "Date max."}, {"Description.1", "Description"}}),
    ValeurRemplacée1 = Table.ReplaceValue(ColonnesRenommées,"",null,Replacer.ReplaceValue,{"Secteur", "Projet", "Tache"}),
    RempliVersLeBas = Table.FillDown(ValeurRemplacée1,{"Secteur", "Projet", "Tache"}),
    ValeurRemplacée2 = Table.ReplaceValue(RempliVersLeBas,".","",Replacer.ReplaceText,{"Mt Cde", "Mt Rec.", "Mt Facturé", "Montant FAR"}),
    TypeModifié = Table.TransformColumnTypes(ValeurRemplacée2,{{"Mt Cde", Currency.Type}, {"Mt Rec.", Currency.Type}, {"Mt Facturé", Currency.Type}, {"Montant FAR", Currency.Type}, {"Date max.", type date}, {"Projet", type text}, {"Tache", type text}})
in
    TypeModifié
La requête est un peu lente, mais elle charge bien 2069 lignes de données "propres" :
Image2.png


Les données ainsi "nettoyées" sont facilement analysables par TCD.
J’en ai fait juste un pour vérifier les montants globaux trouvables en dernière page du pdf. Tout semble OK.
Image3.png


Peut-être que ça t’aidera à obtenir tes deux "tableaux de synthèse" (je t’avoue ne pas bien avoir compris ce que tu veux...).

A+
 

Merlin258413

XLDnaute Occasionnel
Bonjour Merlin258413, le forum,

Je viens sans des solutions toutes faites, mais avec une solution permettant de "nettoyer" les données de ton pdf.

Il y a effectivement quelques problèmes dus à la disposition du tableau.
Par exemple des références sur plusieurs lignes
Regarde la pièce jointe 1184365

Le code ci-dessous permet de gérer ces cas. Je suis parti du principe que s’il y a une référence de mois de 4 caractères sur les champs Projet ou Tache, alors il s’agit de "la suite de la référence du dessus".
Il faudra adapter l’étape pathPdf pour définir l’emplacement du fichier pdf :
PowerQuery:
let
    pathPdf = "C:\...\ETAT DES FARs.pdf",
    fnTableCleanColumn = (tableSource as table, columnName as text, minCar as number) as table =>
        let
            fnConcatenate = (listRawVals as list, minCar as number) as list =>
                let
                    lstRaw = List.ReplaceValue(listRawVals, null, "", Replacer.ReplaceValue),
                    newVals = List.Transform({0 .. List.Count(lstRaw)-1}, each let nextVal = try lstRaw{_+1} otherwise "" in if Text.Length(lstRaw{_}) <= minCar then "" else if Text.Length(nextVal) > minCar then lstRaw{_} else lstRaw{_} & nextVal)
                in
                    List.ReplaceValue(newVals, "", null, Replacer.ReplaceValue),
            NewColumnValues = fnConcatenate(Table.ToList(Table.SelectColumns(tableSource, columnName)), minCar),
            otherColumns = List.RemoveItems(Table.ColumnNames(tableSource), {columnName}),
            ChangeColumnValues = Table.SelectColumns(Table.FromColumns(Table.ToColumns(Table.SelectColumns(tableSource, otherColumns)) & {NewColumnValues}, otherColumns & {columnName}), Table.ColumnNames(tableSource))
        in
            ChangeColumnValues,
    SourcePdf = Pdf.Tables(File.Contents(pathPdf), [Implementation="1.3"]),
    TableData = SourcePdf{[Id="Table001"]}[Data],
    EntêtesPromus = Table.PromoteHeaders(TableData, [PromoteAllScalars=true]),
    CleanProjectColumn = fnTableCleanColumn(EntêtesPromus, "Projet", 3),
    CleanTacheColumn = fnTableCleanColumn(CleanProjectColumn, "Tache", 3),
    LignesFiltrées = Table.SelectRows(CleanTacheColumn, each ([Compte] <> null)),
    ColonnesFusionnéesDateMax = Table.CombineColumns(LignesFiltrées,{"Date max.", "Column7"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Date max..1"),
    ColonnesFusionnéesDescription = Table.CombineColumns(ColonnesFusionnéesDateMax,{"Column9", "Description", "Column11", "Column12"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Description.1"),
    ColonnesRenommées = Table.RenameColumns(ColonnesFusionnéesDescription,{{"Date max..1", "Date max."}, {"Description.1", "Description"}}),
    ValeurRemplacée1 = Table.ReplaceValue(ColonnesRenommées,"",null,Replacer.ReplaceValue,{"Secteur", "Projet", "Tache"}),
    RempliVersLeBas = Table.FillDown(ValeurRemplacée1,{"Secteur", "Projet", "Tache"}),
    ValeurRemplacée2 = Table.ReplaceValue(RempliVersLeBas,".","",Replacer.ReplaceText,{"Mt Cde", "Mt Rec.", "Mt Facturé", "Montant FAR"}),
    TypeModifié = Table.TransformColumnTypes(ValeurRemplacée2,{{"Mt Cde", Currency.Type}, {"Mt Rec.", Currency.Type}, {"Mt Facturé", Currency.Type}, {"Montant FAR", Currency.Type}, {"Date max.", type date}, {"Projet", type text}, {"Tache", type text}})
in
    TypeModifié
La requête est un peu lente, mais elle charge bien 2069 lignes de données "propres" :
Regarde la pièce jointe 1184366

Les données ainsi "nettoyées" sont facilement analysables par TCD.
J’en ai fait juste un pour vérifier les montants globaux trouvables en dernière page du pdf. Tout semble OK.
Regarde la pièce jointe 1184367

Peut-être que ça t’aidera à obtenir tes deux "tableaux de synthèse" (je t’avoue ne pas bien avoir compris ce que tu veux...).

A+
Bonjour et déjà merci d'avoir regardé. Je ne comprends rien à Power Query et je ne sais pas ou mettre ce code. Avez vous un fichier Excel ?
SI cela peut vous aider voici ou se trouve le fichier pdf
1700664530708.png


Ce que je désire ajouter sur votre premier tableau généré ce sont 2 champs calculés :
FAR recalculée = Montant réception - Montant Facturé
Ecarts =Montant FAR - FAR recalculée
ce qui permet d'aboutir à mon tableau correspondant à mon 1)

Concernant mon tableau 2)
cela correspond presque à l'affichage de votre 2ème tableau
mais je ne veux pas par secteur mais N° de commande avec toujours ces 2 champs calculés
FAR recalculée = Montant réception - Montant Facturé
Ecarts =Montant FAR - FAR recalculée
je dois aboutir à cet état mais comme je l'indiquais, Attention Il y a une différence entre Montant commande et Montant Cde. Le Montant commande il ne faut pas faire la somme c'est le montant total de la commande. Mais en revanche pour Montant Cde il faut faire la somme



No commandeFournisseurMontant commandeMontant CdeMontant RecMontant FacturéMontant FARFAR recalculéeEcarts


Merci
 

mromain

XLDnaute Barbatruc
Rebonjour Merlin258413,

Tu trouveras un exemple ci-joint.

Les deux colonnes ont été ajoutées.
Dans l’onglet Analyses, tu trouveras le cumul par commande.

Par contre, je n’ai pas compris où trouver l’info Montant commande
Le Montant commande il ne faut pas faire la somme c'est le montant total de la commande. Mais en revanche pour Montant Cde il faut faire la somme

A+
 

Pièces jointes

  • Exemple.xlsx
    31.3 KB · Affichages: 6

Merlin258413

XLDnaute Occasionnel
Rebonjour Merlin258413,

Tu trouveras un exemple ci-joint.

Les deux colonnes ont été ajoutées.
Dans l’onglet Analyses, tu trouveras le cumul par commande.

Par contre, je n’ai pas compris où trouver l’info Montant commande


A+
Bonjour
Je me permet de rouvrir ce dossier car je ne comprend pas mes états sont standards. Ils sont issus de notre ERP. J'ai 15 agences et donc les 15 agences sortent bien à ce format.
Hier je vous ai donné l'agence de Marseille qui fonctionne parfaitement bien. Je pensais que l'outils fonctionnerait aussi pour les autres agences, la je viens d'essayer l'agence d'Annecy et j'ai le message d'erreur ci dessous. Est ce que vous m'aider ? je vous joints aussi les 2 agences
Encore un grand merci

1700722256634.png



Et pour d'autres agences comme CARROS j'ai ce message
1700722542189.png


Pour Lyon c'est la colonne 7
1700722708550.png
 
Dernière modification par un modérateur:

mromain

XLDnaute Barbatruc
Bonjour Merlin258413,

Cela vient de différences (point de vue PowerQuery) entre les PDFs.
Un des 2 nouveaux fichiers que tu as fournis dans ton précédent post semble être le même que ton premier (Marseille).
Tu peux tester cette nouvelle version qui devrait résoudre les 2 problèmes que tu as évoqué.

A+
 

Pièces jointes

  • Exemple2.xlsx
    32.5 KB · Affichages: 4

Merlin258413

XLDnaute Occasionnel
Bonjour Merlin258413,

Cela vient de différences (point de vue PowerQuery) entre les PDFs.
Un des 2 nouveaux fichiers que tu as fournis dans ton précédent post semble être le même que ton premier (Marseille).
Tu peux tester cette nouvelle version qui devrait résoudre les 2 problèmes que tu as évoqué.

A+
je viens de lancer sur 2 agences et cela fonctionne encore un grand merci
 

Merlin258413

XLDnaute Occasionnel
Bonjour Merlin258413,

Cela vient de différences (point de vue PowerQuery) entre les PDFs.
Un des 2 nouveaux fichiers que tu as fournis dans ton précédent post semble être le même que ton premier (Marseille).
Tu peux tester cette nouvelle version qui devrait résoudre les 2 problèmes que tu as évoqué.

A+

bon sur 15 agences ,10 fonctionnent très bien mais 5 ressortent avec cette même erreur
Encore merci de m'accorder autant de temps
 
Dernière modification par un modérateur:

mromain

XLDnaute Barbatruc
Rebonjour Merlin258413,

Tu trouveras ci-dessous une version mise à jour qui semble fonctionner.
Par contre, il y a un souci au niveau des Secteurs, Projets et Taches pour le fichier de Lyon.
Ils semblent décalés dans PowerQuery.
Image1.png


Il n’y aura pas moyen de régler ce souci, mais il ne semble pas impacter l’analyse des Commandes...

A+
 

Pièces jointes

  • Exemple3.xlsx
    32.4 KB · Affichages: 10

Merlin258413

XLDnaute Occasionnel
Rebonjour Merlin258413,

Tu trouveras ci-dessous une version mise à jour qui semble fonctionner.
Par contre, il y a un souci au niveau des Secteurs, Projets et Taches pour le fichier de Lyon.
Ils semblent décalés dans PowerQuery.
Regarde la pièce jointe 1184546

Il n’y aura pas moyen de régler ce souci, mais il ne semble pas impacter l’analyse des Commandes...

A+
Bonjour merci beaucoup je regarde ça. Je vous souhaite un bon week end
 

Discussions similaires

Statistiques des forums

Discussions
315 092
Messages
2 116 119
Membres
112 666
dernier inscrit
Coco0505