Bonjour,
Juste pour le fun, la même chose en une seule formule (en B11), sans passer par les tableaux intermédiaires.
=byrow(tocol(composants;1;3);lambda(a;iferror(query(sort(query({{query(composants;"select * where Col1 is not null and Col1 matches 'Cable.*|Gaine.*' ")\tocol(arrayformula(ifna(if(byrow(composants;lambda(l;query(l;"select * where Col1 matches 'Cable.*|Gaine.*' ")<>""));BYCOL(composants;(lambda(l;byrow(l;lambda(p;sum(BYCOL(transpose(type_harnais);lambda(n;iferror(query(transpose(query(bom_harnais;"select * where Col1 = '"&n&"' "));"select Col2 where Col1 = '"&p&"' Label Col2''"))*sum(query({type_harnais\bycol(longueur;lambda(n;iferror(query(quantité_harnais1;"select Col"&MATCH(n;longueur;0)&"*"&n&" label Col"&MATCH(n;longueur;0)&"*"&n&" '' ";0))))};"select * where Col1 contains '"&n&"' ";0)))))))))))));1;3)};{query(composants;"select * where A is not null and not A matches 'Cable.*|Gaine.*' ")\byrow(query(composants;" select * where Col1 is not null and not Col1 matches 'Cable.*|Gaine.*' ");lambda(p;sum(BYCOL(transpose(type_harnais);lambda(n;iferror(query(transpose(query(bom_harnais;"select * where Col1 = '"&n&"' "));"select Col2 where not Col1 matches 'Cable.*|Gaine.*' and Col1 = '"&p&"' Label Col2''";0))*sum(query(quantité_harnais2;"select * where Col1 contains '"&n&"' ";0)))))))}};"select * where Col1 is not null "));"select Col2 where Col1 = '"&a&"' ";0);0)))
Les plages sont facilement modifiables avec les "Plages nommées".
https://docs.google.com/spreadsheets/d/1i3QL206jsxUBnvpaCF1-ufs39X7_kpMpe5836lQs_wI/edit?usp=sharing
Comme la formule est gourmande en ressources, il y a un petit temps de latence avant l'affichage du résultat...
Cordialement,
Fil.