Formule de calcul à partir des données de 2 tableaux (matricielle ?)

Bonjour le forum,

Ça me navre de devoir vous déranger pour un problème que j'ai réussi à surmonter par le passé (il y a quelques années) mais je ne me souviens plus de la façon dont je m'y étais pris.

Je vous mets le fichier en pièce jointe, ce sera plus simple qu'un long descriptif fastidieux.

Mon but est de multiplier les tonnages du tableau 1 par le prix du tableau 2 en fonction du mois et du type de produit...

Merci d'avance pour votre aide et encore désolé de vous faire perdre votre temps...

15classeur3.xlsx (13.58 Ko)

Bonjour à tous !

Une proposition en N4 ?

=LET(
t_1;FILTRE(Tableau7;Tableau7[N° opération]=L4);
t_2;FILTRE(Tableau8;Tableau8[Mois]=CHOISIRCOLS(t_1;2));
SOMME(EXCLURE(t_1;;2) * EXCLURE(t_2;;1))
)

Bonjour à tous,

A l'ancienne

=LET(
A; C4*RECHERCHEX(INDEX(Tableau8[Mois];EQUIV(B4;Tableau8[Mois];0));Tableau8[Mois];Tableau8[Produit A];0);
B; D4*RECHERCHEX(INDEX(Tableau8[Mois];EQUIV(B4;Tableau8[Mois];0));Tableau8[Mois];Tableau8[Produit B];0);
C; E4*RECHERCHEX(INDEX(Tableau8[Mois];EQUIV(B4;Tableau8[Mois];0));Tableau8[Mois];Tableau8[Produit C];0);
A+B+C)

Bonjour,

Plus ancien encore (sans LET ni RECHERCHEX mais juste SOMMEPROD, INDEX, EQUIV) :

=SOMMEPROD(Tableau7[@[Produit A]:[Produit C]];INDEX(Tableau8[[Produit A]:[Produit C]];EQUIV(Tableau7[@Mois];Tableau8[Mois];0);0))

A+

Bonjour à tous,

une autre

=SOMME((C4:E4)*DECALER(Tableau8[[#En-têtes];[Mois]];EQUIV(B4;Tableau8[Mois];0);1;1;3))

Crdlmt

Bonjour,

Alors je connaissais la RECHERCHEX, mais jamais (ou très rarement) utilisé...

En revanche, jamais entendu parlé de LET.

C'est bien une formule avec INDEX et EQUIV que j'attendais mais j'ai du mal à comprendre le fonctionnement. Je vais étudier ça pour faire en sorte que ça ne se reproduise pas.

Merci encore à vous

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

(Ne pas oublier d'ajouter les fonctions FILTRE et EXCLURE à vos études....)

Bonsoir à tous !

Une formule unique et dynamique

=LET(
Col;UNIQUE(Tableau7[[N° opération]:[Mois]]);
Lig;Tableau7[#En-têtes];
A;BYROW(B4:B12;LAMBDA(x;INDEX(Tableau8[[Produit A]:[Produit C]];EQUIV(x;Tableau8[Mois];0);1)));
B;BYROW(B4:B12;LAMBDA(x;INDEX(Tableau8[[Produit A]:[Produit C]];EQUIV(x;Tableau8[Mois];0);2)));
C;BYROW(B4:B12;LAMBDA(x;INDEX(Tableau8[[Produit A]:[Produit C]];EQUIV(x;Tableau8[Mois];0);3)));
ASSEMB.V(Lig;ASSEMB.H(Col;(ASSEMB.H(A;B;C)*Tableau7[[Produit A]:[Produit C]]))))

J'avoue, ce n'est pas ce que je voulais proposer... ! Mais cela m'emmène à demander aussi de l'aide pour réduire mes 3 BYROW.

Une idée ?

Attention : La formule proposée ne produit pas le résultat attendu par le demandeur.

12classeur3.xlsx (27.38 Ko)

Bonjour à tous !

@JB_ : Hello !

Une approche possible :

=LET(
    _t7; Tableau7;
    _t8; Tableau8;
    m; CHOISIRCOLS(_t7; 2);
    MAKEARRAY(
        LIGNES(m);
        COLONNES(_t8) - 1;
        LAMBDA(l; c;
            LET(
                lig; EQUIVX(INDEX(m; l); CHOISIRCOLS(_t8; 1); 0);
                INDEX(_t8; lig; c + 1) * INDEX(_t7; l; c + 2)
            )
        )
    )
)

Bonjour à tous,

Bonjour à tous !

@JB_ : Hello !

Une approche possible :

Et avec map(), ce n'est pas possible ?

Bonjour à tous !

Et avec map(), ce n'est pas possible ?

L'usage de la fonction ne me semble pas dynamique (quid d'un "Produit D" ajouté ?)
La fonction BYROW se traduisait par une erreur (souci de plage dynamique).

Cela étant, vos essais sont peut-être concluants ?

Bonjour à tous ,

Magnifique JFL !

Je n'ai pas réussi avec MAP...

Une bonne nuit de sommeil m'a permis de trouver cela, et dynamique cette fois-ci

=LET(
      PU;EXCLURE(Tableau8;;1);
      M;Tableau8[Mois];
      P;EXCLURE(Tableau8[#En-têtes];;1);
      ListMois;CHOISIRCOLS(Tableau7;2);
      Qté;EXCLURE(Tableau7;;2);
      MatricePU;INDEX(PU;EQUIVX(ListMois;M);EQUIVX(P;P));
          MatricePU*Qté
)

Et pour Tranbi, voici une formule unique et dynamique qui retourne le résultat voulu, adaptée depuis ma première propo :

=LET(
      PU;EXCLURE(Tableau8;;1);
      M;Tableau8[Mois];
      P;EXCLURE(Tableau8[#En-têtes];;1);
      ListMois;CHOISIRCOLS(Tableau7;2);
      Qté;EXCLURE(Tableau7;;2);
      NumOpération;CHOISIRCOLS(Tableau7; 1);
      MatricePU;INDEX(PU;EQUIVX(ListMois;M);EQUIVX(P;P));
          ASSEMB.H(NumOpération;BYROW(MatricePU*Qté;SOMME))
)
image

Rechercher des sujets similaires à "formule calcul partir donnees tableaux matricielle"