Microsoft 365 RechercheV avec une condition poids

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Lina

XLDnaute Nouveau
Bonjour,

j'aurai besoin d'aide pour une formule.

Mon besoin :

Que la colonne C soit remplie en fonction de la colonne B (en liste déroulante), à partie d'une table de valeurs (donc comme une recherche V), mais en fonction du poids du produits qui est signifié en colonne A.

Le contexte :

Il existent différents codes DEEE en au sain d'une même catégorie de produits en fonction de leur poids. et je voudrais que en rentrant la catégorie et le poids, le code s'affiche.

Merci d'avance pour votre aide ! 😉
 
Solution
Mon vrai tableau contient plus de colonnes que dans l’exemple que vous avez utilisé.
- Pour la partie 3 (les colonnes à renvoyer), je sais comment adapter la formule.
- Par contre, pour les deux premières parties, je ne sais pas comment ajuster pour que cela corresponde à mon tableau.
Pourriez-vous m’indiquer comment modifier ces parties afin que la formule fonctionne correctement avec mon tableau complet ?
Bien sur,
Dans le bloc suivant :
Code:
λFILTEQUIP; LAMBDA(_fullarr;_equip;
        LET(
            _idx; SCAN(
                "";
                CHOISIRCOLS(_fullarr; 2);
                LAMBDA(acc;v; SI(v = ""; PRENDRE(acc; -1); v))
            );
            FILTRE(_fullarr; _idx = _equip; "")
        )
    )
;
Le 2...
Bonjour Lina, et bienvenue sur XLD, bonjour NainPorteQuoi,
Avec un petit fichier test représentatif et anonymisé, ce serait plus simple pour comprendre et essayer de trouver une solution qui colle à votre contexte. ( quelques lignes suffisent )
 
Bonjour NainPorteQuoi,
Bonjour Sylvanu,

Merci beaucoup pour vos retours,

Comme suggéré, vous trouverez en pièce jointe un fichier de simulation.
les deux cases qui me posent problème sont le code ecologic et le montant DEEE. J'y ai incéré des indication et des codes couleurs pour faciliter la compréhension.

Encore merci pour le temps consacré et votre aide précieuse !
 

Pièces jointes

Je vais vous chercher une formule mais pour info on n'atteindra jamais la ligne rouge...
1772100312118.png

Quant aux doublons pour une meme catégorie, vous n'indiquez aucunement comment choisir... Je prendrai donc toujours la 1e ligne
1772100393100.png
 
Bonjour,
Avec autant de cellules fusionnées, je ne sais pas trouver la bonne valeur en formules.
Acceptez vous les macros VBA ?
NB: Vous cherchez "Composant PC" et 25 kg. Dans le barème, le poids max pour "Composant PC" est de 5kg. Que faire ?
 
Voici ma proposition (pour la cellule D2, en E2 remplacer "ECO" en bas par "DEE") :
Code:
=LET(
    λGETBORNES; LAMBDA(_fullarr;
        LET(
            _tranche; CHOISIRCOLS(_fullarr; 3);
            _return; CHOISIRCOLS(_fullarr; 5; 6; -1);
            FILTRE(SI(_return = ""; 1000000000; _return); _tranche <> "")
        )
    );
    λFILTEQUIP; LAMBDA(_fullarr;_equip;
        LET(
            _idx; SCAN(
                "";
                CHOISIRCOLS(_fullarr; 2);
                LAMBDA(acc;v; SI(v = ""; PRENDRE(acc; -1); v))
            );
            FILTRE(_fullarr; _idx = _equip; "")
        )
    );
    λSEARCH; LAMBDA(_pds;_equip;_colCode;_fullarr;
        LET(
            _filt; λFILTEQUIP(_fullarr; _equip);
            _born; λGETBORNES(_filt);
            RECHERCHEX(
                _pds;
                CHOISIRCOLS(_born; 1);
                CHOISIRCOLS(_born; SI(_colCode = "ECO"; -2; -1));
                "Aucune catégorie correspondante";
                1
            )
        )
    );
    λSEARCH($B2; $C2;"ECO"; Barème!$A$2:$K$31)
)

EDIT : je vous laisse corriger le 25 en 0,25 pour faire marcher la recherche de la première ligne. Sinon entrez directement $B2/1000 dans la formule.
 

Pièces jointes

Voici ma proposition (pour la cellule D2, en E2 remplacer "ECO" en bas par "DEE") :
Code:
=LET(
    λGETBORNES; LAMBDA(_fullarr;
        LET(
            _tranche; CHOISIRCOLS(_fullarr; 3);
            _return; CHOISIRCOLS(_fullarr; 5; 6; -1);
            FILTRE(SI(_return = ""; 1000000000; _return); _tranche <> "")
        )
    );
    λFILTEQUIP; LAMBDA(_fullarr;_equip;
        LET(
            _idx; SCAN(
                "";
                CHOISIRCOLS(_fullarr; 2);
                LAMBDA(acc;v; SI(v = ""; PRENDRE(acc; -1); v))
            );
            FILTRE(_fullarr; _idx = _equip; "")
        )
    );
    λSEARCH; LAMBDA(_pds;_equip;_colCode;_fullarr;
        LET(
            _filt; λFILTEQUIP(_fullarr; _equip);
            _born; λGETBORNES(_filt);
            RECHERCHEX(
                _pds;
                CHOISIRCOLS(_born; 1);
                CHOISIRCOLS(_born; SI(_colCode = "ECO"; -2; -1));
                "Aucune catégorie correspondante";
                1
            )
        )
    );
    λSEARCH($B2; $C2;"ECO"; Barème!$A$2:$K$31)
)

EDIT : je vous laisse corriger le 25 en 0,25 pour faire marcher la recherche de la première ligne. Sinon entrez directement $B2/1000 dans la formule.
Merci beaucoup !! je vais me pencher dessus 🙂
 
Merci beaucoup !! je vais me pencher dessus 🙂
Pour vous aider à comprendre, j'ai découpé la recherche en 3 étapes :

D'abord avec λFILTEQUIP on va récupérer les lignes de la BDD qui correspondent à la colonne "equipement", en "défusionnant" avec SCAN (le problème évoqué par @sylvanu que je salue).

Ensuite, avec λGETBORNES on va un peu simplifier la table : en fait pour les tranches c'est redondant d'avoir des bornes MIN+MAX pour chaque ligne, il vaut mieux de manière générale avoir une liste soit de bornes MIN, soit MAX. Et donc on va regarder dans cette liste si notre valeur est "entre 2 bornes", auquel cas on récupère la ligne correspondante. Ça evite aussi d'avoir des superpositions de plages. Dans votre cas j'ai pris la colonne des poids MAX (colonne 3), et j'ai remplacé les vides par 1E9. On récupère donc 3 colonnes : PoidsMax | codeEco | valeurIEEE

Enfin, dans λSEARCH on va chercher dans le tableau récupéré le dernier poids "inférieur ou égal" à poidsMax, et récupérer le Eco ou IEE correpsondant.
 
Pour vous aider à comprendre, j'ai découpé la recherche en 3 étapes :

D'abord avec λFILTEQUIP on va récupérer les lignes de la BDD qui correspondent à la colonne "equipement", en "défusionnant" avec SCAN (le problème évoqué par @sylvanu que je salue).

Ensuite, avec λGETBORNES on va un peu simplifier la table : en fait pour les tranches c'est redondant d'avoir des bornes MIN+MAX pour chaque ligne, il vaut mieux de manière générale avoir une liste soit de bornes MIN, soit MAX. Et donc on va regarder dans cette liste si notre valeur est "entre 2 bornes", auquel cas on récupère la ligne correspondante. Ça evite aussi d'avoir des superpositions de plages. Dans votre cas j'ai pris la colonne des poids MAX (colonne 3), et j'ai remplacé les vides par 1E9. On récupère donc 3 colonnes : PoidsMax | codeEco | valeurIEEE

Enfin, dans λSEARCH on va chercher dans le tableau récupéré le dernier poids "inférieur ou égal" à poidsMax, et récupérer le Eco ou IEE correpsondant.
Mon vrai tableau contient plus de colonnes que dans l’exemple que vous avez utilisé.
- Pour la partie 3 (les colonnes à renvoyer), je sais comment adapter la formule.
- Par contre, pour les deux premières parties, je ne sais pas comment ajuster pour que cela corresponde à mon tableau.
Pourriez-vous m’indiquer comment modifier ces parties afin que la formule fonctionne correctement avec mon tableau complet ?
 
