Erreur pivot d'une colonne (ne pas agréger)

Bonjour à tous la communauté d'EXCEL, j'ai une belle problématique pour vous!

Contexte: Dans le cadre de mon travail, j'aimerai qu'un fichier (appelons-le MSP) sois alimenté via des fichiers sources EXCEL "automatiquement" (à chaque ouverture du fichier "MSP" les requêtes se mettent à jour). Je m'explique, l'idée est de faire une requête Power Query qui recherche dans un répertoire tous les fichiers .xlsx commencant par "PV" pour ensuite extraire des datas de chaque fichier. Après transformations j'arrive à deux colonnes du type:
(Ici, j'ai pris seulement 2 fichiers à titre d'exemple mais je dois transformer beaucoup plus de datas)

image

L'idée après transformation, c'est de mettre toutes les datas associées à chaque lettre dans une colonne, i.e une colonne = une en-tête (la lettre) et en dessous les différentes valeurs. Dans le cas ci-dessus on aurait après transformations 2 lignes (car 2 valeurs par lettres) et 7 colonnes (car 7 lettres). Globalement ça:

image

La transformation correspondant à la flèche rouge est un pivot (je crois) en sélectionnant la colonne en-tête, en choisissant comme colonne de valeurs la colonne DATA et "ne pas agréger" comme fonction de la valeur agrégée.

Or, voila l'erreur que j'ai:

image image

Je ne comprends pas

Si quelqu'un a la réponse je suis plus que preneur, merci d'avance !

PS: voila les fichiers EXCEL (j'ai fait simple mais je pense que si vous regardez la requête du fichier MSP vous aurez plus d'infos sur le pourquoi du comment).

Les fichiers test sont les fichiers sources.

13test-1.xlsx (9.30 Ko)
11test-2.xlsx (9.31 Ko)
13msp.xlsx (20.18 Ko)

Bonjour à tous !

Et.....

Je vous propose, après l'étape "Colonne supprimée, d'insérer le code suivant :

