OVH Cloud OVH Cloud

[Q avancee] Sum/Offset un peu particulier

3 réponses
Avatar
Charles
Bonjour,

j'ai un probleme un peu complexe a resoudre. Je pense m'en tirer en
creant une fonction VBA mais peut etre quelqu'un sur ce forum a une
solution lumineuse.

J'ai deux colonnes

A B
-----------
115 | 9
101 | 8
203 | 7
210 | 6
etc.

et je cherche a creer une troisieme colonne C definie comme telle:
C
-----------------------
115*9
115*8+101*9
115*7+101*8+203*9
115*6+101*7+203*8+210*9
etc.

Le probleme c'est qu'en pratique la colonne B n'est pas 9,8,7,6 mais un
peu plus complexe, et que je n'ai pas besoin de le faire pour 4 lignes
mais pour plus d'une centaine.

En gros dans la colonne C, pour la i-eme ligne, on prend la liste de
A1:A(i-1) dont chaque element a la ligne j est multiplie par l'element
de la colonne B decalle de j.

C'est un peu complexe, mais j'espere avoir ete suffisament clair. Je ne
peux pas faire une formule basique: je ne peux pas mettre 100 additions
dans une seule formule Excel. J'imagine donc faire une formule en VBA
que je nourris de Range(A) et Range(B) et qui me retourne le bon
nombre.

Quelqu'un a-t-il une solution plus intelligente a ce probleme?

Je vous remercie d'avance
Charles

3 réponses

Avatar
Charles
Pour information j'ai resolu le probleme en VBA, mais si quelqu'un a
une solution Excel, je suis preneur:

Public Function CX_TO_C123(A As Range, B As Range) As Double
Dim nbrow, i As Integer
nbrow = A.Rows.Count
Dim temptotal As Double
temptotal = 0
For i = 1 To nbrow
temptotal = temptotal + A.Rows(i).Value * B.Rows(nbrow + 1 -
i).Value
Next i
CX_TO_C123 = temptotal
End Function
Avatar
SL
Bonjour

Avec une formule.
Attention j'ai changé l'ordre de la colonne B
A B
-----------
115 | 6
101 | 7
203 | 8
210 | 9

en C1:Cx :
=SOMMEPROD($A$1:A1;DECALER($B$1;NB(B:B)-LIGNES($A$1:A1);;LIGNES($A$1:A1);))

ça marche ?

Stéphane

"Charles" a écrit dans le message de news:

Pour information j'ai resolu le probleme en VBA, mais si quelqu'un a
une solution Excel, je suis preneur:

Public Function CX_TO_C123(A As Range, B As Range) As Double
Dim nbrow, i As Integer
nbrow = A.Rows.Count
Dim temptotal As Double
temptotal = 0
For i = 1 To nbrow
temptotal = temptotal + A.Rows(i).Value * B.Rows(nbrow + 1 -
i).Value
Next i
CX_TO_C123 = temptotal
End Function



Avatar
Charles
Bonjour,

je vous remercie pour votre aide. Effectivement cela devrait marcher
mais il m'est impossible d'inverser l'ordre de la colonne (la colonne
en question est le resultat d'un long calcul et est aussi utilise pour
d'autre calculs. Ajoute a cela, le nombre de lignes dans ce tableau
doit etre variable et peut etre augmente. En somme je suis coince en ce
qui concerne les donnees du probleme.

Charles