J'espère ne froisser personne avec le tutoiement. Sacrée mobilisation autours de ce post ! Je vais essayer de n'oublier personne.
@wDog66
Merci pour les modifications : cela fonctionne très bien sans le tableau que j'avais ajouté.
En B8 :
Je viens de découvrir que SOMME.SI.ENS() permet de faire une recherche multi-critère (sans faire forcément une somme) ! C'est très utile.
Et la fonction TEXTE() avec l'argument "00" pour mettre un zéro si nécessaire au nombre à 2 chiffres est bien plus appropriée.
En F8 :
Si j'ai bien compris, c'est une formule matricielle, mais je n'ai pas saisi comment cela fonctionne. Je ne sais pas en faire.
@JHA
Merci à toi aussi.
Tu as utilisé le même format de formule (matricielle ?) que wDog66, que je ne maîtrise pas.
Il semblerait que l'on puisse mettre ainsi 2 critères et plage de recherche dans un simple INDEX() EQUIV(). Les 2 formules en B8 et F8 ont ainsi la même structure.
Je vais essayer de comprendre cela.
@chris
Merci aussi.
Tableau V2
J'ai bien vu le travail de nettoyage et de nommage, avec le tableau "Choix", c'est bien plus propre.
Idem pour les formules matricielles.
Remarque : comme B6 dépend uniquement de A6, il n'est pas nécessaire de mettre cette valeur en 3e critère. Si ?
Tableau V3
Cette solution avec PQ m'amène plein de questions :
1. Tu "empêches" l'affichage de Series dans une Feuille à part et l'affichage se fait dans la même feuille "Recherche INDEX TP" que celle qui contient le tableau Choix. Comment fais-tu cela ? (quand j'utilise PQ, j'ai toujours une nouvelle feuille qui se crée)
2. Tu utilises le tri et la fusion de requête ainsi :
#"Lignes triées" = Table.Sort(#"Colonnes supprimées1",{{"INDEX", Order.Ascending}, {"Date valeur", Order.Descending}}),
#"Requêtes fusionnées" = Table.NestedJoin(#"Lignes triées", {"INDEX", "Intitulé", "Date valeur"}, Choix, {"Index", "Intitulé", "Date valeur"}, "Choix", JoinKind.Inner),
Mais comment a-t-on accès à cette fusion multiple (sans passer par l'éditeur avancé), je n'ai qu'un critère quand je clique sur le bouton "Fusionner des requêtes" ? image en pièce attachée
#"Requêtes fusionnées" = Table.NestedJoin(#"Lignes triées", {"INDEX"}, Choix, {"Index"}, "Choix", JoinKind.Inner)
3. Pour info, je m'étais approché de la solution avec PQ, en utilisant la réponse à un autre post du forum (mon fichier -un peu bancal car je ne sais pas faire apparaitre le résultat dans la même feuille !- en pièce attachée) : j'ai nommé les 2 cellules avec les critères critere_index et critere_date
let
//lecture des parametres
index = Excel.CurrentWorkbook(){[Name="critere_index"]}[Content]{0}[Column1],
date = Excel.CurrentWorkbook(){[Name="critere_date"]}[Content]{0}[Column1],
//debut du code
Source = Excel.CurrentWorkbook(){[Name="Series"]}[Content],
#"Type modifié" = Table.TransformColumnTypes(Source,{{"INDEX", type text}, {"Intitule", type text}, {"Base", type text}, {"Serie arretee", type text}, {"Date valeur", type text}, {"Valeur", type number}, {"Date publication", type text}, {"Identifiant", type text}}),
// Filtre selon les parametres
FILTRE = Table.SelectRows(#"Type modifié", each [INDEX] = index and [Date valeur] = date)
in
FILTRE
Quelqu'un peut-il me dire si l'une ou l'autre méthode Table.NestedJoin et Table.SelectRows présente des avantages ou inconvénients appliquées à mon cas ?
4. QUESTION subsidiaire sur les formules matricielles:
Tentative de modification : J'essaie de supprimer l'étape en E6 (concaténer dans une cellule du tableau Choix pour avoir le critère "Date valeur"), en tentant une modif semblable à celle de wDog66 avec la fonction TEXTE (qui utilisait SOMME.SI.ENS sans formule matricielle en B8).
Comme le symbole & peut-il être utilisé pour concaténer dans les formules simples et pour assembler plusieurs arguments dans les formules matricielles, comment peut-on utiliser les 2 ensembles ?
{=INDEX(Series[Valeur];EQUIV(Choix[Index]&Choix[Année]&"-"&TEXTE(Choix[Mois];"00");Series[INDEX]&Series[Date valeur];0))}
spoiler : ça ne marche pas... (j'utilise CTRL+MAJ+Entrée)
celle-là non plus...
{=INDEX(Series[Valeur];EQUIV(Choix[Index]&CONCATENER(Choix[Année];"-";TEXTE(Choix[Mois];"00"));Series[INDEX]&Series[Date valeur];0))}
Bref, merci !
SOMME.SI.ENS() fonctionne très bien dans les formules classiques, c'est ce que j'ai le mieux compris.
La formule matricielle parait très adaptée, il faut donc que j'apprenne à les faire fonctionner.
Et le tri + la fusion ou la recherche de ligne directement dans PQ permet de faire ça aussi très bien.