Macro pour cumuler des données variables

[Résolu/Fermé]
Signaler
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
-
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
-
Bonjour,

Je souhaite effectuer une macro pour cumuler les données d'une colonne et afficher le résultat dans une cellule (par exemple E5).

Les données de la colonne à cumuler ne sont pas fixes, par exemple aujorud'hui j'ai 5 lignes à additionner, demain 6, ensuite 7 et ainsi de suite.

Le but étant d'appliquer une macro qui me permet de faire la somme au fur et à mesure, j'aurais juste à appuyer sur un bouton tout les matins^^


Je ne sais pas comment l'écrire mais j'ai un scénario :

J'utiliserai une condition qui dit de faire la somme de toutes les cellules non vide de la colonne X.
Comme une nouvelle donnée viendrait s'ajouter tout les jours, je relancerai la procédure pour qu'elle rajouter la nouvelle données.

Petite précision, je débute en VBA, je commence à comprendre le fonctionnement, les scénarios que l'on peu faire, mais je ne sais pas encore écrire le code.

Merci d'avance.


9 réponses

Messages postés
211
Date d'inscription
vendredi 10 mai 2013
Statut
Membre
Dernière intervention
22 octobre 2016
70
Bonjour,
As-tu réellement besoin d'une macro ? Pourquoi la formule SOMME( ) ne te suffit-elle pas ?
Messages postés
221
Date d'inscription
jeudi 12 août 2010
Statut
Membre
Dernière intervention
5 juillet 2019
28
Pourquoi faire simple quand on peut faire compliqué ? ;-)

si tu utilises la fonction somme(ta colonne), comme l'a dit grincheux, ta somme prendra uniquement les cellules avec des valeurs.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
Car j'incrémente la colonne au fur et à mesure.
Jour J = j'ai 5 lignes de remplies
J+1 = Je rempli la 6e
J+2 = Peut etre 10 lignes de plus.

Je n'ai pas envie de modifier la formule tout les jours, avec 5 lignes c'est simple, mais dans quelques mois je serais à plusieurs milliers.
C'est pour ça que je souhaiterai écrire une macro me permettant de prendre en compte l'ajout de ligne automatiquement lorsque je lance la procédure.

Et comme j'essaye d'apprendre le vba, c'est une bonne occasion de faire manipuler quelque chose simple (encore compliquée pour moi).

PS : Le résultat cumulé ne se situe pas en base de la colonne concernée. Par exemple j'aimerai que le cumul de la colonne A s'affiche sur une cellule en F7.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
J'ai peut être plus simple :

Quand je lance la procédure, elle effectue une boucle sur toutes les cellules non vides de la colonne A.
Ensuite, la procédure effectue la somme de ces cellules.

Le lendemain, je saisie de nouvelles données dans cette colonne, et lorsque je lance la procédure, elle refaire une boucle tout en faisant la somme des cellules non vides et donc devrait prendre en compte les nouvelles données.

Mais je n'ai aucune idée de l'écriture du code.
Messages postés
40
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 mars 2019
8
Salut,

plus simple :

Sub Comptage()
Dim I As Integer
I = Range("A1").End(xlDown).Row
cumul = 0
For k = 2 To I
 cumul = cumul + Cells(k, 1)
Next
Cells(1, 3).Value = cumul
End Sub


Cela cumulera les valeurs de la colonne A. Vu comment le code est écrit, faut que dans A1 il y ait le titre de la colonne par exemple, et les valeurs à partir de A2.
Le résultat sera affiché cellule C1.
Tu peux modifier le code si tu veux changer la colonne à prendre, et la cellule de résultat à sélectionner.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
Merci :)

Est ce que tu pourrais mettre des commentaires sur les lignes de code pour que je puisse bien comprendre chaque partie.
Je te remercie
Messages postés
40
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 mars 2019
8
Salut,

Sub Comptage()
Dim I As Integer
'Définition de I : compte le nombre de celules non vides d'une colonne à partir de A1 compris jusqu'à la dernière ligne non vide comprise
I = Range("A1").End(xlDown).Row
'Initialise ton cumul
cumul = 0
'Boucle qui va permettre d'additionner la valeur de la cellule active avec la somme des cellules précédentes
For k = 2 To I
cumul = cumul + Cells(k, 1)
Next
'Donne la valeur du cumul total à la cellule de la 1ère ligne et de la 3ème colonne (donc C1)
Cells(1, 3).Value = cumul
End Sub
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
cumul = cumul + Cells(k, 1)

La procédure indique une erreur à cette ligne (incompatibilité de type).
Messages postés
40
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 mars 2019
8
Ca marche pour moi. A quoi ressemble ton tableau ?
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021
3 221
Ecam,
Pourquoi as tu recopié le code que t'as fourni gentiment et bénévolement Heikro dans le forum du site du zéro ???

C'est très sympa pour Heikro !
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
Comme je dois la finir pour aujourd'hui j'avais espéré avoir une réponse ce matin en la postant hier soir.
Je n'ai pas relu mon post mais j'ai du le citer normalement.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
Après relecture non, j'ai modifé.
Autant pour moi :(
Messages postés
40
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 mars 2019
8
Et comme le disaient .Grincheux. et rEVOLV3r, tu peux le faire avec la fonction SOMME sans utiliser de macro.
T'écris : =SOMME(A:A) dans la cellule où tu veux ton résultat. Ca fera la somme de toutes les valeurs de ta colonne A.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
Mon tableau n'a rien de special, j'ai juste changé la cellule de resultat et la colonne de cumul.

Pour la formule je devrais la modifier au fur et à mesure que je vais remplir la colonne de cumuls.
Et cette macro est un bon exercice, même si je rame comme pas possible.
Messages postés
40
Date d'inscription
mardi 28 mai 2013
Statut
Membre
Dernière intervention
5 mars 2019
8
La formule fait tout normalement.
Si tu choisis les valeurs dans la colonne C par exemple, en C1 tu marques "Résultats" (par exemple) et en C2 tu commences tes valeurs (donc 45 en C2, 6 en C3 etc....)
Dans la macro tu mets alors : I = Range("C1").End(xlDown).Row au lieu de A1, et tu mets cumul = cumul + Cells(k, 3) au lieu de Cells(k,1).
Si tu veux que le résultat soit cellule F3, tu mets Range("F3")=cumul.
Au final :

Sub Comptagetest()
Dim I As Integer
I = Range("C1").End(xlDown).Row
cumul = 0
For k = 2 To I
 cumul = cumul + Cells(k, 3)
Next
Range("F3") = cumul
End Sub
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
La colonne que je veux cumulée est la H sans prendre en comtpe l'en-tête, le cmul commence en H4.
Je souhaite afficher le résultat en J6 donc (6,10).

J'ai juste modifié ces 2 données.
Messages postés
24183
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
20 septembre 2021
6 888
Bonjour,

avec somme() et decaler() tu dois pouvoir te passer de macro.
Mais sans fichier exemple...

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Messages postés
284
Date d'inscription
jeudi 12 janvier 2012
Statut
Membre
Dernière intervention
18 septembre 2019
9
J'ai trouvé :

Dans la ligne :

For k = 2 To I

K=2 veut dire démarrer le cumul à partir de la ligne 2 et moi je démarre en ligne 4 (en tête en ligne 3), j'ai modifié la valeur et ça fonctionne.

Merci beaucoup pour ton aide :)