Récupérer la variable tableau dans une feuille

  • Auteur de la discussion Zoubir
  • Date de début

Zoubir

Nouveau membre
Bonjour,

J'ai passé pas mal de temps à essayer de comprendre ce qui cloche dans mon programme, mais ne trouvant je me résigne à demander de l'aide à des internautes sympas qui auraient un peu de temps à y consacrer.

L'objectif de ce pg tout simple est de calculer les intérêts cumulés.
p.e : Montant de 1000 euros placé à un taux d'intérêt de 5% pendant 3 ans, cela rapporte...
Il s'agit d'un taux continu, la formule est donc = Montant*Exp(r*T)

Pour corser, un peux le problème je considère que le taux varie en fonction d'un paramètre aléatoire (calculé par : NormSInv(Rnd)). Je découpe l'évolution de cette variable afin qu'elle ne soit pas continue mais discrète selon un certain nombre de période. (Principe de Montecarlo)

Un essai = un tirage (composé d'une succession de points de durée égale à "dt" tel que : dt = T / NbPeriode)

Je lance donc "NbEssai" chacun composé de "NbPeriode"... et la moyenne de la dernière période de tous ces essaias me donne le résultat final.

Mon résultat par la fonction : Interets_R1 -> Ok, elle fonctionne.

Function Interets_R1(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R1 = WorksheetFunction.Average(Total)
End Function

Par contre, je ne comprends par pourquoi je n'arrive pas à la modifier des deux façons suivantes :
A/ Je souhaite récupérer tous les résultats intermédiaires : :??:
La différence est en rouge en dessous (Worksheets("Solution") : existe bien dans mon classeur).
Auparavant, j'avais réalisé une récupération de varaible tableau par procédure et cela fonctionnait très bien ?!?!

Function Interets_R3(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R3 = WorksheetFunction.Average(Total)
Worksheets("Solution").Activate
For i = 1 To NbEssai
For j = 1 To NbPeriode + 1
Cells(i, j).Value = Tableau_Essais(i, j)
Next j
Next i

End Function

B/ Je souhaitais simplifier le code en enlevant une variable : :??:
J'ai enlevé cette variable, mais cela ne fonctionne pas "ReDim Total(NbEssai) As Double"
Je voulais récupérer le résultat de la fonction tel qu'indiqué ci-dessous en rouge

Function Interets_R2(Montant, r, T, NbEssai, NbPeriode)
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Next i
Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))
End Function

Voilà merci à tous d'avance pour votre aide !!!

 

Zoubir

Nouveau membre
Bonour Kangol,
Peux-tu me préciser stp, je sais que cela doit-être une erreur bête mais je débute en VBA...
Merci
 

Zoubir

Nouveau membre
http://www.presence-pc.com/forum/ppc/Programmation/quelques-regles-simples-respecter-lire-poster-sujet-1356-1.htm

Bonjour,
Voici mon précédent message complété avec les balises.
D'avance Merci à tous :hello:
PS : Pour être sincère le problème de R3 est vraiement celui qui pose problème. Pour R2, c'est simplement que j'aimerais comprendre comment faire ce genre d'action sans activer une autre variable.

La fonction R1 (initiale), qui fonctionne.

[cpp]
Function Interets_R1(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R1 = WorksheetFunction.Average(Total)
End Function [/cpp]

R3 (R1 modifiée) ne fonctionnant pas :

[cpp]Function Interets_R3(Montant, r, T, NbEssai, NbPeriode)
ReDim Total(NbEssai) As Double
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Total(i) = Tableau_Essais(i, NbPeriode + 1)
Next i
Interets_R3 = WorksheetFunction.Average(Total)
Worksheets("Solution" ).Activate
For i = 1 To NbEssai
For j = 1 To NbPeriode + 1
Cells(i, j).Value = Tableau_Essais(i, j)
Next j
Next i
End Function [/cpp]

Pour R3, les modifications sont seulement celles indiquées ci-dessous :

[cpp] Worksheets("Solution" ).Activate
For i = 1 To NbEssai
For j = 1 To NbPeriode + 1
Cells(i, j).Value = Tableau_Essais(i, j)
Next j
Next i[/cpp]


R2 (R1 modifiée en vue d'être optimisé) ne fonctionnant pas également, la seule modimodifications à la place de la variable "Total"

[cpp] Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1)) [/cpp]

[cpp]
Function Interets_R2(Montant, r, T, NbEssai, NbPeriode)
ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
dt = T / NbPeriode
For i = 1 To NbEssai
Var = Montant
Tableau_Essais(i, 1) = Montant
For j = 1 To NbPeriode
Randomize
Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
Var = Var * Exp(r * dt * Var_Aleatoire)
Tableau_Essais(i, j + 1) = Var
Next j
Next i
Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))
End Function [/cpp]

Voilà j'espère que c'est plus lisible.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 120
Membres
1 586 398
Dernier membre
mookie767
Partager cette page
Haut