Compter des parcelles 1 seule fois selon valeur max et critères multiples
Bonjour,
Je me permets de poster mon fichier simplifié sur votre forum, car je bloque vraiment sur cette formule. Si quelqu’un pouvait m’aider, ce serait top.
Je souhaite réaliser un comptage de mes parcelles avec certains critères par excel <10% entre 10 et 35% d'attaque sur une unité agroclimatique et par utilisateur mais je souhaite la valeur la plus élevée et que cette parcelle ne soit comptabilisé qu'une fois (sur la valeur la plus élevée) j'ai essayé avec un TCD mais ça ne donne pas exactement ce que je veux et en plus nous seront plusieurs a travailler sur ce fichier dont certains qui ne connaisse pas vraiment excel donc ils n'arriveront pas a actualiser le TCD. la formule que j'ai utilisé est celle-ci:
= NBVAL(FILTRE(UNIQUE(Export[[#En-têtes];[Parcelle]]);(MAX.SI.ENS(Export[[#En-têtes];[Mildiou sur inflorescences ou grappes - fréquence]];Export[[#En-têtes];[Parcelle]];UNIQUE(Export[[#En-têtes];[Parcelle]]);Export[[#En-têtes];[Zone Agroclimatique]];Résultats!C2)< 10))).
Pouvez-vous m'aider à comprendre l'erreur s'il vous plaît ? par avance le plus grand merci
Bonjour,
Une première approche consisterait à utiliser power query en réalisant les groupements Zone, utilisateurs, parcelle et en prenant le max du champ Mildiou.
Au lieu de récupérer une table, il est possible d'avoir directement le TCD.
Le Tcd ne correspond pas à votre modèle, je vous laisse le soin de trouver présentation qui vous convient.
Bonjour à tous,
En me basant sur la compréhension du problème de Eric (que je salue), je propose ci-après une alternative via formule 365 (TCD via formule en fait) :
=LET(
_data0; CHOISIRCOLS(Export; 3; 1; 2; -3);
_data1; FILTRE(_data0; PRENDRE(_data0; ; 1) <> "");
_grpCol; MAP(
PRENDRE(_data1; ; -1);
LAMBDA(m; SI.CONDITIONS(m < 10; "A < 10"; m < 35; "B < 35"; m < 70; "C < 70"; VRAI; "D > 70"))
);
PIVOTER.PAR(_grpCol; PRENDRE(_data1; ; 3); PRENDRE(_data1; ; -1); MAX)
)Bonjour Saboh12617,
Le problème, c'est que je me demande si je n'ai pas fait n'importe quoi.
Sinon, je vais tester ta solution. Je ne savais pas qu'on pouvait avoir une syntaxe en français, j'imagine que c'est dans les paramètres de Power Query.
Merci pour l'exemple avec Map, Prendre et lambda, je vais m'en inspirer.
Bonjour,
Merci pour vos réponses. je n'ai pas pu essayer la méthode d'Eric car j'ai un message d'erreur lors de l'ouverture du tableur m'indiquant que le fichier a été déplacé.
je vais essayer aujourd'hui la méthode de Saboh, si j'ai bien compris je dois mettre votre formule dans power query. je ne maitrise pas très bien cet outil.
Par avance merci.
Bonne journée
Bonjour à tous,
Non non il y a méprise : c'est bien une formule à entrer dans une cellule du classeur. Par contre elle s'étend aux cellules adjacentes pour faire un tableau, donc placez là dans une zone où vous avez de la place, par exemple sur une nouvelle feuille.
Bonjour à tous,
Je me disais aussi... Je ne comprenais pas pourquoi on avait la syntaxe en français.
Il faut que je révise Excel pour les nuls.
Sinon pour BCA34, il faut sans doute modifier la source dans la requête. Faire Alt-F12 pour ouvrir la requête, et cliquer sur la ligne source à droite, pour faire apparaître la ligne en question. Vérifier également le nom des colonnes.
Pour mémoire, la requête :
Les lignes commençant par # sont les étapes de la requête.
let
Source = Excel.CurrentWorkbook(){[Name="Export"]}[Content],
#"Type modifié" = Table.TransformColumnTypes(Source,{{"Utilisateurs", type text}, {"Parcelle", type text}, {"Zone Agroclimatique", type text}, {"Commune", type any}, {"Latitude", type any}, {"Longitude", type any}, {"Date", type any}, {"PARCELLE ECIMEE/ROGNEE", type any}, {"Stades Phénologiques", type text}, {"Apex en pousse (P)", type any}, {"Apex ralentis (R)", type any}, {"Apex Tombés (C)", type any}, {"Indice d'arrêt de croissance (IAC)", type any}, {"%age de ceps atteints excoriose", type any}, {"Oïdium - drapeaux", type text}, {"Oïdium - symptômes sur feuilles", type text}, {"Oïdium - % feuilles touchées", Int64.Type}, {"Oïdium sur inflorescences ou grappes - Fréquence", Int64.Type}, {"Oïdium sur grappes - Intensité", type any}, {"Mildiou - foyers primaires", type text}, {"Mildiou - Foyers primaires (fructification)", type text}, {"Mildiou - Observation en cours de campagne", type text}, {"Mildiou - évolution", type text}, {"Mildiou sur inflorescences ou grappes - fréquence", type number}, {"Mildiou sur grappes - intensité", type any}}),
#"Autres colonnes supprimées" = Table.SelectColumns(#"Type modifié",{"Utilisateurs", "Parcelle", "Zone Agroclimatique", "Mildiou sur inflorescences ou grappes - fréquence"}),
#"Lignes groupées" = Table.Group(#"Autres colonnes supprimées", {"Utilisateurs", "Zone Agroclimatique", "Parcelle"}, {{"Nombre", each List.Max([#"Mildiou sur inflorescences ou grappes - fréquence"]), type nullable number}}),
#"Lignes filtrées" = Table.SelectRows(#"Lignes groupées", each ([Nombre] <> null) and ([Zone Agroclimatique] <> null)),
#"Colonnes renommées" = Table.RenameColumns(#"Lignes filtrées",{{"Nombre", "Max Mildiou"}}),
#"Colonnes permutées" = Table.ReorderColumns(#"Colonnes renommées",{"Zone Agroclimatique", "Utilisateurs", "Parcelle", "Max Mildiou"}),
#"Lignes triées" = Table.Sort(#"Colonnes permutées",{{"Zone Agroclimatique", Order.Ascending}, {"Utilisateurs", Order.Ascending}, {"Parcelle", Order.Ascending}}),
#"Personnalisée ajoutée" = Table.AddColumn(#"Lignes triées", "Critère", each if[Max Mildiou]>=70 then "D > 70" else if [Max Mildiou]>=35 and [Max Mildiou]<70 then "C >= 35 et < 70" else if [Max Mildiou]>=10 and [Max Mildiou]<35 then "B >= 10 et < 35" else "A < 10")
in
#"Personnalisée ajoutée"Cordialement.
Bonjour,
Merci beaucoup pour vos réponses.
Je ne suis pas parvenue à faire exactement ce que je souhaitais. Je pense que je n’ai pas su expliquer clairement mon besoin. J’ai essayé de trouver une solution qui n’est sans doute pas très "jolie". Si vous avez des suggestions pour l’améliorer, je suis preneuse. Je vous joins mon tableau, j'ai gardé seulement quelques lignes car le fichier est très lourds, dans l'onglet en jaune c'est la forme dont j'ai besoin pour extraire les données.
Bonne fin de journée et encore merci
Bonjour,
Honnêtement, c'est faisable de manière beaucoup plus simple, notamment avec PowerQuery que proposais Eric.
Mais il faut que vous preniez le temps d'expliquer vos "transformations". On a des données avec des formules sur 3 feuilles pour aller chercher arbitrairement certaines valeurs, les changer etc
Franchement moi je m'y perds. Peut-être qu'un contributeur très motivé vous fournira une solution "clé en main", mais si vous preniez le temps d'expliquer chacune de vos "transformations" (changements de nomenclature, recherche de certaines valeurs, max selon conditions…) cela faciliterait vraiment la tâche. Prenez un Word et expliquez-y votre processus de traitement des données (je prend ceci ici, pour le transformer avec cela pour obtenir la valeur X…) et faites des petits tableaux de correspondances à 2 colonnes pour vos changements de noms.
Dans l'état, moi je n'ai pas le temps de démêler ce spaghetti. Bon courage.
Bonjour,
Merci pour votre retour je vais essayer de faire une notice explicative.
Merci encore du temps que vous avez passé.
Bonne journée