Mon vrai tableau contient plus de colonnes que dans l’exemple que vous avez utilisé.
- Pour la partie 3 (les colonnes à renvoyer), je sais comment adapter la formule.
- Par contre, pour les deux premières parties, je ne sais pas comment ajuster pour que cela corresponde à mon tableau.
Pourriez-vous m’indiquer comment modifier ces parties afin que la formule fonctionne correctement avec mon tableau complet ?
Bien sur,
Dans le bloc suivant :
Code:
λFILTEQUIP; LAMBDA(_fullarr;_equip;
        LET(
            _idx; SCAN(
                "";
                CHOISIRCOLS(_fullarr; 2);
                LAMBDA(acc;v; SI(v = ""; PRENDRE(acc; -1); v))
            );
            FILTRE(_fullarr; _idx = _equip; "")
        )
    )
;
Le 2 correspond à la colonne des "équipements" dans le tableau. [JAUNE]
1772105052252.png

Dans le bloc suivant :
Code:
λGETBORNES; LAMBDA(_fullarr;
        LET(
            _tranche; CHOISIRCOLS(_fullarr; 3);
            _return; CHOISIRCOLS(_fullarr; 5; 6; -1);
            FILTRE(SI(_return = ""; 1000000000; _return); _tranche <> "")
        )
    );
Le 3 correspond à la colonne des "tranche de poids" dans le tableau.
Le 5, c'est le plus important car il sert au tri, c'est la colonne "poid max".
Le 6, c'est la colonne des Codes ECO (à renvoyer) [VERT]
Le -1, ça indique la dernière colonne du tableau (qui contenant vos IEEE "eco-contribution") [ROUGE]. Vous pouvez le remplacer par 11, ou le numéro correspondant.
Dans λSEARCH vous n'avez rien à modifier car tant que la colonne verte est à gauche de la colonne rouge, les indices de colonne sont fixes (sinon, inverser le SI).
 
Bien sur,
Dans le bloc suivant :
Code:
λFILTEQUIP; LAMBDA(_fullarr;_equip;
        LET(
            _idx; SCAN(
                "";
                CHOISIRCOLS(_fullarr; 2);
                LAMBDA(acc;v; SI(v = ""; PRENDRE(acc; -1); v))
            );
            FILTRE(_fullarr; _idx = _equip; "")
        )
    )
;
Le 2 correspond à la colonne des "équipements" dans le tableau. [JAUNE]
Regarde la pièce jointe 1228158
Dans le bloc suivant :
Code:
λGETBORNES; LAMBDA(_fullarr;
        LET(
            _tranche; CHOISIRCOLS(_fullarr; 3);
            _return; CHOISIRCOLS(_fullarr; 5; 6; -1);
            FILTRE(SI(_return = ""; 1000000000; _return); _tranche <> "")
        )
    );
Le 3 correspond à la colonne des "tranche de poids" dans le tableau.
Le 5, c'est le plus important car il sert au tri, c'est la colonne "poid max".
Le 6, c'est la colonne des Codes ECO (à renvoyer) [VERT]
Le -1, ça indique la dernière colonne du tableau (qui contenant vos IEEE "eco-contribution") [ROUGE]. Vous pouvez le remplacer par 11, ou le numéro correspondant.
Dans λSEARCH vous n'avez rien à modifier car tant que la colonne verte est à gauche de la colonne rouge, les indices de colonne sont fixes (sinon, inverser le SI).
Merci beaucoup !!! j'ai réussi à intégrer la formule cela marche parfaitement 🙂 dernière petite question, quand je met la formule dans la case rouge, pour que cela affiche le montant, est ce qu'il faut aussi changer des choses à part remplacer "eco" par "dee" ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

N
Réponses
2
Affichages
743
N
H
Réponses
4
Affichages
2 K
Habs57
H
M
Réponses
11
Affichages
1 K
Marguerite2022
M
Retour