Aide pour la création d'une fonction - moyenne mobile exponentielle

AntoDG Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012 - 12 juin 2012 à 16:18
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 15 juin 2012 à 16:45
Bonjour,

Je suis nouveau sur ce forum. Je débute en programmation VBA et dans le cadre d'une étude empirique, j'aurai besoin de réaliser des moyennes mobiles exponentielles sur des séries de cotations d'indices marchés.

J'ai pu récupérer une fraction de code pour le calcul de cette "MME".
-------------------------------------------
Option Explicit
Private Sub Form_Load()
'Exemple d'application pratique
Dim Cours(6), Njours
Cours(1) = 1525
Cours(2) = 1460
Cours(3) = 1256
Cours(4) = 1246
Cours(5) = 1196
Cours(6) = 1254
Njours = 6
Debug.Print Moyenne_Mobile_Exponentielle(Cours(), Njours)
End
End Sub
Public Function Moyenne_Mobile_Exponentielle(TDD(), Njours)
Dim Alpha As Double, Beta As Double, I As Long, VMME As Double, NDC As Long
Dim FormatChiffre As String

'Vérifie le nombre de chiffre dans le nombre

NDC = 1

For I = 1 To Njours
If Len(Str(TDD(I))) > NDC Then
FormatChiffre = String(Len(Str(TDD(I))), "#")
NDC = Len(Str(TDD(I)))
End If
Next

Alpha = CDbl(Format(2 / Njours, "#.##"))
Beta = CDbl(Format(1 - Alpha, "#.##"))
VMME = CDbl(Format((TDD(1) * Beta) + (TDD(2) * Alpha), FormatChiffre))

For I = 3 To Njours
'Debug VMME
VMME = CDbl(Format(VMME * Beta + (TDD(I) * Alpha), FormatChiffre))
'Debug VMME
Next

Moyenne_Mobile_Exponentielle = VMME
End Function


-------------------------------------

Il me manque cependant des éléments pour finaliser cette fonction.

1) j'aimerai pouvoir sélectionner une plage de données (exemple de D4 à D24)
----> Il faudrait donc déclarer une plage de cellule variable à la place de Cours(1), Cours(2) ...

2)qu'il me calcule le nombre de jours de cotation sélectionné et qu'il m'en fasse la moyenne mobile exponentielle.


Je vous remercie d'avance

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 juin 2012 à 16:32
Bonjour,
Ouvre ton aide VBA sur :
Application.Inputbox
intéresse-toi à son type 8 .
Reviens après cette lecture si encore en difficulté


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
AntoDG Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
15 juin 2012 à 09:49
Application.Intputbox semble permettre de saisir dans une fenêtre de dialogue les données. Or dans mon cas, je souhaiterais sélectionner à travers une fonction VBA une plage de données d'une dimension (une série de cotations).

J'aurai plutôt imaginer une manière comme celle-ci (simple hypothèse);

Au moment de déclarer les variables de la fonction, déclarer un tableau de taille variable qu'il faut redimensionné en une colonne et X lignes.

Si vous avez des idées pour cela...

Merci d'avance
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2012 à 10:30
Expose plus clairement et plus précisément ton problème, en précisant ce qui doit être en dur dans ton code et ce qui doit être éventuellement décidé par l'utilisateur, s'il te plait.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
AntoDG Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
15 juin 2012 à 12:14
Je souhaite une fonction VBA avec comme seul input la plage de cellule qui je sélectionnerai

Ce qui donnerait sous excel : =Moyenne_mobile_exponentielle(D1:D20) par exemple

La formule que j'ai présenté plus haut reprend cette logique. Néanmoins, les valeurs de cours sont en dur, or, je souhaiterais que cette série de cours soit une plage de cellule variable sous excel.

Merci d'avance
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2012 à 13:19
Je souhaite une fonction VBA avec comme seul input la plage de cellule qui je sélectionnerai

input veut dire choix laissé à l'utilisateur
et dans ce cas, tu as eu ta réponse : mon message du mardi 12 juin 2012 à 16:32:20


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
AntoDG Messages postés 4 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 15 juin 2012
15 juin 2012 à 14:48
mais ton argument application.inputbox renvoi à une boite de dialogue ...

En fait je veux déclarer ma plage de cellule comme argument de ma fonction sous la forme de:

Public Function Moyenne_Mobile_Exponentielle(TDD() as range)

je déclare le nombre de données composant ma série

Dim Njours as long
Njours = count(TDD(i))

et du coup tout s'enchaine...



For I = 1 To Njours
If Len(Str(TDD(I))) > NDC Then
FormatChiffre = String(Len(Str(TDD(I))), "#")
NDC = Len(Str(TDD(I)))
End If
Next

Alpha = CDbl(Format(2 / Njours, "#.##"))
Beta = CDbl(Format(1 - Alpha, "#.##"))
VMME = CDbl(Format((TDD(1) * Beta) + (TDD(2) * Alpha), FormatChiffre))

For I = 3 To Njours
'Debug VMME
VMME = CDbl(Format(VMME * Beta + (TDD(I) * Alpha), FormatChiffre))
'Debug VMME
Next

Moyenne_Mobile_Exponentielle = VMME
End Function




Mais ca ne marche pas ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 juin 2012 à 16:45
Ecoute :
1) nous n'avons pas la même définition de ce qu'est un Input.
2) TDD() ne saurait définir un Range
3) Comment est sélectionnée la plage TDD ?. si c'est l'utilisateur qui l'a choisit, c'est elle, l'"Input" (et je t'ai dit plus haut comment le lui permettre. Si ce n'est pas lui, ce n'est plus un "input" et comment est-elle alors définie ?
4) Un tableau dynamique peut toujours être généré par une plage. Ainsi (exemple) :
tablo = Range("A1:A24")
tablo sera ainsi un tableau à 2 dimensions et (par exemple) : tablo(3,1) contiendra la valeur de la cellule A3

Voilà. Je pense que tu as maintenant tous les ingrédients qui te sont nécessaires pour travailler.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous