Somme matricielle

Gael

XLDnaute Barbatruc
Bonjour à tous,

Je n'arrive pas à finaliser une formule de calcul qui doit faire la somme des résultats d'une matrice de valeurs.

Après avoir tourné en rond pendant quelques heures, je me permet de solliciter votre aide à partir de l'exemple joint avec les explications nécessaires.

Je suis également ouvert à une fonction VBA si cela s'avère plus pratique.

Merci d'avance pour votre aide.

@+

Gael [file name=calcul_20060227194749.zip size=17229]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/calcul_20060227194749.zip[/file]
 

Pièces jointes

  • calcul_20060227194749.zip
    16.8 KB · Affichages: 36

Gael

XLDnaute Barbatruc
Bonjour Monique,

Merci beaucoup pour ta réponse, ça marche nickel.

J'ai donc adapté cette formule sur mon tableau pour 2 valeurs qui fonctionnent sur le même principe.

Il y a maintenant une troisième valeur calculée en fonction des 2 premières mais pour certains codes seulement et là, je n'arrive pas non plus à adapter la formule pour y intégrer cette condition.

Je joins un exemple modifié avec tous les résultats produit par produit et les explications nécessaires.

Merci de ton aide.

@+

Gael [file name=calcul_V1.zip size=17768]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/calcul_V1.zip[/file]
 

Pièces jointes

  • calcul_V1.zip
    17.4 KB · Affichages: 35

Gael

XLDnaute Barbatruc
Rebonjour,

Une solution simple consiste à rajouter une colonne dans la feuille article avec 1 pour les articles listés et 0 sinon.

La formule devient:

=SOMMEPROD(SOMME.SI(Code;Codart;Qte)*(ES-MG)*EDSL)/100

et le résultat est correct.

@+

Gael
 

Gael

XLDnaute Barbatruc
Bonjour Monique, Bonjour à tous,

Finalement, il suffisait de multiplier le résultat par la matrice 0/1 des codes articles spécifiques ce qui supprime la colonne supplémentaire. La formule devient donc:

=SOMMEPROD((SOMME.SI(Code;Codart;Qte)*(ES-MG)/100)*((Codart='A0000')+(Codart='A0500')+(Codart='A0600')+(Codart='A0950')))

Monique, un grand merci en tous cas pour m'avoir mis sur la voie et je conserve cette association Sommeprod/somme.si que je n'avais jamais essayé.

@+

Gael
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Mieux vaut tard que jamais,
tu peux placer tes codes A0000, A0500, A0600 etc dans une plage nommée 'Choix'
=SOMMEPROD((SOMME.SI(Code;Codart;Qte))*NB.SI(Choix;Codart)*(ES-MG))/100

=SOMMEPROD((SOMME.SI(Code;Codart;Qte))*(Codart=TRANSPOSE(Choix))*(ES-MG))/100

La 2ème est à valider en matriciel

J'avais bien essayer de mettre un Somme.Si et un Nb.Si dans une seule formule,
plus un Transpose par ci par là,
mais ça n'avait jamais voulu marcher
 

Gael

XLDnaute Barbatruc
Bonjour Monique,

Il n'est jamais trop tard et c'est sympa d'avoir encore pensé à moi.

Comme je n'avais qu'une seule formule à écrire, je voulais éviter de créer une plage de codes.

J'avais essayé avec NB.SI mais cette fonction n'accepte pas de matrice de constantes; par contre ta deuxième formule est très intéressante car Sommeprod accepte la matrice de constantes et ta formule peut s'écrire:

=SOMMEPROD((SOMME.SI(Code;Codart;Qte))*(Codart={'A0000'.'A0500'.'A0600'.'A0950'})*(ES-MG))/100

Les constantes sont séparées par des '.' pour éviter le TRANSPOSE (d'ailleurs, si la plage 'Choix' de ton exemple est en ligne et pas en colonne, on peut aussi supprimer le Transpose).

Maintenant c'est parfait, j'ai encore beaucoup de choses à faire sur l'appli mais cette partie fonctionne très bien.

Encore merci pour ton aide.

@+

Gael

Message édité par: Gael, à: 03/03/2006 13:49
 

Discussions similaires

Statistiques des forums

Discussions
312 307
Messages
2 087 096
Membres
103 468
dernier inscrit
TRINITY