Liste des ingrédients dynamique - PQ

Bonsoir à tous,

J'ai besoin de votre aide, je parviens à obtenir un résultat approximatif, mais j'ai besoin de l'expertise de certains pour arriver à obtenir un résultat fiable

Je cherche un moyen dynamique de gérer la liste d'ingrédients de mes produits, pour faciliter et corriger les étiquettes que je colle sur les produits

J'ai un classeur avec 2 feuilles

Label Data

J'ai un tableau avec deux colonnes

Nom du produit : par exemple, Soupe au Poulet, Sandwich au Blanc de Poulet, Riz aux Légumes (bon je pense que vous avez compris)

Ingrédients Simplifiés : par exemple, pour le Sandwich au Poulet, je vais remplir cette colonne : Pain de mie, Blanc de Poulet, Mayonnaise, Sel, Poivre.

Je voudrais une troisième colonne : qui me liste tous les ingrédients (à cause de la régulation on doit tout détailler) donc ma liste va ressembler à ça Pain de Mie (Farine de Blé, Antioxydant E442), Mayonnaise (Huile, Oeufs, Sel, Poivre, Citron, Ail, E558), Sel, Poivre.

CI

Un tableau avec deux colonnes

Le nom de l'ingrédient composé : Mayonnaise, Ketchup, Moutarde etc...

Ingrédients de cette ingrédients : tout ce que contient la Mayonnaise, le Ketchup etc...

De sorte à gérer dynamiquement mes ingrédients, si jamais je change de fournisseur de Mayo par exemple ou pour corriger une coquille etc...

Je vous joins le fichier avec un début de solution, je pense que je ne suis pas très loin mais j'ai besoin d'aide

Solution avec les Dynamic Arrays ET Power Query s'il vous plaît

19classeur2.xlsx (16.65 Ko)

Hey,

Une proposition PowerQuery

J'ai rajouté une étape pour avoir plus de lisibilité sur la restitution

@+

21classeur2-4.xlsx (27.00 Ko)

Bonsoir à tous !

Une proposition formule (unique et dynamique) en C2 :

=MAP(B2:B3;LAMBDA(i;JOINDRE.TEXTE(", ";;MAP(FRACTIONNER.TEXTE(i;;", ");LAMBDA(x;x & " " & RECHERCHEX(TEXTE.AVANT(x;" (";;;;x);CI[Compound_Ingredient];CI[Details];""))))))

Bonjour à tous !

Une approche via Power Query :

