Ajout automatique d'éléments dans une fonction SUM en VBA

Bonsoir à tous,

J'ai une problématique fort peu trivial.

Imaginer que vous ayez une colonne de valeurs sous forme de tableau sur une feuille d'un classeur Excel.

Vous voulez insérer dans une cellule de cette même feuille la somme des valeurs dudit tableau.

Je sais qu'il y a plusieurs solutions, en tout cas j'en connais deux, il me faut la troisième ^^ :

1ère solution :

ActiveCell.FormulaR1C1 = _     "=SUM(R[-7]C[-2],R[-6]C[-2],R[-5]C[-2],R[-4]C[-2],R[-3]C[-2],R[-2]C[-2],R[-1]C[-2],RC[-2],R[1]C[-2],R[2]C[-2],R[3]C[-2],R[4]C[-2],R[5]C[-2])"

2nd solution :

ActiveCell.FormulaR1C1 = "=SUM(R[-10]C[-2]:R[2]C[-2])"

Donc vous l'avez compris je ne recherche ni l'une ni l'autre solution mais un mix entre les deux.

Problématique :

Admettons que la taille du tableau varie, vous connaissez la valeur de la première valeur et de la dernière du tableau, mais dans le temps le nombre de lignes que constitue ce tableau varie donc les lignes varient entre [1 ; X].

Je souhaite trouver un code en VBA qui me permettent d'insérer dans une somme autant de valeurs à sommer qu'il y a de lignes à sommer dans le tableau. C'est à dire une sorte de moulinette qui détermine le nombres de valeur <> 0 dans le tableau et les insère dans la fonction SUM.

Exemple n°1:

Si NbLigneTableauValeur = 5

Alors le résultat du code attendu serait :

ActiveCell.FormulaR1C1 = _     "=SUM(R[-7]C[-2],R[-6]C[-2],R[-5]C[-2],R[-4]C[-2],R[-3]C[-2])"

Exemple n°2 :

Si NbLigneTableauValeur = 3

Alors le résultat du code attendu serait :

ActiveCell.FormulaR1C1 = _     "=SUM(R[-7]C[-2],R[-6]C[-2],R[-5]C[-2])"

=> Dans la fonction SUM, nous avons 3 occurrences de modules RC, séparées par des virgules

En gros ce que je cherche à faire c'est d'élaborer un code VBA pour Excel 2010 permettant de définir automatiquement le nombre d'occurrences dans une formule SUM pour y insérer les coordonnées RC des cellules dont les valeurs sont à sommer.

Savez vous comment faire ca? Je bûche complètement car j'ai besoin de prendre ces éléments à sommer un par un et donc de les séparer, dans les fonction SUM, par des virgules et non pas prendre la première valeur puis la dernière et les séparer seulement par les ":".

En pièce jointe, un petit support de mon fameux tableau

J'espère être compréhensible

Merci d'avance pour vos idées

Bien à vous Valentin

32sommespe.xlsm (19.46 Ko)

Bonjour,

La solution la plus simple adoptée par tous : mettre ta somme par une simple formule au-dessus de tes valeurs.

Sinon :

Sub test()
    nb = Application.CountA([C:C])
    Cells(nb + 1, 3) = Application.Sum([C3].Resize(nb - 2))
End Sub

eric

Bonsoir Eric,

Merci pour ta réponse, je ne connaissais pas cette syntaxe merci !

Par contre ca ne répond pas à mon souci, je dois mal m'exprimer ^^!!

Après une dure journée, j'ai cherché à mieux m'exprimer :

En fait ce que je cherche à faire c'est ca :

- J'ai besoin d'insérer dans une cellule d'une feuille excel une formule de calcul

- Cette formule de calcul doit être la somme de valeurs de cellules dont les coordonnes sont connues

- Ces cellules à sommer appartiennent à la même colonne et ne sont pas forcément les unes en dessous des autres

- La cellule qui recevra la formule de SUM doit être dynamique, c'est à dire que le montant de la somme doit évoluer en temps réel avec l'évolution des valeurs des cellules sommées

Algorithme recherché :

Etape n°1:

Si NbCellulesàSommer = 3

Alors création de 3 slots dans la fonction SUM : Slot(1),, Slot(2), Slot(3)

=> Slot(1), Slot(2) et Slot(3) n'ont pas de valeurs encore : Obj: Conditionner la "forme" de la fonction SUM

=> Le code pourrait ressembler à cela :

ActiveCell.FormulaR1C1 = "=SUM( Slot(1) , Slot(2) , Slot(3) )"

Etape n°2:

Ensuite j'attribue à Slot(1), Slot(2) et Slot(3) les coordonnées des cellules dont je veux sommer les valeurs

=> Le code pourrait ressembler à cela :

For i = 1 to NbCellulesàSommer
      Slot(i) = CoordonnéeValeur(i)
      Next i 

Etape n°3:

Au final on se retrouverai avec une cellule dont la fonction SUM ressemblerait à :

 ActiveCell.FormulaR1C1 = "=SUM( CoordonnéeValeur(1) ,CoordonnéeValeur(2) , CoordonnéeValeur(3) )"

L'objectif final : Les cellules sont dans un tableau dont les lignes peuvent évoluer, et je dois être capable à tout moment de m'adapter et d'obtenir le bon résultat

Je pense que mon besoin réside dans l'élaboration d'une fonction particulière mais je ne sais pas faire :S!

Auriez vous une idée? Merci d'avance

Non, pas plus compréhensible, désolé.

Donne plusieurs exemple sur plusieurs colonnes (et abandonne la notation R1C1 lisible que des aliens pour la notation A1).

Et pourquoi la référence C(-2) du 1er post a disparu ? D'ailleurs il n'y avait rien dans cette colonne sur ton fichier (?)

eric

Edit : sympa de faire chercher pour rien en postant sur d'autres forums sans le dire.

Meilleure façon de faire pour qu'au fil du temps plus personne ne lise tes questions...

Rechercher des sujets similaires à "ajout automatique elements fonction sum vba"