Calcul successif de somme par plages...

[Résolu]
Signaler
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006
-
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006
-
Salut à tous,


J'ai un ptit soucis sur vba. Mes données sont sur la colonne A et je souhaite faire la
somme de 5 cellules toutes les 5 cellules, et stocker les résultats sur la colonne B.


J'ai essayé avec le code ci dessous mais ça fonctionne pas, j'ai besoin d'aide svp, merci à tous


---
Sub Macro()


Dim Imax As Integer
Imax = Round(2031 / 5)


Dim Res(0 To 405) As Double 'il y aura 405 résultats, 405 paires de 5 cellules


For i = 0 To 405


Res(i) = WorksheetFunction.Sum(Range("Cells(3 + 5 * i, 2), Cells(3 + 5 * (i + 1), 2"))


Next


End Sub

11 réponses

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
L'indentation pour commencer !!! Pi moi, perso, je ferais comme ça :

Sub Macro()
Dim varResultat As Single 'Ou alors Long selon que tu ai ou non des décimales!

For i = 1 To 5 'Colonne B
varResultat = 0 'Réinitialisation de la variable temporaire
For j = 1 To 5 'ColonneA
varResultat = varResultat + ActiveSheet.Cells((i * 5 - 5) + j, 1).Value
Next j
ActiveSheet.Cells(i, 2).Value = varResultat
Next i
End Sub

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
Note qu'il faut cliquer sur le bouton "Réponse Acceptée" des réponses qui te conviennent !!! C'est important!

C'est simple et compliqué à la fois...
Déjà, il faut utiliser une technique plus "pro".
Il faut déja récupérer la valeur de la cellule puis en extraire le mois. Or, là, tout dépend du format de ta cellule !!! Je vais ici considérer qu'elle est au format texte et non au format date ! A toi ensuite d'adapter selon tes besoins si tu n'utilises pas le format texte!
Ici on suppose également qu'on ne connait pas du tout le nombre de lignes (de toutes les lignes comme des blocs) :


Sub Macro()
Dim varResultat As Single 'Ou alors Long selon que tu ai ou non des décimales!
Dim varDateValue As String 'String puisqu'ici on considère les dates comme étant des chaines!
Dim varOldDateValue As String 'Variable temporaire
'On a besoin de deux niveaux de compteurs :
Dim varCompteur1 As Integer 'Compteur de la colonne A
Dim varCompteur2 As Integer 'Compteur de la colonne B

'Initialisation des variables
varResultat = 0
varCompteur1 = 1
varCompteur2 = 1
varDateValue = ActiveSheet.Cells(varCompteur1,1)
If varDateValue = "" Then Exit Sub
varOldDateValue = funcTraitementDate(varDateValue) 'Appel notre fonction d'extraction du mois

'Routine
Do
'Récupèration de la date
varDateValue = ActiveSheet.Cells(varCompteur1,1)

'Termine le precessus s'il n'y a une cellule vide dans la colonne A

If varDateValue = "" Then Exit Do


'Appele notre fonction d'extraction du mois
varDateValue = funcTraitementDate(varDateValue)



If varDateValue = varOldDateValue Then

varResultat = varResultat + Val(ActiveSheet.Cells(varCompteur1, 2).Value)
Else
varResultat = 0
ActiveSheet.Cells(varCompteur2, 3).Value = varResultat
varCompteur2 = varCompteur2 + 1
End If

varOldDateValue = varDateValue

varCompteur1 = varCompteur1 + 1
Loop

End Sub

Private Function funcTraitementDate(ByVal varDateValue As String)
'C'est là que tu peux modifier la technique d'extraction du mois en fonction
'du type de donnée des cellules. Mais pense à modifier le type des variables également!
funcTraitementDate = Mid$(varDateValue, 4, 2) 'Renvoie un texte de 2 caractères à partir du 4ème
End Function

Bon, j'ai fait ça de tête donc à toi de verrifier et de me dire d'accord

Et n'oublie pas d'accepter la/les réponse/s qui t'a/on convenue/s

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
169
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
7 avril 2008
2
salut,
remplace ta boucle par celle-ci

for i = 3 to 2032 step 5 'se déplace sur la colonne A toutes les 5 cell
Compteur = compteur +1

