Correction de l'erreur
dianbobo
Messages postés
167
Statut
Membre
-
dianbobo Messages postés 167 Statut Membre -
dianbobo Messages postés 167 Statut Membre -
Bonjour,
bonjour j'ai envi d'ecrire la formule ci-dessous dans le code en faisant varier les indices de la colonne L DE i=6 jusqu'a 100 par exemple
peut on ecrire :
merci de votre aide
bonjour j'ai envi d'ecrire la formule ci-dessous dans le code en faisant varier les indices de la colonne L DE i=6 jusqu'a 100 par exemple
NombreDeJour(i) = Range("L6" ) - Range("A2" )
NombreDeJour(i) = Range("L7" ) - Range("A2" )
NombreDeJour(i) = Range("L8" ) - Range("A2" ).........
peut on ecrire :
NombreDeJour(i) = Range("L"&(i)&"" ) - Range("A2" )?
merci de votre aide
11 réponses
-
Salut,
Oui normalement tu peux l'écrire, mais si ça ne fonctionne pas tu peux écrire :
NombreDeJour(i) = Cint(Range("L"&(i)&"" )) - Cint(Range("A2" ))
Tiens moi au courant si ça fonctionne !! -
j'ai pas pu verifier si ça fonctionne vu que mon code me marque une erreur ;"erreur de compilation constante requise!!
je sais qu'il y a un probleme dans le code mais je ne sais pas comment le resoudre
en effet j'ai declaré des variables qui dependent d'une variable i (i parcours les lignes a partir de la ligne 6)
mon objectif c'est de fixer i a chaque fois et de faire les calculs .Sub prixspot() Dim NombreDeJour, NbreAnnées As Variant Dim x(i) As Double Dim x1(i), x2(i), v(i), T(i), p(i), g(i) As Variant 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) = NombreDeJour(i) / 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) = Int(NbreAnnées(i)) 'partie entiere du nombre d'année de la ligne i For i = 6 To 10000 For j = 1 To v(i) + 1 p(j) = x(i) / 12 + (j - 1) T(j) = (g(i) * Worksheets("&Forward&").Cells(x2(i) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("&Forward&").Cells(x1(i) + 11, 7).Value + 12 * (j - 1))) / 30 g(i) = (x(i) - x1(i)) * 30 Cells(i, 11).FormulaR1C1 = Cells(i, 10).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i) + 1)) ^ p(v(i) + 1) Next j Next i End Sub
si quelqu'un veut bien me guider
merci -
voila je croix que j'ai vu les premieres erreurs que j'ai faites
je devais definir mes variables sous forme de tableau si je ne me trompe
donc voila le code ci-dessous si quelqu'un veux bien m'aider a l'ameliorerOption Base 1 Sub prixspot() Dim NombreDeJour(), NbreAnnées() As Double Dim x(), T(), p(), g() As Double Dim i As Integer, j As Integer, x1() As Integer, x2() As Integer, v() As Integer For i = 6 To 10000 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) = NombreDeJour(i) / 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) = Int(NbreAnnées(i)) 'partie entiere du nombre d'année de la ligne i For j = 1 To v(i) + 1 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 Cells(i, 11).FormulaR1C1 = Cells(i, 10).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i) + 1)) ^ p(v(i) + 1) Next j Next i End Sub
merci -
bonjour j'ai modifier le premier code que j'ai posté mais j'ai une erreur ici du type"l'indice n'appartient pas a la selection."
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 Sub
dans la feuil1 j'ai un tableau de h6 a o11
en colonne H j'ai
h6=Date fin contrat
h7=11/08/2010
h8=11/04/2012
h9=03/10/2011
h10=16/04/2012
h11=22/07/2013
en colonne k j'ai
k6=spot
k7=? k8=? k9=? k10=? k11=? (c'est la colonne pour faire la somme)
en colonne L J'ai
L6=Dte Premier coupon
L7=vide
L8=11/04/2011
L9=03/10/2011
L10=16/04/2011
L11=22/07/2011
en colonne M j'ai
m6=TF-Post
m7=3,13
m8=0,25
m9=0,50
m10=4,50
m11=5,00
en colonne N
n6=Nombre D'années
n7=0
n8=3
n9=2
n10=5
n11=3
en colonne O j'ai
o6=Nbre de jours
o7=vide
o8=40644
o9=40819
o10=40649
o11=40746
dans ma feuille 2 ("forwards) j'ai une colonne de valeur a partir de la ligne 5 en colonne G
je m'explique dans la colonne en jaune je voudrai avoir des resultats de la façon ci-dessous:
1)la cellule L7 etant vide alors on va a la cellule suivante
pour calculer K8 j'ai besoin de:
*du nombre d'anné entre aujourd'hui et H8 =N8 (ce nombre d'année est en N8)
*du nombre de jours entre aujourd'hui et L8
ensuite je converti ce nombre de jours en mois 'dans ma macro c'est mon tableau "x"
x(8)=O8/30
*j'evalue la partie entiere de x(8) dans ma macro j'ai mi
x1(8)=Int(x(8))
*j'ajoute +1 a la partie entiere
x2(8)=x1(8)+1
*ma boucle sur j parcourt le nombre d'année dans ma macro j'ai mi: v(8)=N8
*ma condition while c'est pour dire que je fait la boucle sur j tant que mon nombre d'année est >0
pour K8 j'evalue alors p(j) j=1 jusqu'à v(8) ou v(8) est le nombre d'anné en N8 DONC P(j)=x(8)/12+(j-1) puis j'evalue T(j)=(g(i)*(worksheets("feuil2")Cells(x1(8)+11,7)+ 12*(j-1))+(30-g(i))*(worksheets("feuil2")cells(x2(8)+11,7)+12*(j-1))/30
enfin je veux faire la somme ci-dessous SUPPOSONS par exemlpe qu'on a 3 ans en N8 donc:
K8=M8*(1/(1+T(1))^P(1)+1/(1+T(2))^P(2)+1/(1+T(3))^P(3))+100/1/(1+T(3))^P(3)
puis appliquer ce procedé en K9,k10,,,jusqua la derniere cellule K87 EN fait la derniere cellule n'est pas fixe elle est variable elle depend de la derniercellule non vide de la colonne H par exemple ,
DESOLE d'etre si long
merci de votre aide. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
pour la premiere question
chaine = "Range(""L" & (i) & """) - Range(""A2"")" -
Bonjopur,
NombreDeJour(i) = Cells(i, 12).Value - Cells(2, 1).Value 'definir le nombre de jours entre aujourd'hui et la date de fin
Tu ne te sert nulle part de ce tableau, je verrais plutôt...NombreDeJour = (Date - Cells(2, 1)) pour autant que la cellule 2/1 soit définie en date
A+ -
bonjour tout le monde et merci a MrDupond et a lermite222
pour votre aide mais le code dans lequel j'utilise les resultats que vous m'avez donné est ci-dessous sauf qu'il plante
j'ai une erreur d'incompatibilité de type a cette ligne:T(j + 5) = (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
du coup je ne sais pas comment y remedier aussi j'ai des doutes dans ma fonction ReDim
car je veux faire chaque tableau de 6 a la derniere ligne non vide ai-je bien ecrit redim?
Sub Prixspot() Stop Dim k As Long 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(6 To Cells(Rows.Count, 1).End(xlUp).Row), T(6 To Cells(Rows.Count, 1).End(xlUp).Row), p(6 To Cells(Rows.Count, 1).End(xlUp).Row), g(6 To Cells(Rows.Count, 1).End(xlUp).Row), v(6 To Cells(Rows.Count, 1).End(xlUp).Row), x1(6 To Cells(Rows.Count, 1).End(xlUp).Row), x2(6 To Cells(Rows.Count, 1).End(xlUp).Row), somme(6 To Cells(Rows.Count, 1).End(xlUp).Row) k = Cells(Rows.Count, 1).End(xlUp).Row For i = 6 To k 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 + 5) = x(i) / 12 + (j - 1) T(j + 5) = (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 somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i)) ^ p(v(i))) Next j Wend somme(i) = somme(i) Cells(i, 11).Value = somme(i) Next i End Sub
merci de votre aide -
Sans connaître les nombres qui sont dans tes cellules ni leurs "type" c'est pas possible de décrypter.
Pourais-tu mettre un exemple de ton classeur sur Cjoint et mettre le lien dans un poste suivant. -
bonjour voici mon code j'ai pu resoudre le probleme precedent sur dim ,redim et l'incompatibilité de type que j'avais
ici:forwards_x2_11x7 = Worksheets("Forwards").Cells(x2(i) + 11, 7).Value forwards_x1_11x7 = Worksheets("Forwards").Cells(x1(i) + 11, 7).Value
je recupere dans ma feuille forward des nombres decimaux!!
j'ai executé le code il toune mais la somme calculé n'est pas juste
dans ma boucje ci-dessous :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
je veux faire une somme de 1 à v(i) (les v(i) sont des nombres entiers compris entre 0 et 10) pour chaque valeur de i puis retourner la somme dansCells(i, 11).Value
a chaque fois
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 End Sub -
comment mettre :
Cjoint et mettre le lien dans un poste suivant.
???
merci bien-
a cer adresse
Quand ru a déposer ton classeur il te donne le lien à communiquer.
-
-
cette requete n'est pas autorisée la ou je me trouve
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)=3
raison pour laquelle j'ai defini le tableau v()
en colonne O de la ligne 6 a la ligne 195x()=[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 tableausomme()=[................]
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,.../codeg()=(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*30
donc je calcule selon boucle ci dessous: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)) / 30
ouf 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 metsomme(6) dans cells(6,11)
ensuite je calcule somme(i) pour i=7 jusqu'a 195 selon le meme schema
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 end sub
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