GroupBy = Table.Group(#"Colonnes supprimées", {"Data"}, {{"All", each [operateur]}}),
    Table = Table.FromColumns(GroupBy[All],GroupBy[Data])
in
    Table

Ca marche! Un grand merci à toi ça faisait depuis début Mars que j'étais bloqué

Super nouvelle!

Bonjour à tous de nouveau !

Excellente nouvelle...

Je vous remercie de ce retour.

-----> Ne pas oublier de passer le sujet en mode résolu !

Bon j'ai essayé aujourd'hui au boulot et cela ne fonctionne pas (ne fonctionne que dans les fichiers tests que j'ai mis en PJ plus haut).

Voila un exemple de fichier source

image

Voila mes en-têtes j'ai donc changer le code en:

image

Et voici l'erreur:

image

Il faut savoir que c'est une version de EXCEL 2016 que j'utilise, il y a t-il un lien?

La fonction GroupBy est-elle indisponible sur EXCEL 2016?

Bonsoir à tous !

"GroupBy" n'est pas une fonction mais le nom donné à un retraitement opéré dans la requête.

La fonction Table.Groupe existe bien sous Excel 2016.

Pouvez-vous joindre les sources (anonymisées) ?

Hello,

Une proposition quasiment que en NoCode et ça permet de ne pas générer des requêtes de l'assistant qui polluent un peu à mon sens

let
    Source = Folder.Files("C:\Users\toto\OneDrive\Bureau\test"),
    Filter = Table.SelectRows(Source, each Text.StartsWith([Name], "test")),
    FichiersMasqués = Table.SelectRows(Filter, each [Attributes]?[Hidden]? <> true)[[Content],[Name]],
    Transform = Table.TransformColumns( FichiersMasqués , {"Content" , each Excel.Workbook(_) }),
    ExpandSheet = Table.ExpandTableColumn(Transform, "Content", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Data", "Item", "Kind", "Hidden"}),
    CombineFile = Table.Combine(ExpandSheet[Data]),
    Headers = Table.PromoteHeaders(CombineFile, [PromoteAllScalars=true]),
    Filter2 = Table.SelectRows(Headers, each ([Data] <> "Data")),
    GroupBy = Table.Group(Filter2, {"Data"}, {{"tbl", each [operateur] }}),
    ToTable = Table.FromColumns( GroupBy[tbl] , GroupBy[Data])
in
    ToTable

Pour votre souci, peut être un espace inopiné dans le nom du champ [OPERATEUR ] ?

@+

8msp.xlsx (17.53 Ko)

Edit : même chose que JFL en fait que je salue

JFL, je ne peux pas te donner les vrais fichiers EXCEL pour confidentialité mais je peux essayer de faire la même structure, il te faut les fichiers sources ou le code N du fichier MSP

BAROUTE, j'essaye ce code mais je ne suis pas très doué en NoCode et je sais à quoi correspond Data et operateur dans mon fichiers mais je ne comprend avec quoi je dois remplacer pour mon cas "Content" "Name" "Item" "Kind" "Hidden" "Name.1" et cette ligne ci :FichiersMasqués = Table.SelectRows(Filter, each [Attributes]?[Hidden]? <> true)[[Content],[Name]],

Si tu pourrais me détailler en phrases ce code cela m'aiderait grandement ^^

Bonjour à tous !

JFL, je ne peux pas te donner les vrais fichiers EXCEL pour confidentialité mais je peux essayer de faire la même structure, il te faut les fichiers sources ou le code N du fichier MSP

Pour modéliser à bon escient, il est nécessaire de connaître précisément la structure de vos fichiers (notamment le nom des champs).

JFL, l'erreur ne proviendrai pas du type de données sous forme de liste? (l'erreur indique le problème comme "List")

Sur cette photo j'ai juste fais l'étape GroupBy et affiché GroupBy (par in GroupBy), vu que tu as appelé ton étape suivante Table je pense que tu pensais que cela créait une table et non une liste. L'erreur provient peut être de cela?

image

PS: Désolé je ne prend pas le risque d'envoyer des docs potentiellement confidentiel

Bonjour à tous de nouveau !

PS: Désolé je ne prend pas le risque d'envoyer des docs potentiellement confidentiel

Il n'est pas interdit de créer un classeur test avec des données anonymisées.....

Hello,

BAROUTE, j'essaye ce code mais je ne suis pas très doué en NoCode et je sais à quoi correspond Data et operateur dans mon fichiers mais je ne comprend avec quoi je dois remplacer pour mon cas "Content" "Name" "Item" "Kind" "Hidden" "Name.1" et cette ligne ci :FichiersMasqués = Table.SelectRows(Filter, each [Attributes]?[Hidden]? <> true)[[Content],[Name]],

Si tu pourrais me détailler en phrases ce code cela m'aiderait grandement ^^

let
    //Chemin vers ton dossier
    Source = Folder.Files("C:\Users\toto\OneDrive\Bureau\test"),

    //Filtre sur tous les fichiers du dossier qui commencent par "test"
    Filter = Table.SelectRows(Source, each Text.StartsWith([Name], "test")),

    //Permet de filtrer les fichiers masqués.
    //Quand tu importes un dossier tu as une colonne [Attributes] qui contient des metadata du style si c'est un fichier en lecture seule, la taille, etc ainsi que si c'est un fichier masqué ou pas. Ici on retire les fichiers masqués mais ça c'était une ligne déjà présente dans ton code.
    FichiersMasqués = Table.SelectRows(Filter, each [Attributes]?[Hidden]? <> true)[[Content],[Name]],

    //Transforme chaque fichier récupéré du dossier en classeur excel
    Transform = Table.TransformColumns( FichiersMasqués , {"Content" , each Excel.Workbook(_) }),

    //Ca c'est juste un clic sur la colonne Name pour étendre les colonnes. Ca liste l'ensemble des feuilles de tes fichiers excel en gros. Ce qui nous intéresse ici c'est la colonne Data dans laquelle se trouvent les données.
    ExpandSheet = Table.ExpandTableColumn(Transform, "Content", {"Name", "Data", "Item", "Kind", "Hidden"}, {"Name.1", "Data", "Item", "Kind", "Hidden"}),

    //Du coup on combine toutes les tables data pour récupérer les données de chaque onglet
    CombineFile = Table.Combine(ExpandSheet[Data]),

    //On promeut les headers pour avoir des entêtes de colonne
    Headers = Table.PromoteHeaders(CombineFile, [PromoteAllScalars=true]),

    //On enlève les headers des tables du dessous vu qu'on les a toutes compilées les unes sur les autres
    Filter2 = Table.SelectRows(Headers, each ([Data] <> "Data")),

    //On groupe par data (A, B, C, D ...) et on ne récupère que la liste des valeurs affectées à chaque A, chaque B etc
    GroupBy = Table.Group(Filter2, {"Data"}, {{"tbl", each [operateur] }}),

    //La fonction Table.FromColumns va créer une table en fonction de liste. Donc la première liste sera la première colonne, la seconde liste sera la seconde colonne etc. Donc avec ta colonne tbl créée juste avant on a bien la liste de A en premier, la liste de B en second
    ToTable = Table.FromColumns( GroupBy[tbl] , GroupBy[Data])
in
    ToTable

J'espère que c'est plus clair

@+

JFL voila en PJ une copie du fichier source

6source-test.xlsx (12.16 Ko)

Bonjour à tous de nouveau !

Un seul fichier ?
Faut-il supposer que les datas représentent la copie écran présentée dans votre premier message ?

Par ailleurs, les données semblent être uniques...... cela conduit ce résultat (similaire à une simple transposition) :

image

Est-ce le résultat attendu ?

JFL, c’est un des fichiers sources, j’en ai envoyer qu’un seul puisqu’ils ont tous la même architecture, je n’ai gardé que les colonnes qui m’intéressaient directement

Bonsoir à tous !

J'ai dupliqué votre classeur source en ajoutant 100 aux valeurs numériques du second fichier.

La requête du classeur ci-joint, est basée sur ces seules données. Cela signifie que les retraitements de vos sources réelles sont à votre charge.....

Rechercher des sujets similaires à "erreur pivot colonne pas agreger"