Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA moyenne mobile

kennedyisback

XLDnaute Nouveau
Bonjour,
j'ai actuellement un probléme vba à révolutionner,
Je dois réaliser un histogramme de fréquence puis tester la normalité des titres a l'aide de la méthode qq-plot (droite d'henry)
puisJe dois calculer des moyennes mobiles 20 et 50 des titres pour ensuite afficher les signaux d'achats et de ventes en fonctions du croisement à la hausse et à la baisse de ceux-ci.
Absolument novice en VBA je ne sais comment faire. Pourriez vous m'aidez svp ?
 

kennedyisback

XLDnaute Nouveau
De la colonne A dont vous parlez qui n'est pas censé etre vide .. Je pense que de passer trop de temps sur VBA me grille le cerveau et j'avoue ne plus avoir grand sens de la reflexion/comprehension .. ahah.
Quand aux tutoriels, je n'ai réussi à en trouver aucun qui me permettrait de faire cela. Mais avant de faire le qq plot je dois réussir à calculer les fréquences puis tracer l'histogramme, ce qui est déja trés compliqué pour moi malheureusement ..
 

Staple1600

XLDnaute Barbatruc
Re

=>JFK
Dans ton fichier exemple, sur la feuille STATISTIQUES
Dans la colonne A , il ya des données de A2 à A5, non ?
(donc cette colonne n'est pas vide)
Donc si tu supprimes les formules déjà présentes en colonne G avant de lancer la macro, tu verras que la macro fonctionne.

Au cas où, cette macro modifée fait le job
VB:
Sub Calcule_Rentas_Bis()
Dim DL&
DL = Cells(Rows.Count, 1).End(xlUp).Row
Columns(7).Delete '<- ligne à supprimer aprés le test
With Range("G1")
.Value = "Taux de rentabilité": .Interior.Color = vbGreen: .Font.Bold = -1
End With
Range("G2").Resize(DL - 1) = "=ln((R[1]C2+RC3)/RC2)"
End Sub
 

kennedyisback

XLDnaute Nouveau
@Staple1600 concernant les moyennes mobiles j'ai réussi a coder qqch cependant je n'arrive pas a faire une mise ne forme me permettant de commencer le résultat dans la ligne 1, en effet ceux sont des moyennes mobiles et pour la MM20 par exemple, le résultat débute en ligne 20, ce qui n'est franchement pas pratique, de plus, je dois aller sur chacune des feuilles pour obtenir le résultats souhaité et cela ne se fait pas automatiquement sur chacune des feuilles, sauriez vous m'aider ? (auriez vous une idée aussi pour pouvoir afficher, en fonction du fait qu'il y ai un croisement comment marquer a coté : achat ou vente en fonction de la tendance haussière ou baissière) je vous remercie par avance
 

kennedyisback

XLDnaute Nouveau
Ahahah, je vais traduire ceci par un oui .
Je dois calculer 2 moyennes mobiles une sur 20 jours et l'autres sur 50, j'ai effectué le code ci joint (qui ne me semble pas optimale mais bon .. je ne sais comment faire autrement), j'aimerais effectuer une macro qui me permettrait d'afficher un signal achat ou vente (l'écrire sur la cellule a coté par exemple) en fonction du fait que :
quand MM20 croise à la hausse la MM50, afficher achat et afficher vendre lorsque la MM20 franchi à la baisse la moyenne MM50. ( donc si MM20 date t-1 > MM50 date t-1Et MM50 date t+1 > MM20 date t+1 : vente dans la colonne … Sinon Si MM20 date t-1 < MM50 date t-1 Et MM50 date t+1 < MM20 date t+1 achat. Sauriez vous comment coder ceci a tout hasard ?


VB:
Option Base 1
Public Plage_Rentas As Range
Sub MM()

Dim page As Worksheet

For Each page In ThisWorkbook.Worksheets

If page.Name <> "Statistiques" Then
page.Activate
Call MoyenneM

End If

Next page

End Sub

Sub MoyenneM()

Dim l As Integer, y As Integer
l = 20
y = 50

Dim premier As Integer, dernier As Integer, i As Integer, v As Integer
premier = 3
dernier = Range("B2").End(xlDown).Row

For i = premier To dernier - 20

Dim M20Range As Range
Set M20Range = Range(Cells(i, 2), Cells(i + l - 1, 2))

Cells(i + l - 1, 9) = Application.WorksheetFunction.Average(M20Range)
Next i

For v = premier To dernier - 50

Dim M50Range As Range
Set M50Range = Range(Cells(v, 2), Cells(v + y - 1, 2))

Cells(v + y - 1, 10) = Application.WorksheetFunction.Average(M50Range)

Next v

End Sub
 

Staple1600

XLDnaute Barbatruc
Re

=>JFK
En relisant tout le fil, je me suis apercu que je ne sais toujours si tu avais pu tester avec succés la modification de ta macro que je t'ai proposé dans le message#19

D'où cette question (non dernière ) : Qu'en est-il ?

Sinon pour tester ton dernier code, un petit fichier exemple (beaucoup moins conséquent que le précédent) pourrait ne pas être inutile, non?
PS: Juste le strict nécéssaire
(un cinquantaine de lignes suffiront, et juste le nombre de feuilles nécéssaire au test de Sub MoyenneM())
 
Dernière édition:

kennedyisback

XLDnaute Nouveau
en voici un, tout en sachant que l'original comporte 4 feuilles de titres
Quant à votre code, je n'arrive pas a le faire fonctionner, le "resize" ne fonctionne pas selon Excel ..Encore un immense merci à vous !
 

Pièces jointes

  • Classeur1.xlsm
    27.6 KB · Affichages: 29

kennedyisback

XLDnaute Nouveau
oui tout a fait, et cela pose probléme et étant donné mon niveau, impossible de comprendre pourquoi .. ahah.
A défaut de comprendre vba, Je vais finir par comprendre le terme de "fichier exemple" .. ahah
 

Staple1600

XLDnaute Barbatruc
Re

Je viens de restester sur ton dernier fichier exemple
Et cela fonctionne toujours (comme précédemment)
Donc la macro testée (identique à celle du message#19)
VB:
Sub Calcule_Rentas_Bis()
Dim DL&
DL = Cells(Rows.Count, 1).End(xlUp).Row
Columns(7).Delete '<- ligne à supprimer aprés le test
With Range("G1")
.Value = "Taux de rentabilité": .Interior.Color = vbGreen: .Font.Bold = -1
End With
Range("G2").Resize(DL - 1) = "=ln((R[1]C2+RC3)/RC2)"
End Sub
Pour la tester
1) Tu te places sur la feuille Feuil1
2) Tu lances la macro
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…