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

3 réponses

  1. 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
  2. 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
  3. 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