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

probléme programme VBA

  • Initiateur de la discussion Initiateur de la discussion scott71550@msn.com
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

scott71550@msn.com

Guest
J'ai un probléme avec mon programme VBA pour calculer le Relative Strenght Index en finance, je base ce programme sur le cour des deux derniers mois de toutes les composantes du cac 40. Ca me calcul le RSI sur les 13 premières actions et ensuite ca bloque. Si quelqu'un peu m'aider, je lui en serais trés reconnaissant. Merci d'avance.
Option Explicit

Sub test()
'Nous donnes les variation relatives du cours.'
Dim a, b, z, variation As Variant
z = 3
For b = 2 To 35
For a = z To 50
variation = cells(a, b) - cells(a - 1, b)
cells(a, b + 80) = variation
Next
Next
End Sub
Sub test2()
Dim a, b, varhausse, nbrvarhausse, mhausse, varbaisse, nbrvarbaisse, mbaisse, RS, RSI, z As Variant
z = 3
For b = 2 To 35
For a = 3 To 41
'Nous donnes les variations haussière relatives du cours.
varhausse = Application.SumIf(range(cells(a, b + 80), cells(a + 9, b + 80)), ">0")
'Nous donnes le nombre de variations haussières du cours.
nbrvarhausse = Application.CountIf(range(cells(a, b + 80), cells(a + 9, b + 80)), ">0")
'Nous donnes la moyenne des hausses du cours
mhausse = varhausse / nbrvarhausse
'Nous donnes les variations baissières relatives du cours.
varbaisse = Abs(Application.SumIf(range(cells(a, b + 80), cells(a + 9, b + 80)), "<0"))
'Nous donnes le nombre de variations baissières du cours.
nbrvarbaisse = Application.CountIf(range(cells(a, b + 80), cells(a + 9, b + 80)), "<0")
'Nous donnes la moyenne des moyennes du cours
mbaisse = varbaisse / nbrvarbaisse
RS = mhausse / mbaisse
RSI = 100 - (100 / (1 + RS))
cells(a + 9, b + 35) = RSI
Next
Next
End Sub
 
Re : probléme programme VBA

Bonjour scott71550@msn.com
Vos deux procédures sont fonctionnelles. Le problème doit provenir des données dans la plage B3:AI50.​
ROGER2327
#3469


24 Floréal An CCXVIII
2010-W19-4T22:43:20Z
 
Re : probléme programme VBA

Merci beaucoup! C'était bien un probléme sur mes tables de valeurs, il y a avait une division par 0.
J'aurais juste une autre petite question: Comment je peux faire pour afficher les plages "variations" et RSI dans une autre feuille excel (Pas celle ou j'ai mes cours de bourse). Et ensuite comment je dois faire pour faire reference à ces cellules ?

Merci beaucoup ! je suis un novice.
 
Re : probléme programme VBA

Re...
Pour écrire dans la feuille "MACHIN" au lieu de la feuille active, écrivez

Sheets("MACHIN").Cells(a, b + 80) = variation
au lieu de

Cells(a, b + 80) = variation
.​
ROGER2327
#3475


25 Floréal An CCXVIII
2010-W19-5T13:21:57Z
 
Re : probléme programme VBA

Merci beaucoup !
A chaque réponse une nouvelle question!
Je bloque sur un probléme d'itération!
Je trouve une variation du cours qui me permet de trouver mon RSI et mon RSI me permet de trouver mon cour de bourse. je voudrais que mon cours de bourse me permette de trouver mon nouveau RSI mais je n'arrive pas a faire fonctionner cette boucle.
Je joins mon code :J'ai essayé avec la boucle For l=0 to 10 pour avoir 10 nouveau cours mais ca m'affiche erreur d'execution '9' l'indice n'appartient pas à la selection.

Option Explicit


Sub testvariation()

'Nous donnes les variation relatives du cours.'