for j = 1 to 5 'se déplace sur les 5 cellules du groupe
res(compteur-1) = res(compteur-1) + cells(i+j-1,1).value
next j, i

c'est pas ce qu'il y a de mieux ni ce qu'il y a de plus rapide mais ça devrait bien marcher
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

Par exemple, de A1 à A15 il y a les données,
je veux la somme de A1:A5 sur la cell B1, A6:A10 sur la cell B2 et A11:A15 sur la cell B3

qu'est ce qui manque avec cela:
---

Sub Macro()

Dim Res(0 To 3) As Integer


For i = 1 To 15 Step 5
compteur = compteur + 1


For j = 1 To 5
Res(compteur - 1) = Res(compteur - 1) + Cells(i + j - 1, 1).Value
Next j, i


End Sub



Merci pr ton aide
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
Bonjour,

Sub SomColA()
With [B1]
.Formula = "=SUM(INDIRECT(""A"" & ((ROW() - 1)*5)+1 & "":A"" & (ROW()*5)))"
.AutoFill Range("B1:B" & Int((Range("A" & Rows.Count).End(xlUp).Row) / 5))
End With
End Sub

ctac
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
24
C'est en effet l'autre solution!

Mais y'a encore mieux... La solution manuelle!

Bref, on peu décidément tout faire avec le VBA

Enjoy

(Dit CTAC, c'est quoi ta version d'Excel ???)

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

oui pour la solution manuelle, mais quand on a la colonne entière à faire, ça le fait pas


merci bcp à tous pour vos aides
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

oui pour la solution manuelle, mais quand on a la colonne entière à faire, ça le fait pas


merci bcp à tous pour vos aides

je vais tester tout cela
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

Salut à tous,

Ok ScSami, ça marche maintenant... merci encore

Que doit-on rajouter au code, pour qu'il prenne en compte, dans le calcul des sommes, le nombre de semaines. Suivant le mois dans lequel on se base, il faut appliquer une somme de 4 ou 5...


Par exemple ici, pour le mois de Mars on fait la somme de 5 cellules, pour Avril la somme de 4 cellules, pour Mai la somme de 4 cellules, pour Juin la somme de 5 cellules



<COLGROUP>
<COL span=2 width=80>

----

03/03/1997,
6,
----

10/03/1997,
2,
----

17/03/1997,
1,
----

24/03/1997,
8,
----

31/03/1997,
7,
----

07/04/1997,
6,
----

14/04/1997,
5,
----

21/04/1997,
4,
----

28/04/1997,
2,
----

05/05/1997,
1,
----

12/05/1997,
0,
----

19/05/1997,
7,
----

26/05/1997,
2,
----

02/06/1997,
3,
----

09/06/1997,
5,
----

16/06/1997,
6,
----

23/06/1997,
9,
----

30/06/1997,
1

Merci
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

Cool ça marche
Merci ScSami
Messages postés
10
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
3 février 2006

Bonjour,

Je souhaite calculer les rentabilités mensuelles avec une macro [soit (B3-B1)/B1, puis (B5-B4/B4), etc...], la solution manuelle n'est pas envisageable car les colonnes sont remplies. Les données sont comme ceci:

A B C
03/03/1997 6
17/03/1997 1
31/03/1997 7
07/04/1997 6
21/04/1997 4
05/05/1997 1
19/05/1997 7
02/06/1997 3
16/06/1997 6
30/06/1997 1

... ...

Le code suivant peut etre utile, il permet de calculer les moyennes mensuelles:

<OL>
<LI>

Sub Test()


<LI>

Dim i%, k%, Resultat As Single, v


<LI>

Do Until IsDate(Cells(i + 1, 1).Value)


<LI>

i = i + 1


<LI>

Loop


<LI>

Do While IsDate(Cells(i + 1, 1).Value)


<LI>

v = Cells(i + 1, 1).Value


<LI>

Do While Month(v) = Month(Cells(i + 1, 1).Value)


<LI>

Resultat = Resultat + Cells(i + 1, 2).Value


<LI>

i = i + 1


<LI>

k = k + 1


<LI>

Loop


<LI>

Cells(i, 3).Value = Resultat / k


<LI>

Resultat = 0


<LI>

k = 0


<LI>

Loop


<LI>

End Sub

</LI></OL>
Merci à tous