Calcul successif de somme par plages...

Résolu
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006 - 19 janv. 2006 à 15:04
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006 - 1 févr. 2006 à 21:53
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

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
19 janv. 2006 à 17:50
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
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
24 janv. 2006 à 03:55
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
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
19 janv. 2006 à 16:22
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
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
19 janv. 2006 à 16:59
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
0

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

Posez votre question
CTAC Messages postés 133 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 8 juin 2012 5
19 janv. 2006 à 18:21
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
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
19 janv. 2006 à 21:02
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". )
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
19 janv. 2006 à 22:00
oui pour la solution manuelle, mais quand on a la colonne entière à faire, ça le fait pas


merci bcp à tous pour vos aides
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
19 janv. 2006 à 22:00
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
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
23 janv. 2006 à 23:21
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
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
25 janv. 2006 à 23:10
Cool ça marche
Merci ScSami
0
vbaright Messages postés 10 Date d'inscription jeudi 19 janvier 2006 Statut Membre Dernière intervention 3 février 2006
1 févr. 2006 à 21:53
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
0
Rejoignez-nous