let
    Source = Excel.CurrentWorkbook(){[Name="tSource"]}[Content],
    ET = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    Split = Table.AddColumn(ET, "Split", each Text.Split([Ingrédients Simplifiés],", ")),
    ExpandSplit = Table.ExpandListColumn(Split, "Split"),
    Jointure = Table.FuzzyNestedJoin(ExpandSplit, {"Split"}, CI, {"Compound_Ingredient"}, "CI", JoinKind.LeftOuter, [IgnoreCase=true, IgnoreSpace=true, Threshold=0.8]),
    Expand_CI = Table.ExpandTableColumn(Jointure, "CI", {"Details"}, {"Details"}),
    ColFusion = Table.CombineColumns(Expand_CI,{"Split", "Details"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Ingrédients"),
    GroupBy = Table.Group(ColFusion, {"Produit", "Ingrédients Simplifiés"}, {{"Ingrédients", each Text.Combine([Ingrédients],", "), type text}})
in
    GroupBy

Note :

"tSource" correspond à une plage nommée (et non un tableau structuré) pour ne pas interférer avec ma proposition précédente (formule unique et dynamique) qui ne peut s'insérer dans un tel tableau.

Merci à vous d'avoir répondu si vite et si efficacement

@BAROUTE78, j'aime bien la lisibilité, mais tu penses que tu peux rajouter une colonne avec le résultat attendu, parce que c'est ça que je vais envoyer à l'imprimante et j'ai vraiment besoin de cette présentation

@JFL merci pour tes deux propositions. La solution avec les formules est top, juste j'ai des espaces un peu en trop, je ne suis pas certain de savoir où mettre un SUPPRESPACE.. Pour la solution avec PQ, la plage nommée tSource correspond aux cellules A1:C3 de la feuille Label Data ? Si je pouvais te demander de me rajouter ce SUPPRESPACE et de combiner les deux solutions dans un classeur ça serait le top

Enfin, puisqu'on est là pour apprendre, ma formule initiale dans le cas des ingrédients (sans pourcentages) était

=JOINDRE.TEXTE(", "; 1; BYROW(FRACTIONNER.TEXTE(B2; ; ", "); LAMBDA(a; SIERREUR( FRACTIONNER.TEXTE(a; ; ", ") & " " & RECHERCHEX(SUPPRESPACE(a); CI[Compound_Ingredient]; CI[Details]); SUPPRESPACE(a)))))

et celle avec les pourcentages

=JOINDRE.TEXTE(", "; 1; BYROW(SUPPRESPACE(TEXTE.AVANT(FRACTIONNER.TEXTE(B3;;", ");"(";;;;FRACTIONNER.TEXTE(B3;;", "))); LAMBDA(a; SIERREUR(  FRACTIONNER.TEXTE(a;;", ") & " " &RECHERCHEX(a; CI[Compound_Ingredient]; CI[Details]);a))))

mais elles ne fonctionnent pas, auriez-vous une idée pourquoi il fallait choisir MAP et non BYROW ? Une autre suggestion qui peut m'aider pour le futur ?

Bonsoir à tous !

@JFL merci pour tes deux propositions. La solution avec les formules est top, juste j'ai des espaces un peu en trop, je ne suis pas certain de savoir où mettre un SUPPRESPACE.. Pour la solution avec PQ, la plage nommée tSource correspond aux cellules A1:C3 de la feuille Label Data ? Si je pouvais te demander de me rajouter ce SUPPRESPACE et de combiner les deux solutions dans un classeur ça serait le top

Des espaces superflus ? Lesquels ?

Éventuellement en fin de chaîne : Il est éliminé par le SUPPRESPACE ajouté.

Je vous livre le classeur (je pensais l'avoir posté....) :

Merci @JFL

L'espace se trouve au niveau des derniers ingrédients après le mot Salt : "XXX, Salt , Black Pepper." je pense que c'est le seul superflu,

Bonsoir à tous de nouveau !

Effectivement....

Formule corrigée :

=MAP(B2:B3;LAMBDA(i;JOINDRE.TEXTE(", ";;MAP(FRACTIONNER.TEXTE(i;;", ");LAMBDA(x;x & RECHERCHEX(TEXTE.AVANT(x;" (";;;;x);CI[Compound_Ingredient];" " & CI[Details];""))))))

Parfait,

Promis je marque le sujet comme résolu est-ce que tu peux m'aider et corriger la version PQ, please please ?

Hey,

@BAROUTE78, j'aime bien la lisibilité, mais tu penses que tu peux rajouter une colonne avec le résultat attendu, parce que c'est ça que je vais envoyer à l'imprimante et j'ai vraiment besoin de cette présentation

Dommage pour la présentation

Voici la version amendée !

N'hésite pas si besoin

@+

16classeur2-4.xlsx (26.86 Ko)

Edit : problème avec les espaces voici la V2 ci-dessous

15classeur2-4-v2.xlsx (26.90 Ko)

Excellent solution, est-ce que je peux te demander de rajouter les pourcentages comme le second exemple ?

Je devrais avoir "White Bread (58%) (WHEAT Flour...)..."

Bonsoir à tous de nouveau !

Concernant la version Power Query corrigeant l'espace superflu :

let
    Source = Excel.CurrentWorkbook(){[Name="tSource"]}[Content],
    ET = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    Split = Table.AddColumn(ET, "Split", each Text.Split([Ingrédients Simplifiés],", ")),
    ExpandSplit = Table.ExpandListColumn(Split, "Split"),
    Jointure = Table.FuzzyNestedJoin(ExpandSplit, {"Split"}, CI, {"Compound_Ingredient"}, "CI", JoinKind.LeftOuter, [IgnoreCase=true, IgnoreSpace=true, Threshold=0.8]),
    Expand_CI = Table.ExpandTableColumn(Jointure, "CI", {"Details"}, {"Details"}),
    ColFusion = Table.CombineColumns(Expand_CI,{"Split", "Details"},Combiner.CombineTextByDelimiter(" ", QuoteStyle.None),"Ingrédients"),
    ColTrim = Table.TransformColumns(ColFusion , {"Ingrédients" , each Text.Trim(_)}),
    GroupBy = Table.Group(ColTrim, {"Produit", "Ingrédients Simplifiés"}, {{"Ingrédients", each Text.Combine([Ingrédients],", "), type text}})
in
    GroupBy

Hello,

La petite V3, j'ai du modifié le fonctionnement de la requête du coup

@+

22classeur2-4-v3.xlsx (26.79 Ko)

Edit : dans le cas où l'on n'utilise pas de correspondance approximative pour la jointure

Je m'excuse pour avoir tardé à vous faire un retour

Vos solutions sont excellentes, que ce soit en DA ou avec PQ

J'aime bien la dernière proposition PQ de BAROUTE78, où on ne se sert pas de la jointure approximative (je travaille sur plusieurs environnements dont macOS et on a pas encore cette option quand on fait une jointure)

Merci à tous pour votre temps et la pertinence de vos solutions

Bonjour à tous !

Les joyeusetés offertes par MAC....

Je vous remercie de ce retour.

Rechercher des sujets similaires à "liste ingredients dynamique"