Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

POWERQUERY :: Recherche d'un élément dans une sous-liste

oguruma

XLDnaute Occasionnel
Bonjour,
J'ai été confronté ces derniers temps à cette situation et je vous fais part via un petit exemple qui pour une fois se passera de fonctions et d'un fichier joint :

PowerQuery:
   List01={{"L1","Sub1"}, {"L2","Sub2"}, {"L3","Sub3"}},
   t_Position_1 = List.PositionOf(List01, "L2", Occurrence.First, (current, value) => value = current{0}),
   Value_1=List01{t_Position_1}{1},

   List02={{1,"Sub10"}, {2,"Sub20"}, {3,"Sub30","Sub31","Sub32"}},
   t_Position_2 = List.PositionOf(List02, 3, Occurrence.First, (current, value) => value = current{0}),
   Value_2=List02{t_Position_2}{2},

L'astuce se trouve dans cette ligne par exemple : t_Position_1 = List.PositionOf(List01, "L2", Occurrence.First, (current, value) => value = current{0}),

List01 : liste à parcourir
"L2" : élément recherché dans l'une des sous-listes
Occurrence.First : on fixe la première occurrence des sous-listes (voir documentation pwq pour plus de détail)
(current, value) => value = current{0} : et en fait toute la magie se trouve dans cette fonction qui va examiner chaque sous-liste afin de vérifier que le 1er élément trouvé correspond bien à la valeur recherchée.

Si trouvée, on a la position de la sous-liste dans la liste et on récupère le second élément soit l'indice 1 de la liste.
Pour récupérer la valeur : Value_1=List01{t_Position_1}{1},

Pour List02 le principe est le même. Cet exemple montre la possibilité de faire une recherche sur une clef numérique. Le nombre d'éléments dans les sous-listes peut être variable selon vos besoins.

Value_2=List02{t_Position_2}{2},


Si nécessaire je vous laisse traduire tout ceci dans une fonction. Appuyez-vous sur mes posts précédents pour la syntaxe d'une fonction.
 

Pièces jointes

  • 1719428395277.png
    1.8 KB · Affichages: 3

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…