Microsoft 365 Récupérer des valeurs d'un autre tableau en fonction de plusieurs critères

Thibault123

XLDnaute Junior
Bonjour,

J'ai besoin de récupérer dans un autre tableau des valeurs en fonction de plusieurs critères. "L'autre tableau" nommé Pré enregistrement des NC.xlsm est celui que j'ai joint.
Le tableau dans lequel je souhaite que ces valeurs soient affichées s'appelle Performance fournisseurs.xlsm. La feuille dans laquelle il faut afficher ces valeurs s'appelle Scorecard. Les valeurs doivent être affichées en colonne à partir de la ligne 67. J'ai mis un tableau exemple en pièce jointe.
Je souhaite afficher à partir de cette ligne les valeurs N° NC, Date, Code article, Désignation, N° série, Quantité et Défaut constat du tableau Pré enregistrement des NC.xlsm pour le mois de Juillet (colonne Date) pour le Fournisseur A (colonne Responsabilité Fournisseur / VIT).
J'espère avoir été suffisamment clair!?
Merci d'avance pour votre aide.
 

Pièces jointes

  • Pré enregistrement des NC.xlsm
    88.1 KB · Affichages: 31
  • Performance fournisseurs.xlsm
    9 KB · Affichages: 5

Thibault123

XLDnaute Junior
Dans l'aperçu des requêtes (cf. 2 screenshots joints), il y a bien 10 lignes mais ce sont 5 doublons.
Donc en affichant les TCD associés, il n'y a que 5 fournisseurs et toutes les données sont doublées.
 

Pièces jointes

  • TopN1 doublon.jpg
    TopN1 doublon.jpg
    103.3 KB · Affichages: 11
  • TopN2 doublon.jpg
    TopN2 doublon.jpg
    107.4 KB · Affichages: 11

chris

XLDnaute Barbatruc
BONJOUR (la politesse ne nuit pas...)

Les requêtes remplacent les TCD, donc plus de TCD à faire

Tu n'a pas du développer correctement : il faut cliquer sur un ligne Table 1 fois pas déplier tout.

J'avais testé avec un top 3 et je n'avais pas de doublons.
 

Thibault123

XLDnaute Junior
Bonjour,

Oui bien sûr. Pardon, j'avais commencé à écrire le message la veille, donc je n'avais pas remis bonjour. J'ai modifié et envoyé le message ce matin sans relire le début finalement.

Pour le moment, je n'arrive pas à le faire fonctionner. Toujours les doublons. Pourtant j'ai repris les codes des requêtes et n'ai fait aucun changement qui peut engendrer ce type de problème, seulement des modifs mineures qui fonctionnaient sur les autres requêtes.
Il faut que je continue à regarder.
 

Thibault123

XLDnaute Junior
Bonjour,

C'est-à-dire?!
Je ne connais pas du tout cet outil. Je ne sais pas comment synthétiser une requête.
A chaque fois, je copie/colle et j'arrange pour mon besoin.

J'ai réussi à le faire marcher en chargeant la requête TopN1 dans un tableau à un certain emplacement, et idem pour la requête TopN2.
 

Thibault123

XLDnaute Junior
RE,
Oui j'ai vu effectivement que la requête Data avait changé. Je l'ai modifié également.
Je n'utilise sans doute pas de la bonne/meilleure manière les requêtes que tu as faites, mais ça semble fonctionner. Pas de bug après quelques tests pour l'instant.
Merci beaucoup pour ton aide.
J'espère que j'ai fini de t'embêter!
 

Thibault123

XLDnaute Junior
RE,

Oui, mais que dois-je écrire concrètement?
Comme tu peux le voir ci-dessous dans les extraits de requêtes concernés, j'ai réussi à faire les modifs de noms des autres colonnes, mais pas pour celle Fournisseur car si je change la partie en gras ce n'est pas bon comme ça fait appel à ce nom dans le fichier source.
Je suppose qu'il faut écrire quelque chose avec "each" et "type" comme pour les autres. Mais quoi?
Une fois cette modif dans Data, je pourrai changer les "Responsabilité Fournisseur / VIT" par "Fournisseur" dans les 2 autres requêtes.
Merci encore.

extrait requête Data :
#"Lignes groupées" = Table.Group(#"Personnalisée ajoutée", {"Responsabilité Fournisseur / VIT"}, {{"Nombre de NC", each Table.RowCount(_), type number}, {"Nombre de Retour Client", each List.Sum([Retour Client]), type number}, {"Nombre de rebuts", each List.Sum([Quantité]), type number}, {"Coût", each List.Sum([Info coût pièces NC]), type number}})

