FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Récupérer la variable tableau dans une feuille
 

Récupérer la variable tableau dans une feuille

Il y a 304 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Récupérer la variable tableau dans une feuille
 
Plus d'informations

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 !!!
 

Profil : Pointeur
Plus d'informations

balise [code]...

Plus d'informations

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

Profil : Pointeur
Plus d'informations
Plus d'informations


 
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.
 

Code :
  1. Function Interets_R1(Montant, r, T, NbEssai, NbPeriode)
  2.     ReDim Total(NbEssai) As Double
  3.     ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
  4.     dt = T / NbPeriode
  5.     For i = 1 To NbEssai
  6.     Var = Montant
  7.     Tableau_Essais(i, 1) = Montant
  8.             For j = 1 To NbPeriode
  9.             Randomize
  10.             Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
  11.             Var = Var * Exp(r * dt * Var_Aleatoire)
  12.             Tableau_Essais(i, j + 1) = Var
  13.             Next j
  14.     Total(i) = Tableau_Essais(i, NbPeriode + 1)
  15.     Next i
  16.     Interets_R1 = WorksheetFunction.Average(Total)
  17. End Function


 
R3 (R1 modifiée) ne fonctionnant pas :  
 

Code :
  1. Function Interets_R3(Montant, r, T, NbEssai, NbPeriode)
  2.     ReDim Total(NbEssai) As Double
  3.     ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
  4.     dt = T / NbPeriode
  5.     For i = 1 To NbEssai
  6.     Var = Montant
  7.     Tableau_Essais(i, 1) = Montant
  8.             For j = 1 To NbPeriode
  9.             Randomize
  10.             Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
  11.             Var = Var * Exp(r * dt * Var_Aleatoire)
  12.             Tableau_Essais(i, j + 1) = Var
  13.             Next j
  14.     Total(i) = Tableau_Essais(i, NbPeriode + 1)
  15.     Next i
  16.     Interets_R3 = WorksheetFunction.Average(Total)
  17.     Worksheets("Solution" ).Activate
  18.     For i = 1 To NbEssai
  19.         For j = 1 To NbPeriode + 1
  20.             Cells(i, j).Value = Tableau_Essais(i, j)
  21.         Next j
  22.     Next i
  23. End Function

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

Code :
  1. Worksheets("Solution" ).Activate
  2.     For i = 1 To NbEssai
  3.         For j = 1 To NbPeriode + 1
  4.             Cells(i, j).Value = Tableau_Essais(i, j)
  5.         Next j
  6.     Next i


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

Code :
  1. Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))


 

Code :
  1. Function Interets_R2(Montant, r, T, NbEssai, NbPeriode)
  2.     ReDim Tableau_Essais(NbEssai, NbPeriode + 1) As Variant
  3.     dt = T / NbPeriode
  4.     For i = 1 To NbEssai
  5.     Var = Montant
  6.     Tableau_Essais(i, 1) = Montant
  7.             For j = 1 To NbPeriode
  8.             Randomize
  9.             Var_Aleatoire = WorksheetFunction.NormSInv(Rnd)
  10.             Var = Var * Exp(r * dt * Var_Aleatoire)
  11.             Tableau_Essais(i, j + 1) = Var
  12.             Next j
  13.     Next i
  14.     Interets_R2 = WorksheetFunction.Average(Tableau_Essais(NbPeriode + 1))
  15. End Function


 
Voilà j'espère que c'est plus lisible.


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Récupérer la variable tableau dans une feuille
 

Annonces Google
Publicité
Les ressources relatives
Les téléchargements