Macro pour cumuler des données variables

Résolu/Fermé
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 - 4 juin 2013 à 09:07
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 - 5 juin 2013 à 10:02
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.


A voir également:

9 réponses

.Grincheux. Messages postés 211 Date d'inscription vendredi 10 mai 2013 Statut Membre Dernière intervention 22 octobre 2016 84
4 juin 2013 à 10:08
Bonjour,
As-tu réellement besoin d'une macro ? Pourquoi la formule SOMME( ) ne te suffit-elle pas ?
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
4 juin 2013 à 10:16
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 12:12
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 14:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Heikro Messages postés 40 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 5 mars 2019 8
4 juin 2013 à 16:11
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 16:17
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
0
Heikro Messages postés 40 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 5 mars 2019 8
Modifié par Heikro le 4/06/2013 à 16:25
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
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 16:39
cumul = cumul + Cells(k, 1)

La procédure indique une erreur à cette ligne (incompatibilité de type).
0
Heikro Messages postés 40 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 5 mars 2019 8
4 juin 2013 à 16:47
Ca marche pour moi. A quoi ressemble ton tableau ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 juin 2013 à 09:26
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 !
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
5 juin 2013 à 09:47
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
5 juin 2013 à 09:49
Après relecture non, j'ai modifé.
Autant pour moi :(
0
Heikro Messages postés 40 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 5 mars 2019 8
Modifié par Heikro le 4/06/2013 à 16:39
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 16:50
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.
0
Heikro Messages postés 40 Date d'inscription mardi 28 mai 2013 Statut Membre Dernière intervention 5 mars 2019 8
4 juin 2013 à 17:00
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
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
4 juin 2013 à 17:00
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.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 5/06/2013 à 09:46
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.
0
Ecam39 Messages postés 286 Date d'inscription jeudi 12 janvier 2012 Statut Membre Dernière intervention 16 mars 2024 9
5 juin 2013 à 10:02
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 :)
0