Power Query : import de données issues d'un fichier pdf mal agencé

Bonjour à tous,

J'en appelle aux adeptes de Power Query pour venir à mon aide.

Dans une feuille Excel, j'essaie de récupérer des données issues d'u fichier pdf qui parait bien agencé au premier abord mais dont les tables au moment de l'import ne le sont visiblement pas.

Les données à retenir figurent dans ces 3 colonnes :

aprr3

Pour schématiser le souci, je vous envoie ces 2 images où l'on voit bien que ces 3 colonnes sont en réalité constituées de plusieurs colonnes

Voir les en-têtes.

De plus, je n'ai pas analysé la structure de toutes les tables mais j'ai l'impression qu'elle diffère au niveau du nombre de colonnes.

Y'a t-il une manip pour détecter ce genre d'anomalies rapidement.

aprr1 aprr2

D'ailleurs si l'un d'entre vous pouvait m'expliquer pourquoi le navigateur affiche les tables et les pages alors qu'au final ça m'a l'air d'être la même chose, y'a t-il un intérêt à sélectionner l'un ou l'autre et quelle est la différence

Je vous envoie le fichier pdf amaigri qui initialement fait 300 pages.

klin89

Re,

Bon, j'avais tronqué le pdf original de sa 1ère page et de ses dernières pages pour l'amaigrir et le poster sur le forum.

Résultat, ça a eu le don de déstructurer la disposition des données , j'aurai appris quelque chose.

Finalement en reprenant le fichier PDF original, j'ai pu importer toutes les données, elles se présentent comme ça :

tarifs aprr 2025

Maintenant, j'aimerais via une requête Power Query et une liste prédéfinie de noms de Gare, filtrer les colonnes A et B (Gare d'entrée et Gare de sortie) pour ne garder que les lignes concernées par cette liste.

Exemple de liste : AUXERRE-SUD, JOIGNY, DOLE, TOURNUS, AVALLON

La requête : pour chaque nom sélectionné comme Gare d'entrée de la liste, il faut filtrer les autres noms en Gare de sortie.

Ainsi Avallon en Gare d'entrée me ressortira 4 lignes :

Avallon Auxerre-Sud

Avallon Joigny

Avallon Dole

Avallon Tournus

Idem pour les autres noms

Seules les colonnes Gare d'entrée, Gare de sortie et Classe 1 doivent être conservées.

Merci de vous pencher sur cette requête, merci d'avance.

klin89

Hello,

J'ai fait ça vite fait, je n'ai pas renommé les étapes mais deux jointures gauche et deux étapes de filtre toutes simples et le tour est joué

@+

Merci pour ta réponse Barout78 👍

Peut-on rajouter une étape pour retirer le tiret qui sépare les noms composés et ne garder que la 1ère lettre en majuscule de chaque chaîne composant un nom de Gare.

klin89

Hello Klin89,

Tout est possible avec PQ !

@+

Wow, super 🙃

Encore une étape et après j'arrête.

Peut-on comme en VBA, faire un tri en fonction d'une liste personnalisée ?

En fait, j'aimerais trier successivement les 2 colonnes en fonction de la liste prédéfinie.

Merci encore

Édit : post le code, j'aime bien voir les codes de mon téléphone que ce soit VBA ou Power Query.

klin89

Bonjour à tous !

Une autre approche ? (en espérant avoir correctement traduit le besoin notamment pour le nom des gares...)

