Correction de l'erreur

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

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

Lazarey Messages postés 3793 Statut Membre 745
 
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 !!
0
dianbobo Messages postés 167 Statut Membre 1
 
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
0
dianbobo Messages postés 167 Statut Membre 1
 
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'ameliorer

Option 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
0
dianbobo Messages postés 167 Statut Membre 1
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MrDupond Messages postés 10 Statut Membre 39
 
pour la premiere question
chaine = "Range(""L" & (i) & """) - Range(""A2"")"
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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+
0
dianbobo Messages postés 167 Statut Membre 1
 
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
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
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.
0
dianbobo Messages postés 167 Statut Membre 1
 
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 dans
Cells(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
0
dianbobo Messages postés 167 Statut Membre 1
 
comment mettre :
Cjoint et mettre le lien dans un poste suivant.
???

merci bien
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
a cer adresse
Quand ru a déposer ton classeur il te donne le lien à communiquer.
0
dianbobo Messages postés 167 Statut Membre 1
 
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 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,.../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 j

 p(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 met
somme(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
0