Dim a, b, z As String, l As Integer, variation, varhausse, nbrvarhausse, mhausse, varbaisse, nbrvarbaisse, mbaisse, RS, RSI As Single, i As Integer, coursaction, muu, sigma, delta As Double

For l = 0 To 10
For b = 2 To 36

For a = 3 + l To 50 + l

variation = Worksheets("cours").cells(a, b) - Worksheets("cours").cells(a - 1, b)
Debug.Print variation,

Worksheets("calcul intermédiare").cells(a, b - 1) = variation

Next

Next

For i = 1 To 35

cells(1, i) = "variation" & Worksheets("cours").cells(1, i + 1)
range(cells(1, 1), cells(1, 35)).Interior.Color = RGB(79, 128, 189)
range(cells(1, 1), cells(1, 35)).Font.ThemeColor = xlThemeColorDark1

Next

z = 3

For b = 2 To 36

For a = 3 + l To 41 + l

'Nous donnes les variations haussière relatives du cours.

varhausse = Application.SumIf(range(Worksheets("calcul intermédiaire").cells(a, b - 1), Worksheets("calcul intermédiaire").cells(a + 9, b - 1)), ">0")

'Nous donnes le nombre de variations haussières du cours.

nbrvarhausse = Application.CountIf(range(Worksheets("calcul intermédiaire").cells(a, b - 1), Worksheets("calcul intermédiaire").cells(a + 9, b - 1)), ">0")

If nbrvarhausse = 0 Then

nbrvarhausse = 1

End If

'Nous donnes la moyenne des hausses du cours

mhausse = varhausse / nbrvarhausse

'Nous donnes les variations baissières relatives du cours.

varbaisse = Abs(Application.SumIf(range(Worksheets("calcul intermédiaire").cells(a, b - 1), Worksheets("calcul intermédiaire").cells(a + 9, b - 1)), "<0"))


'Nous donnes le nombre de variations baissières du cours.

nbrvarbaisse = Application.CountIf(range(Worksheets("calcul intermédiaire").cells(a, b - 1), Worksheets("calcul intermédiaire").cells(a + 9, b - 1)), "<0")

If nbrvarbaisse = 0 Then

nbrvarbaisse = 1

End If

'Nous donnes la moyenne des moyennes du cours

mbaisse = varbaisse / nbrvarbaisse

If mbaisse = 0 Then

mbaisse = 1

End If

RS = mhausse / mbaisse


RSI = 100 - (100 / (1 + RS))

Worksheets("indicateurs techniques").cells(a + 9, b - 1) = RSI

Next

Next

For i = 1 To 35

cells(1, i) = "RSI" & Worksheets("cours").cells(1, i + 1)
range(cells(1, 1), cells(1, 35)).Interior.Color = RGB(79, 128, 189)
range(cells(1, 1), cells(1, 35)).Font.ThemeColor = xlThemeColorDark1

Next

sigma = 0.5
delta = 0.004

a = 50 + l

For b = 2 To 36

If Worksheets("indicateurs techniques").cells(a, b - 1) < 30 Then
muu = 10
ElseIf Worksheets("indicateurs techniques").cells(a, b - 1) > 50 Then
muu = 10
ElseIf Worksheets("indicateurs techniques").cells(a, b - 1) < 50 Then
muu = -20
ElseIf Worksheets("indicateurs techniques").cells(a, b - 1) > 70 Then
muu = -20

End If

coursaction = Worksheets("cours").cells(a, b) + muu * Worksheets("cours").cells(a, b) * delta + sigma * Worksheets("cours").cells(a, b) * Sqr(delta)

Worksheets("cours").cells(a + 1, b) = coursaction

Debug.Print coursaction,


Next

Next

End Sub

Merci beaucoup, j'ai passé la journée dessus, l'horreur!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
903
Réponses
4
Affichages
278
Réponses
4
Affichages
727
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
292
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
585
Réponses
15
Affichages
769
Réponses
8
Affichages
774
Réponses
2
Affichages
524
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
448
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…