let
    Source = Excel.CurrentWorkbook(){[Name="Table001__Page_2_300"]}[Content],
    ColSelect = Table.SelectColumns(Source,{"Gare d'entrée", "Gare de sortie", "Classe 1"}),
    Test = let 
            Gare= List.Buffer(Excel.CurrentWorkbook(){[Name="Tableau2"]}[Content][Liste])
            in Table.AddColumn(ColSelect, "Test", each List.ContainsAll(Gare,{[#"Gare d'entrée"],[Gare de sortie]})),
    Filtre = Table.RemoveColumns(Table.SelectRows(Test, each ([Test] = true)),{"Test"}),
    TraittNom = let 
                fn= (valText as text)=> Text.Combine(List.Transform(Text.SplitAny(valText," -"),each Text.At(_,0))," ")
                in Table.TransformColumns(Filtre, 
                            {{"Gare d'entrée", each fn(_), type text},
                              {"Gare de sortie", each fn(_), type text} 
                            })
in
    TraittNom

Remarque : La lecture de la liste des gares à retenir est intégrée directement dans la requête.

Hello, et hope avec le tri personnalisé

@JFL bien le bonjour

@+

Re à tous,

Je dois vous avouer que j'ai vraiment du mal à maitriser l'interface Power Query mais je suis parvenu à tester vos solutions.

@BAROUT78 ça fonctionne par contre, on ne peut pas se passer de la requête "Tableau2" comme le souligne JFL ?

@JFL, c'est bon mais je souhaite obtenir les chaines entières des Gares de Péages, pas comme ceci :

requete jfl

Sinon, l'intérêt grandissant pour Power Query une nouvelle idée m'est parvenue

Serait-il possible de cibler les Gares de sortie pour une Gare d'entrée indiquée dans un tableau annexe située sur un autre feuille.

Pour comprendre, j'illustre et vous montre la disposition des données:

gest noms peages

En fait, dans la feuille "Choix_Peages", j'aimerais parcourir chaque Gare d'entrée indiquée pour n'en ressortir que les tarifs "Classe1" des Gares de sorties associées.

Est-ce possible, je vous joins à nouveau le fichier en y intégrant la requête de JFL

Edit, s'il faut changer la disposition des données figurant en feuille "Choix_Peages", n'hésitez pas.

klin89

Hello,

Je n'ai pas compris, tu as mentionné une liste qui permettrait de filtrer tes données... J'ai créé une liste du coup mais si on supprime Tableau2 qui est la liste, sur quelle base dois-je filtrer le tableau ?

La requête de JFL fonctionne également avec le Tableau2.

Pour la partie d'après je n'ai pas compris ton besoin, car c'est ce que ressort déjà la requête proposée ?

Pourrais tu préciser un peu plus ?

@+

Re Barout78,

J'illustre ma nouvelle demande, voilà ce que je souhaite obtenir à partir de la Base des Tarifs et du tableau annexé de la feuille "Choix_Peages"

choix peages

En fait, j'ai une liste de Gare de sortie pour une Gare d'entrée indiquée.

Y'a pas d'urgence

Edit : oui y'a la liste Tableau2 mais y'a pas une requête du même nom ?

Après, j'ai du mal avec Power Query

klin89

Bonjour à tous de nouveau !

@JFL, c'est bon mais je souhaite obtenir les chaines entières des Gares de Péages, pas comme ceci :

requete jfl

Cette présentation tentait de répondre au besoin ainsi exprimé : "ne garder que la 1ère lettre en majuscule de chaque chaîne composant un nom de Gare".

Il vous faut donc expliciter plus votre exigence.

N'oubliez pas, comme souvent demandé, qu'un exemple du résultat attendu est salutaire !

Bonjour à tous de nouveau !

Une version amendée (sous réserves de précisions à venir et autres demandes.....) :

let
    Source = Excel.CurrentWorkbook(){[Name="Table001__Page_2_300"]}[Content],
    ValRempl = Table.ReplaceValue(Source,"-"," ",Replacer.ReplaceText,{"Gare d'entrée", "Gare de sortie"}),
    Jointure = Table.NestedJoin(ValRempl, {"Gare d'entrée", "Gare de sortie"}, Excel.CurrentWorkbook(){[Name="tChoixPéages"]}[Content], {"Entree", "Sortie"}, "tChoixPéages", JoinKind.Inner),
    ColSelect = Table.SelectColumns(Jointure,{"Gare d'entrée", "Gare de sortie", "Classe 1"})
in
    ColSelect

La table des gares (tChoixPéages) a été aménagée :

image

Super JFL

En réaménageant la table du choix des péages, c'est mieux ainsi.

J'essaie de me familiariser avec l'éditeur Power Query mais j'obtiens une erreur (Sort) en voulant rajouter une étape pour transformer les chaines comme l'a fait Barout78

POUILLY EN AUXOIS en Pouilly En Auxois

= Table.TransformColumns(Sort,{{"Gare d'entrée", Text.Proper, type text}, {"Gare de sortie", Text.Proper, type text}})

De plus, peut-on formater la colonne des tarifs avec 2 décimales et le symbole euro et appliquer la police Calibri à l'ensemble du tableau retourné.

Merci JFL

Bonjour à tous !

Une proposition fonctionnelle :

let
    Source = Excel.CurrentWorkbook(){[Name="Table001__Page_2_300"]}[Content],
    ValRempl = Table.ReplaceValue(Source,"-"," ",Replacer.ReplaceText,{"Gare d'entrée", "Gare de sortie"}),
    Jointure = Table.NestedJoin(ValRempl, {"Gare d'entrée", "Gare de sortie"}, Excel.CurrentWorkbook(){[Name="tChoixPéages"]}[Content], {"Entree", "Sortie"}, "tChoixPéages", JoinKind.Inner),
    ColSelect = Table.SelectColumns(Jointure,{"Gare d'entrée", "Gare de sortie", "Classe 1"}),
    Format = Table.TransformColumns(ColSelect,
    {
        {"Gare d'entrée", Text.Proper, type text},
        {"Gare de sortie", Text.Proper, type text},
        {"Classe 1", Currency.From}})
in
    Format

La police et le symbole monétaire sont à paramétrer dans Excel.

Exemple de tableau retourné :

image

Merci à vous 2.

Grâce à vous, je peux continuer mon long apprentissage et me familiariser avec cet bel outil

klin89

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

re à tous,

Je réouvre le topic :

Peut-on organiser les données sous la forme d’un tableau similaire à un distancier kilométrique ?

Dans cette disposition :

  • La colonne de gauche contiendrait les différentes gares d’entrée.
  • La ligne du haut afficherait les différentes gares de sortie.
  • Les valeurs à renseigner dans le tableau correspondraient uniquement aux données du tableau "tChoixPéages".

Édit : ce ne sont pas toutes les gares d'entrée et de sortie de la feuille source qu'il faut afficher, ce sont celles de la table "tChoixPéages"

klin89

Bonjour à tous !

  • La colonne de gauche contiendrait les différentes gares d’entrée.
  • La ligne du haut afficherait les différentes gares de sortie.
  • Les valeurs à renseigner dans le tableau correspondraient uniquement aux données du tableau "tChoixPéages".

tChoixPéages étant un tableau structuré des deux champs concernés, je ne visualise pas le tableau à ressortir.

Il serait donc judicieux de fournir un exemple.....

Re,

A partir de la table "tChoixPéages" et de la source des tarifs

gares

J'aimerais obtenir cette disposition similaire à un distancier :

distancier

Là où sont placées les croix, j'aimerais y indiquer les tarifs classe1 se trouvant dans la feuille source.

klin89

Rechercher des sujets similaires à "power query import donnees issues fichier pdf mal agence"