extrait requête TopN1 :
Tri = Table.Sort(Source,{{"Nombre de NC", Order.Descending}, {"Nombre de Retour Client", Order.Descending}, {"Nombre de rebuts", Order.Descending}, {"Coût", Order.Descending}}),
#"Personnalisée ajoutée" = Table.AddColumn(Tri, "Top", each Table.FirstN(Tri, 10)),
#"Colonnes supprimées" = Table.RemoveColumns(#"Personnalisée ajoutée",{"Responsabilité Fournisseur / VIT", "Nombre de NC", "Nombre de Retour Client", "Nombre de rebuts", "Coût"}),

extrait requête TopN2 :
#"Colonnes permutées" = Table.ReorderColumns(Source,{"Responsabilité Fournisseur / VIT", "Coût", "Nombre de NC", "Nombre de Retour Client", "Nombre de rebuts"}),
Tri = Table.Sort(#"Colonnes permutées",{{"Coût", Order.Descending},{"Nombre de NC", Order.Descending}, {"Nombre de Retour Client", Order.Descending}, {"Nombre de rebuts", Order.Descending}}),
#"Personnalisée ajoutée" = Table.AddColumn(Tri, "Top", each Table.FirstN(Tri, 10)),
#"Colonnes supprimées" = Table.RemoveColumns(#"Personnalisée ajoutée",{"Responsabilité Fournisseur / VIT", "Nombre de NC", "Nombre de Retour Client", "Nombre de rebuts", "Coût"}),
 

chris

XLDnaute Barbatruc
RE

Ne touche pas au code mais utilise les menus normalement : tu cliques sur la roue dentée de la ligne regroupement et tu changes de champs Fournisseur et non Responsabilité Fournisseur / VIT.

Sur TopN1, soit tu corrige dans la barre de formule, soit tu supprimes la lignes qui supprimes les colonnes et tu refais la suppression des colonnes.

Sur TopN2 : même principe pour la permutation et pour la suppression. Soit changer dans la barre de formule soit supprimer et refaire l'action
 

Thibault123

XLDnaute Junior
La notion de mois glissant peut être basée sur une date du 15/01 au 15/04 par exemple.

Si tu saisis 01/07/2019 il faut considérer du 1/05/2019 au 31/07/2019 ?

Si oui modifier le filtre ainsi :
VB:
= Table.SelectRows(#"Type modifié", each [Date]  <= Date.EndOfMonth(Date.From((Table.FirstValue(Excel.CurrentWorkbook(){[Name="Date"]}[Content])))) and [Date]  > Date.AddMonths(Date.EndOfMonth(Date.From((Table.FirstValue(Excel.CurrentWorkbook(){[Name="Date"]}[Content])))) ,-3))

Hello,
Je reviens sur ce point car après des mois d'utilisation sans problème, je viens de tomber sur un cas où cela ne fonctionne pas correctement. Pour info (c'est un détail), j'ai modifié dans mon fichier le "-3" en "-6" à la fin du code pour que cela fonctionne sur 6 mois glissant désormais.

Voici le cas que j'ai : en indiquant le mois de Septembre 2020 comme Date (rentrée sous la forme 01/09/20), cela me compte une entrée en date du 31/03/20.
Comme le mois de Septembre compte 30 jours, avec la formule actuelle cela prend en compte le 31/03/20 dans les 6 mois glissant.
Il faudrait que cela s'arrête au 01/04/20.
En extrapolant (hors tous les mois en 30 jours), cela risque d'arriver aussi pour le mois de Février où les dates de fin Août de l'année précédente seront comptabilisées au lieu de s'arrêter au 01/09.

Je n'ai pas pu tester le cas inverse (des entrées qui ne seraient pas comptabilisées alors qu'elles devraient l'être). Exemple du mois de Juillet (fin du mois = 31/07), avec les 6 mois glissant cela tombe sur Février (fin du mois calculé = "31/02") => les premiers jours de Mars seraient-ils bien comptabilisés?

J'espère avoir été à peu près clair...!?

Quelqu'un saurait-il m'aider à trouver la bonne formule svp?
 

chris

XLDnaute Barbatruc
Bonjour

Ce n'est pas un problème de 30 ou 31 jours mais de début ou fin de mois
VB:
Table.SelectRows(#"Type modifié", each [Date] <= Date.EndOfMonth(Date.From((Table.FirstValue(Excel.CurrentWorkbook(){[Name="Date"]}[Content])))) and [Date] > Date.AddMonths(Date.StartOfMonth(Date.From((Table.FirstValue(Excel.CurrentWorkbook(){[Name="Date"]}[Content])))) ,-5))
 

Discussions similaires