cs_nico39
Messages postés56Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention 4 octobre 2006
-
4 mars 2005 à 16:29
cqui789
Messages postés261Date d'inscriptionjeudi 13 janvier 2005StatutMembreDernière intervention18 mai 2009
-
9 mars 2005 à 21:07
Bonjour à tous,
j'ai une série de données (1 colonne) aux valeurs assez chaotiques à analyser et je voudrais en connaître les tendances. Je sais qu'Excel peut afficher des courbes de tendances sur des graphiques, et notamment une "moyenne mobile". Je voudrais alors savoir s'il est possible d'appliquer cette moyenne mobile sur ma série de données, mais en récupérant les valeurs calculées par Excel..
A défaut, serait-il possible de programmer une macro " moyenne mobile" sur une série de données sans utiliser un graphique?
J'espère que mes explications sont assez claires.
Je vous remercie d'avance pour toute l'aide que vous pourrez m'apporter.
cs_nico39
Messages postés56Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention 4 octobre 2006 8 mars 2005 à 12:38
Salut cqui789,
Merci de ta réponse.
La formule à appliquer est assez simple: il suffit de faire une moyenne toute bête sur une nombre déterminé de cellules, et ce, en se décalant d'une cellule après l'autre.
Je m'explique:
soit une série de données A1:A40
Dans la colonne B, je vais en faire une moyenne mobile toutes les 10 valeurs.
Ainsi en B9 ira la moyenne de A1:A9 (càd les 10 1ères valeurs), en B10 ira celle de A2:A10, et ainsi de suite.
J'espère que cela est plus clair.
Je viens en fait de parvenir à un code qui marche plutôt bien.
Dans le cas que je te'ai présenté plus haut, cela donne:
sub moy_mobil()
periode=10 'nombre de valeurs dont on fait la moyenne
Set Cellule = Cells(periode - 1 , 2)
Do Until IsEmpty(Cellule.Offset(1 - periode, -1)) = True
'Définition de la plage de valeurs étudiée à chaque fois
Set debut_Periode = Cellule.Offset(1 - periode, -1)
Set fin_Periode = Cellule.Offset(0, -1)
Set Plage = Range(debut_Periode, fin_Periode)
'Calcul de la valeur de la moyenne
moy = WorksheetFunction.Average(Plage)
Cellule.Value = moy
'Mouvement de la cellule cible de la moyenne
Set Cellule = Cellule.Offset(1)
Loop
End Sub
Voilà, j'espère que ce code tient la route et qu'il pourra profiter à d'autres. Bien sûr, les paramètres tels que "periode" et "Cellule" varieront selon la configuration rencontrée ou souhaitée.
cqui789
Messages postés261Date d'inscriptionjeudi 13 janvier 2005StatutMembreDernière intervention18 mai 20093 8 mars 2005 à 16:10
Et si tu remplacait:
Set debut_Periode = Cellule.Offset(1 - periode, -1)
Set fin_Periode = Cellule.Offset(0, -1)
Set Plage = Range(debut_Periode, fin_Periode)
'Calcul de la valeur de la moyenne
moy = WorksheetFunction.Average(Plage)
Cellule.Value = moy
'Mouvement de la cellule cible de la moyenne
Set Cellule = Cellule.Offset(1)
par:
cellule.FormulaR1C1 = "=AVERAGE(R[" & 1 - periode & "]C[-1]:RC[-1])"
si tu modifie les valeurs les moyennes se mettent a jour
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_nico39
Messages postés56Date d'inscriptionvendredi 4 mars 2005StatutMembreDernière intervention 4 octobre 2006 9 mars 2005 à 09:32
Salut cqui789,
Merci pour cette astuce. Mon code est un peu plus léger.
Je voulais savoir si toi ou des gens du forum connaissiez bien tout ce qui est formulaire. En effet je voudrais bien faire apparaître un formulaire durant l'exécution de ma précédente macro pour demander à l'utilisateur une valeur pour la période (cf plus haut).
Seulement, je ne sais pas comment récupérer les valeurs recueillies dans un tel formulaire (dans une Textbox p.e.).