Somme d'une colonne jusqu'a cellule test

RussellD Messages postés 60 Statut Membre -  
dct33 Messages postés 42 Statut Membre -
Bonjour à tous,

je voulais savoir comment faire sous VBA pour qu'une cellule :
- fasse la somme de toutes les cellules situées en-dessous d'elle dans la même colonne
- que cette somme s'arrète des lors que la colonne possède une cellule grise

Merci d'avance pour vos réponses
A voir également:

3 réponses

dct33 Messages postés 42 Statut Membre 39
 
Bonsoir,

' pour faire cela il faut définir un gris car une couleur une valeur
' pour connaitre la valeur en fonction de la couleur faire une macro et aller la lire
'et récupérer la valeur pour moi c'était 15

'dans l'exemple j'ai mis les valeurs colonne1 à partir de la ligne 2 et je fais le total 'ligne 1

Sub calcul()
X = 2
Total = 0
While Cells(X, 1).Interior.ColorIndex <> 15
Total = Total + Cells(X, 1)

X = X + 1
Wend

Cells(1, 1) = Total

end sub

'si par contre s'il faut trouver la première cellule colorée

Sub calcul()
X = 2
Total = 0
While Cells(X, 1).Interior.ColorIndex = XlNone
Total = Total + Cells(X, 1)

X = X + 1
Wend

Cells(1, 1) = Total

end sub

'Bonne programmation
0
RussellD Messages postés 60 Statut Membre 7
 
Merci dct33, cela fonctionne tres bien.

J'ai une autre question ; dans ton cas, la macro est faite en sachant que la cellule "Total" sera en A1. Mais imaginons que l'on ne sache pas à l'avance la ligne de cette cellule (la colonne si par contre).
Comment peut-on modifier ta macro pour la rendre utilisable pour n'importequelle cellule de la colonne 1.
J'ai essayer d'utiliser une formulation RC, avec quelquechose comme R[-i]C en implémentant sur i, mais je n'ai pas réussi à faire fonctionner ça correctement...

Cordialement
0
dct33 Messages postés 42 Statut Membre 39
 
Bonjour,

Si tu connais la colonne mais pas la ligne où se trouve ta première donnée alors

tu fais un while à partir de la ligne 1 et tu descends tes lignes tant que tu as des cellules vides

Sub calcul()

Colonne = 1

X = 1
While UCase(cells(X, Colonne)) <> ""
X = X + 1
wend
PosTotal = X - 1

Total = 0
While Cells(X, 1).Interior.ColorIndex = XlNone
Total = Total + Cells(X, 1)

X = X + 1
Wend

Cells(PosTotal , Colonne ) = Total

end sub

La boucle while est exécutée tant que la condition est remplie
dans l'exemple je me balade de ligne en ligne en recherchant soit un mot soit une couleur
Attention quand on fait une while il faut être sur que la condition soit remplie un jour
si non plantage
dans l'exemple si je n'incrémente pas X dans mes boucles la condition est toujours vrai donc on ne peut pas sortir de la boucle

Bonne programmation
0