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
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
A voir également:
- Macro pour cumuler des données variables
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel validation des données liste - Guide
- Trier des données excel - Guide
- Reinstaller windows sans perte de données - Guide
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
4 juin 2013 à 10:08
Bonjour,
As-tu réellement besoin d'une macro ? Pourquoi la formule SOMME( ) ne te suffit-elle pas ?
As-tu réellement besoin d'une macro ? Pourquoi la formule SOMME( ) ne te suffit-elle pas ?
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
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.
si tu utilises la fonction somme(ta colonne), comme l'a dit grincheux, ta somme prendra uniquement les cellules avec des valeurs.
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
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.
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.
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
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.
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.
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
4 juin 2013 à 16:11
Salut,
plus simple :
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.
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.
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
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
Est ce que tu pourrais mettre des commentaires sur les lignes de code pour que je puisse bien comprendre chaque partie.
Je te remercie
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
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
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
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
4 juin 2013 à 16:39
cumul = cumul + Cells(k, 1)
La procédure indique une erreur à cette ligne (incompatibilité de type).
La procédure indique une erreur à cette ligne (incompatibilité de type).
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
4 juin 2013 à 16:47
Ca marche pour moi. A quoi ressemble ton tableau ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
5 juin 2013 à 09:26
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 !
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 !
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
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.
Je n'ai pas relu mon post mais j'ai du le citer normalement.
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
5 juin 2013 à 09:49
Après relecture non, j'ai modifé.
Autant pour moi :(
Autant pour moi :(
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
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.
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.
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
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.
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.
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
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 :
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
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
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.
Je souhaite afficher le résultat en J6 donc (6,10).
J'ai juste modifié ces 2 données.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 5/06/2013 à 09:46
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.
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.
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
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 :)
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 :)