Fonction Power Query Table de correspondance

Bonjour,

Pourriez vous me dire comment faire sur Power Query afin d’obtenir une fonction qui permettrait une correspondance entre deux tableaux

(emplacement aléatoire),

Merci d'avance,

Cordialement,

15test.xlsx (10.52 Ko)

Bonjour

Vous pouvez utiliser ce code

let
    Source = Excel.CurrentWorkbook(){[Name="BASE"]}[Content],
    Référence = Table.Buffer(Excel.CurrentWorkbook(){[Name="TABLE_REFERENCE"]}[Content]),
    Recherche = Table.AddColumn(Source, "Recherche", 
         each Table.SelectRows(Référence, (x)=> Text.PositionOf([LIBELLE],x[LIBELLE REFERENCE])<>-1){0}?),
    #"Recherche développé" = Table.ExpandRecordColumn(Recherche, "Recherche", {"LIBELLE REFERENCE", "CODE"}, {"LIBELLE REFERENCE", "CODE"})
in
    #"Recherche développé"

en "Source", la BASE

en "Référence" la table de référence mise en "buffer" = en mémoire car on va souvent y faire appel

ensuite j'ajoute une colonne pour récupérer la première occurrence d'une correspondance (il y a correspondance d'un terme si le Text.PositionOf renvoie une valeur différente de -1)

s'il y a 2 références possible, on prend la première, grâce au {0}

les éventuelles lignes sans correspondance sont gérées avec le ? à la fin

dans la dernière étape je développe le "Record" obtenu

image

EDIT, on peut remplacer le {0}? par Table.First

le code devient

...
each Table.First(Table.SelectRows(Référence, (x)=> Text.PositionOf([LIBELLE],x[LIBELLE REFERENCE])<>-1))
...

Stéphane

Bonjour Stéphane,

Merci beaucoup, c'est parfait

Bonne soirée à vous,

Cordialement,

Bonsoir raccourcix,

En testant sur mes données réelles, j'ai un souci pour le mot par exemple able qu'on peut retrouver dans faisable,

Et dans ce cas je n'ai pas le bon retour, on dirait que la recherche n'est pas sensible a la casse ... existerait il une option pour la fonction Text.PositionOf?

Merci d'avance pour votre aide,

Cordialement,

14test.xlsx (19.21 Ko)

Hey,

Bonsoir Baroute78,

Auriez vous une idée?, je pense que votre message est incomplet

Merci d'avance,

Cordialement,

Hey,

En effet, désolé pour ça. C'est le cas classique où ABLE est avant FAISABLE dans la table de correspondance donc on prend la première correspondance. Pour déjouer cela un simple tri décroissant sur le nombre de caractère et le tour est joué

Modifie l'étape référence ainsi :

= Table.Buffer(Table.Sort(Excel.CurrentWorkbook(){[Name="TABLE_REFERENCE"]}[Content], { each Text.Length([LIBELLE REFERENCE]), Order.Descending}))

@+

Bonsoir Baroute78,

Merci pour cette astuce , je vais continuer à plancher sur mon fichier de travail où j'ai énormément de données,

Bonne soirée à vous,

Cordialement,

Bonjour

...on dirait que la recherche n'est pas sensible a la casse ...

pour ignorer la casse, on peut ajouter un argument Comparer.OrdinalIgnoreCase

par ailleurs Text.Contains est encore plus simple que Text.PositionOf

ce qui donne

...
Table.AddColumn(Source, "Recherche", 
   each Table.First(Table.SelectRows(Référence, (x)=> Text.Contains([LIBELLE],x[LIBELLE REFERENCE], Comparer.OrdinalIgnoreCase))))
...

Stéphane

Hello Stephane,

Pas sûr que ça corrige le problème uniquement avec Comparer.OrdinalCase. La souci c’est qu’on prend uniquement le premier élément qui est en correspondance dans la table de correspondance. FAISABLE étant en seconde position il ne remonte pas. Si on inverse l’ordre des mots à rechercher en fonction du nombre de caractère, la ça fait sauter le souci.

Je ne sais pas si j’ai été très clair.

@+

En effet, je réponds ici uniquement à la question de la casse pour regrouper "able" et "ABLE"

Tu avais déjà répondu sur le tri par ordre décroissant du nombre de caractères pour gérer FAISABLE avant ABLE.

Stéphane

Bonjour à vous deux,

Merci pour vos retours, le code se trouvant améliorer

Bon dimanche,

Cordialement,

Rechercher des sujets similaires à "fonction power query table correspondance"