Recherche de code
bonjour a tous
j'ai envi d'ecrire un code vba pour excel mais j'ai de gros problemes car je suis vraiment un amateur
voila je vais m'expliquer:
'je voudrai calculer le prix dune marchandise
'la date du jour est en A2
les dates de premiers coupons sont en colonne L a partir de la ligne 6 jusqu'a la derniere ligne non vide
'l'etude se fait donc ligne par ligne
lindice i designe ce qui se passe entre aujourd'hui et l'anné future i
exemple:
a la ligne 6 j'ai la date du premier coupon 11/04/2011
1) trouver le nombre de jours entre la date du jour et la date du premier coupon
datedif(i)=(L(i),A2,"d")2)convertir ce nombre de jours en mois :
X(i)=nbre de jour/303)trouver le noMbre d'année :
v=(datefuture-date du jour)/360
[v]=partie entiere de ventre l'année en cours et la date future en colonne H A PARTIR DE LA LIGNE 6(les dates futures sont en colonne H)
*pour chaque année future i je dois faire la somme suivante et stocker le resultat en
cells(i,11),i=6,..,jusqu'a la derniere ligne non vide:
cells(i,11)=somme(tf/(1+Tij)^Pij)+100/(1+Tn)^Pn j=1 à [v]+1
ou
tf=cells(i,10) pour i=6 ,jusqu'a la derniere ligne non vide
Tij=(y(i)*(sheets("feuil2").cells([v]+1,7).value+12*(j-1))+(30-y(i))*(sheets("feuil2").cells([v],7).value+12*(j-1)))/30
y(i)=(X(i)-[X(i)])*30
et
pij=X(i)/12+(j-1) pour j=1 à [v]+1
[] c'est la partie entiere
merci de votre aide
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour à tous,
Tu devrais mettre toutes ces explications directement sur la feuille
sous forme d'annotations ou de commentaires, on y verra + clair
si tu connais les formules, mets-les, on traduira en VBA
Amicalement
Claude
voici finalement mon code un tout petit peu plus clair a mon avi
et dans le fichier joins j'explique ce que j'essai de faire
Option Base 1
Sub prixspot()
Dim x() As Double, T() As Double, p() As Double, g() As Double
Dim i As Integer, j As Integer, x1() As Integer, x2() As Integer, v() As Integer
Dim somme() As Single
ReDim x(1000, 1), T(1000, 1), p(1000, 1), g(1000, 1), v(1000, 1), x1(1000, 1), x2(1000, 1), somme(1000, 1)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
somme(i) = 0
' NombreDeJour(i) = Cells(i, 12).Value - Cells(2, 1).Value 'definir le nombre de jours entre aujourd'hui et la date de fin
'NbreAnnées(i) = (Cells(i, 8).Value - Cells(2, 1).Value) / 360
x(i) = Cells(i, 15).Value / 30 'conversion du nombre de jours en mois a la ligne i
x1(i) = Int(x(i)) 'partie entiere de x(i)
x2(i) = x1(i) + 1
v(i) = Cells(i, 14).Value ' nombre d'année de la ligne i
g(i) = (x(i) - x1(i)) * 30
While v(i) > 0
For j = 1 To v(i)
p(j) = x(i) / 12 + (j - 1)
T(j) = (g(i) * Worksheets("Forwards").Cells(x2(i) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("Forwards").Cells(x1(i) + 11, 7).Value + 12 * (j - 1))) / 30
g(i) = (x(i) - x1(i)) * 30
somme(i) = Cells(i, 13).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i)) ^ p(v(i)))
Next j
Wend
somme(i) = somme(i)
Cells(i, 11).FormulaR1C1 = "=somme(i)"
Next i
End Submerci d'avance
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
re,
tu explique une macro que je ne comprends pas,
j'aurais préféré que tu explique le résultat attendu en partant du tableau
partant de là, je cherchais un code qui va bien.
Je laisse la place aux matheux
Amicalement
Claude
bonjour
voila je vais expliquer ici le resultat attendu
j'ai des colonne dans ma feuille excel
colonne N a partir de la ligne 6 jusqu'a la ligne 195 :
v()=[5,1,6,4,....,3] donc v(6)=5,v(7)=1,.....,v(195)=3raison pour laquelle j'ai defini le tableau v()
en colonne O de la ligne 6 a la ligne 195
x()=[10.33,11.55,8,...,12.33,12] x(6)=10.33,x(7)=11.55 ,..,x(195)=12 raison pour laquelle j'ai defini le tableau x()
mon objectif c'est de remplir le tableau
somme()=[................] qui est ma colonne K toujours de la ligne 6 a la ligne 195
pour ce faire j'ai creer d'autres tableaux qui me sont utiles :
x1()=Int(x)=[10,11,8,...,12,12] (int=partie entiere de x) donc x1(6)=10,x1(7)=11...x2()=x1()+1=[11,12,9,...,13,13] x2(6)=11,...g()=(x()-Int(x()))*30=[0.33*30,0.55*30,0,...,0.33*30,0] donc
g(6)=0.33*30,...pour faire ma somme je dois parcourir chaque element du tableau d'ou ma boucle i ,une fois i est fixé je fais
for j=1 à v(i) prenons un exemple:
fixons i=6 j'aurai :
x(6)=10.33;x1(6)=10;x2(6)=11;v(6)=5;g(6)=0.33*30donc je calcule selon cette boucle:
For j = 1 To v(i)
p(j + 5) = x(i) / 12 + (j - 1)
T(j + 5) = (g(i) * (forwards_x2_11x7 + 12 * (j - 1)) + (30 - g(i)) * (forwards_x1_11x7 + 12 * (j - 1))) / 30
somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i) + 5) ^ p(v(i) + 5))
Next jp(6)=x(6)/12;p(7)=x(6)/12+1;p(8)=x(6)/12+2;p(9)=x(6)/12+3;p(10)=x(6)/12+4 puis je calcule
T(6)=(g(6) * (forwards_x2_11x7 ) + (30 - g(6)) * (forwards_x1_11x7 )) / 30
T(7)=(g(6) * (forwards_x2_11x7 + 12 ) + (30 - g(6)) * (forwards_x1_11x7 + 12 )) / 30
T(8)=(g(6) * (forwards_x2_11x7 + 12 * 2) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 2)) / 30
T(9)=(g(6) * (forwards_x2_11x7 + 12 * 3) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 3)) / 30
T(10)=(g(6) * (forwards_x2_11x7 + 12 * 4) + (30 - g(6)) * (forwards_x1_11x7 + 12 * 4)) / 30ouf enfin je fais ma somme(6)
somme(6)=cells(6,13).value*(1/(1+T(6))^p(6)+1/(1+T(7))^p(7)+1/(1+T(8))^p(8)+1/(1+T(9))^p(9)+1/(1+T(10))^p(10))+100/(1+T(10))^p(10)puis je met
somme(6) dans cells(6,11)voila j'espere avoir mieux eclairci le probleme
dont voici le code:
Sub Prixspot()
Dim k As Long
Dim x() As Double
Dim T() As Double
Dim p() As Double, g() As Double
Dim i As Integer, j As Integer
Dim x1() As Integer, x2() As Integer
Dim v() As Integer
Dim somme() As Single
Dim forwards_x2_11x7 As Double
Dim forwards_x1_11x7 As Double
k = Cells(Rows.Count, 1).End(xlUp).Row
ReDim x(6 To k), T(6 To k)
ReDim p(6 To k), g(6 To k)
ReDim v(6 To k)
ReDim x1(6 To k), x2(6 To k)
ReDim somme(6 To k)
For i = 6 To k
If Cells(i, 15).Value <> "" Then
somme(i) = 0
x(i) = Cells(i, 15).Value 'conversion du nombre de jours en mois a la ligne i
x1(i) = Int(x(i)) 'partie entiere de x(i)
x2(i) = x1(i) + 1
v(i) = Cells(i, 14).Value ' nombre d'année de la ligne i
g(i) = (x(i) - x1(i)) * 30
forwards_x2_11x7 = Worksheets("Forwards").Cells(x2(i) + 11, 7).Value
forwards_x1_11x7 = Worksheets("Forwards").Cells(x1(i) + 11, 7).Value
If v(i) > 0 Then
For j = 1 To v(i)
p(j + 5) = x(i) / 12 + (j - 1)
T(j + 5) = (g(i) * (forwards_x2_11x7 + 12 * (j - 1)) + (30 - g(i)) * (forwards_x1_11x7 + 12 * (j - 1))) / 30
somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i) + 5) ^ p(v(i) + 5))
Next j
End If
somme(i) = somme(i)
Cells(i, 11).Value = somme(i)
End If
Next i
le code tourne deja mais ma somme est fausse selon ce que j'ai ecrit dans ma boucle
si quelqu'un veut bien m'aider :(
merci d'avance
End Sub