utiliser des tableaux dans le code vba
Dernière réponse : dans Programmation
Bonjour,
ci dessous c'est vraiment pas un code mais je voudrai en ecrire un qui obéit a l'algorithme ci dessous
aidez moi s'IL VOUS PLAIT
merci d'avance
ci dessous c'est vraiment pas un code mais je voudrai en ecrire un qui obéit a l'algorithme ci dessous
aidez moi s'IL VOUS PLAIT
Sub essai()
'date d'echéance
Dim a, alpha, j, beta As Double
a = Cells(i, 8).Date 'se sont les dates d'echeances qui sont stockeés a la colonne H A partir de la ligne 5
Cells(2, 1) = aujourdhui
alpha(i) = (a - Cells(2, 1).Data) / 360 'nombre d'année entre la date d'echeance et aujourd'hui
beta(i) = Int(alpha(i)) + 1
'date du premier coupon
d(i) = Cells(i, 10).Date 'ce sont des dates qui existent en colonne J
nbredejour(i) = d(i) - Cells(2, 1) 'nombre de jours ENTRE AUJOURDHUI et la date du premier coupon
'soit la variable x qui est égale : le nombre de jours /30
Dim x As Double
Dim t1, t2 As Integer
x(i) = d(i) - Cells(2, 1)
t1(i) = Int(x) 'partie entiere de x
t2(i) = x1 + 1
j(i) = (x(i) - t1(i)) * 30 'calcul du nombre de jours compris dans x mois
' definir p1
Dim p1 As Double
p1 = x / 12
For i = 2 To beta
p(i) = p1 + (i - 1) 'les p(i) sont des valeurs en exposant dans ma formule
Next i
'calcul des T(i)
For i = 1 To beta
T(i) = (j(i) * (Sheets("Feuil2").Cells(t2(i) + 11, 7).Value + 12 * (i - 1)) + (30 - j(i)) * (Sheets("Feuil2").Cells(t1(i) + 11, 7).Value + 12 * (i - 1))) / 30
Next i
'calcul de la valeur spot c'est une somme pour i=1 à beta de tf/(1+T(i))^P(i)+100/(1+T(beta))^P(beta)
Dim Pspot As Double
Pspot = 0
'la je veux ecrire une boucle for jusqu'a la derniere ligne non vide
For i = 1 To beta
Pspot = tf / (1 + T(i)) ^ p(i) + 100 / (1 + T(i = beta)) ^ p(i = beta)
Pspot = Pspot + 1
Next i
'enfin je veux retourner Pspot dans chacune des cellules de la colonne L
'en fait Pspot est une somme que je calculer pour chaque valeur de beta et mettre le resultat de cette somme dans une cellule a la colonne L
'sachant bien que les dates d'echeances changes donc modifient les calculs
End Sub
merci d'avance
Autres pages sur : utiliser tableaux code vba
Lassé par la pub ? Créez un compte
Meilleure solution
Voilà :
J'ai mis un modulo à la ligne 16. C'est comme ça qu'on récupère le reste d'une division.
Comme je suis informaticien, je veux que mes boucles commencent à zéro, c'est comme ça.
Alors, n'est-ce pas clair ?
Je pense que ça paraîtra encore plus évident quand les variables auront des noms plus intelligents. forwards_10x7 et forwards_11x7, c'est nul ! (oui, je sais, c'est de moi).
Dim i As Long
Dim j As Integer
Dim g As Double
Dim T As Double
Dim P As Double
Dim nb_mois As Double
Dim nb_annee As Integer
Dim somme As Single
Dim forwards_10x7 As Double
Dim forwards_11x7 As Double
For i = 0 To Cells(Rows.Count, 1).End(xlUp).Row - 6
If Cells(i + 6, 15).Value <> "" Then
nb_annee = Cells(i + 6, 14).Value
If nb_annee > 0 Then
nb_mois = (Cells(i + 6, 15).Value Mod 360) / 30
somme = 0
g = (nb_mois - Int(nb_mois)) * 30
forwards_10x7 = Worksheets("Forwards").Cells(Int(nb_mois) + 10, 7).Value
forwards_11x7 = Worksheets("Forwards").Cells(Int(nb_mois) + 11, 7).Value
For j = 0 To nb_annee - 1
P = nb_mois / 12 + j
T = (g * (forwards_10x7 + 12 * j) + (30 - g) * (forwards_11x7 + 12 * j)) / 3000
somme = somme + Cells(i + 6, 13).Value / (1 + T ^ P)
Next
P = nb_mois / 12 + nb_annee - 1
T = (g * (forwards_10x7 + 12 * (nb_annee - 1)) + (30 - g) * (forwards_11x7 + 12 * (nb_annee - 1))) / 3000
somme = somme + 100 / (1 + T ^ P)
Cells(i + 6, 11).Value = somme
End If
End If
Next
J'ai mis un modulo à la ligne 16. C'est comme ça qu'on récupère le reste d'une division.
Comme je suis informaticien, je veux que mes boucles commencent à zéro, c'est comme ça.
Alors, n'est-ce pas clair ?
Je pense que ça paraîtra encore plus évident quand les variables auront des noms plus intelligents. forwards_10x7 et forwards_11x7, c'est nul ! (oui, je sais, c'est de moi).
voila comment je l'ai ecrit :
en cells(i,12),cells(2,1) et cells(i,8) se sont des dates
est ce que par exemple cells(i,12).value va me chercher le nombre qui correspond a la date ou la date elle meme
moi je veux qu'il me recupere le nombre qui correspond a la date
merci d'avance
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
en cells(i,12),cells(2,1) et cells(i,8) se sont des dates
est ce que par exemple cells(i,12).value va me chercher le nombre qui correspond a la date ou la date elle meme
moi je veux qu'il me recupere le nombre qui correspond a la date
merci d'avance
j'ai parlé avec excel sauf qu'il ne peu pas repondre a la question ci -dessous
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
il a encore des erreurs :"incompatibilité de type"
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 d'avance
C'est très curieux, quand je demande de l'aide sur Date à Excel, voici sa réponse :
Les variables de type Date sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE représentant des dates comprises entre le 1er janvier 100 et le 31 décembre 9999, et des heures allant de 0:00:00 à 23:59:59. Toute valeur de littéral date peut être attribuée à une variable de type Date. Les littéraux date doivent être délimités par le signe #, par exemple #January 1, 1993# ou #1 Jan 93#.
Les variables de type Date affichent les dates au format de date abrégé reconnu par votre ordinateur. Les heures s'affichent au format horaire (plage de 12 ou 24 heures) défini dans votre ordinateur.
Lorsque d'autres types de données numériques sont convertis en données de type Date, les valeurs situées à gauche du séparateur décimal représentent la date, tandis que celles situées à droite correspondent à l'heure. Minuit est représenté par 0 et midi par 0,5. Les nombres entiers négatifs représentent des dates antérieures au 30 décembre 1899.
-----------------------------------
Dianbobo, j'en ai marre de te répéter 1000 fois les mêmes choses.
Quand tu as une erreur, merci de dire à quelle ligne
![[:zeb:4] [:zeb:4]]()
-----------------------------------
Tu n'as pas dimensionné tes tableaux. Fais-le.
Si tu ne sais pas de quoi je parle, RTFM : sélectionne le mot Dim dans ton code et appuie sur la touche F1. C'est l'élément subscripts.
Tant qu'à faire, regarde aussi l'aide sur ReDim.
-----------------------------------
Mais qu'est-ce que tu cherches à faire ?????
(C'est le nom de ta feuille ? - Si oui, je n'ai rien dit
)
Citation :
Date, type de donnéesLes variables de type Date sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE représentant des dates comprises entre le 1er janvier 100 et le 31 décembre 9999, et des heures allant de 0:00:00 à 23:59:59. Toute valeur de littéral date peut être attribuée à une variable de type Date. Les littéraux date doivent être délimités par le signe #, par exemple #January 1, 1993# ou #1 Jan 93#.
Les variables de type Date affichent les dates au format de date abrégé reconnu par votre ordinateur. Les heures s'affichent au format horaire (plage de 12 ou 24 heures) défini dans votre ordinateur.
Lorsque d'autres types de données numériques sont convertis en données de type Date, les valeurs situées à gauche du séparateur décimal représentent la date, tandis que celles situées à droite correspondent à l'heure. Minuit est représenté par 0 et midi par 0,5. Les nombres entiers négatifs représentent des dates antérieures au 30 décembre 1899.
-----------------------------------
Dianbobo, j'en ai marre de te répéter 1000 fois les mêmes choses.
Quand tu as une erreur, merci de dire à quelle ligne
![[:zeb:4] [:zeb:4]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e9/8b/zeb:4.gif)
-----------------------------------
Tu n'as pas dimensionné tes tableaux. Fais-le.
Si tu ne sais pas de quoi je parle, RTFM : sélectionne le mot Dim dans ton code et appuie sur la touche F1. C'est l'élément subscripts.
Tant qu'à faire, regarde aussi l'aide sur ReDim.
-----------------------------------
Worksheets("&Forwards&" )
Mais qu'est-ce que tu cherches à faire ?????
(C'est le nom de ta feuille ? - Si oui, je n'ai rien dit
)
ai-je bien compris les consignes
est ce de cette façon que je dois redimensionner les tableaux avec une boucle for comme je viens de le faire
dans mon erreur on ne m'indique pas le la ligne mais il y a juste une boite de dialogue qui s'ouvre : "incompatibilité de type" c'est ce qui est ecrit dans la boite de dialogue
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
[b]ReDim NombreDeJour(i), NbreAnnées(i), x(i), T(i), p(i), g(i), v(i), x1(i), x2(i)
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
Next i[/b]
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 UBound(v)
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
est ce de cette façon que je dois redimensionner les tableaux avec une boucle for comme je viens de le faire
dans mon erreur on ne m'indique pas le la ligne mais il y a juste une boite de dialogue qui s'ouvre : "incompatibilité de type" c'est ce qui est ecrit dans la boite de dialogue
bonjour tout le monde
j'ai modifé la ligne 5 et réecrit le code comme ci-dessous
dans ma boucle for je veux aller de i=6 jusqu'a la derniere ligne de la feuille non vide
et j'ai mi ceci:
aussi j'ai lu l'aide pour la fonction ReDim est ce correct mon ecriture a la ligne 6
j'ai essayé de l'executer mais j'ai une erreur : "l'indice n'appartient pas a la selection" et lorsque ma boite de dialogue se ferme ,je parle là de celle qui m'indique l'erreur je n'ai aucune ligne en surbrillance
là je refléchit mais je ne vois pas ce qui cloche
merci d'avance
j'ai modifé la ligne 5 et réecrit le code comme ci-dessous
dans ma boucle for je veux aller de i=6 jusqu'a la derniere ligne de la feuille non vide
et j'ai mi ceci:
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
aussi j'ai lu l'aide pour la fonction ReDim est ce correct mon ecriture a la ligne 6
Option Base 1
Sub prixspot()
Dim NombreDeJour(), NbreAnnées() As Variant
Dim x(), T(), p(), g() As Double
Dim i As Integer, j As Integer, x1() As Integer, x2() As Integer, v() As Integer, k As Integer
ReDim NombreDeJour(1 To k), NbreAnnées(1 To k), x(1 To k), T(1 To k), p(1 To k), g(1 To k), v(1 To k), x1(1 To k), x2(1 To k)
k = 1000
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
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 UBound(v, 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
j'ai essayé de l'executer mais j'ai une erreur : "l'indice n'appartient pas a la selection" et lorsque ma boite de dialogue se ferme ,je parle là de celle qui m'indique l'erreur je n'ai aucune ligne en surbrillance
là je refléchit mais je ne vois pas ce qui cloche
merci d'avance
En plus de lire la doc, il faut réfléchir.
Ceci déclare un tableau qui s'appelle x, de 0 case. C'est pas beaucoup
Ceci redimensionne le tableau x de k cases. Si k n'est pas définit, il est égale à ... ZERO. Donc tu viens de redimensionner ton tableau à 0 case. C'est toujours pas beaucoup
Dim x()
Ceci déclare un tableau qui s'appelle x, de 0 case. C'est pas beaucoup
ReDim x(k)
Ceci redimensionne le tableau x de k cases. Si k n'est pas définit, il est égale à ... ZERO. Donc tu viens de redimensionner ton tableau à 0 case. C'est toujours pas beaucoup
je comprend que Zed sois enervé a mon avis c'est moi qui comprend pas grand chose de ses explications et pourtant elles sont clairesje crois que cette fois j'ai redimensionné mes tableaux correctement dans le code ci-dessous:
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
ReDim x(1000), T(1000), p(1000), g(1000), v(1000), x1(1000), x2(1000)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
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 (c'est uenvaleur entiere) i
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
Cells(i, 11).FormulaR1C1 = "= Cells(i, 10).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i)) ^ p(v(i))"
Next j
Next i
End Sub
de plus j'ai un tout petit peu modifié le code car j'ai pu calcculer en colonne N et O respectivement le nombre de jours et le nombre d'années
mais le code a toujours la meme erreur :"l'indice n'appartient pas a la selection"
merci d'avance
ou bien je devais l'ecrire comme ci-dessous
:
et ci dessous j'explique ce que je fais dans mon code
voile le contenu de mon classeur excel ce n'est qu'un exemple
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 K 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)
K8=somme(8)
puis appliquer ce procedé en K9,k10,,,jusqua la derniere cellule K11 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.
:
1.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
ReDim x(1000,1), T(1000,1), p(1000,1), g(1000,1), v(1000,1), x1(1000,1), x2(1000,1)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
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 (c'est uenvaleur entiere) i
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 Cells(i, 11).FormulaR1C1 = "= Cells(i, 10).Value / (1 + T(j)) ^ p(j) + 100 / (1 + T(v(i)) ^ p(v(i))"
Next j
Next i
End Sub
et ci dessous j'explique ce que je fais dans mon code
voile le contenu de mon classeur excel ce n'est qu'un exemple
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 K 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)
K8=somme(8)
puis appliquer ce procedé en K9,k10,,,jusqua la derniere cellule K11 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.
T'as le droit d'être long
Ça c'est bon (j'ai simplifié) :
As-tu bien compris ? Et bien regarde-le encore !
...
Ligne 18, pourquoi tu te mets en FormulaR1C1 ? Utilise Formula, c'est plus simple. En parlant de la ligne 18, je t'invite à mieux regarder ce que tu veux mettre dans ta formule.
Alors maintenant, voilà comment "voir" ta ligne en jaune.
Juste après la ligne Sub prixspot(), tu mets sur une nouvelle ligne vide, le mot Stop et tu lances ta macro. Que se passe-t-il alors ?????? Ben comme son nom l'indique, l'instruction Stop interrompt ta macro. A partir de maintenant, tu vas bien regarder la ligne surlignée en jaune et tu vas appuyer sur [F8]. Au moment où ça pète, ton erreur sera là !
Bon, alors comme je ne sais pas où est ton erreur,
Mais qu'est-ce que tu inventes encore
ReDim x(1000,1)
Ça c'est bon (j'ai simplifié) :
Mais c'est mieux directement comme ça :
Dim x() As Double
ReDim x(1000)
Ça c'est toujours bon :
Dim x(1000) As Double
Mais dans ce vas, autant dimensionner au plus juste :
Dim x() As Double
ReDim x(1000)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row
x(i)=...
Dim k As Long
Dim x() As Double
k = Cells(Rows.Count, 1).End(xlUp).Row
ReDim x(6 To k)
For i = 6 To k
x(i)=...
As-tu bien compris ? Et bien regarde-le encore !
...
Ligne 18, pourquoi tu te mets en FormulaR1C1 ? Utilise Formula, c'est plus simple. En parlant de la ligne 18, je t'invite à mieux regarder ce que tu veux mettre dans ta formule.
Alors maintenant, voilà comment "voir" ta ligne en jaune.
Juste après la ligne Sub prixspot(), tu mets sur une nouvelle ligne vide, le mot Stop et tu lances ta macro. Que se passe-t-il alors ?????? Ben comme son nom l'indique, l'instruction Stop interrompt ta macro. A partir de maintenant, tu vas bien regarder la ligne surlignée en jaune et tu vas appuyer sur [F8]. Au moment où ça pète, ton erreur sera là !
Bon, alors comme je ne sais pas où est ton erreur,
voila je crois que j'ai bien compri les explicatin
c'est a la ligne 9 qu'il y a l'erreur lorsque je fait F8 une boite de dialogue s'ouvre et dit : erreur d'execution '9' l'indice n'appartient pas a la selection
merci d'avance
Option Base 1
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 k), T(6 To k), p(6 To k), g(6 To k), v(6 To k), x1(6 To k), x2(6 To k), somme(6 To k)
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, 1) = Int(x(i, 1)) '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, 1) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("Forwards").Cells(x1(i, 1) + 11, 7).Value + 12 * (j - 1))) / 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).Formula = "=somme(i)"
Next i
End Sub
c'est a la ligne 9 qu'il y a l'erreur lorsque je fait F8 une boite de dialogue s'ouvre et dit : erreur d'execution '9' l'indice n'appartient pas a la selection
merci d'avance
grrrrrrrrrr !!!!!!!
Mais c'est donc que tu n'as rien compris
C'est que j'explique si mal que ça ????
A quoi k est-il égal, à la ligne 11 ?
A quoi k est-il égal, à la ligne 9 ?
A quoi k devrait-il être égal, à la ligne 9 ?
Conclusion : ...
Tips : Regarder encore et encore et encore le code que j'ai proposé.
----------------------------
Ta formule, ligne 29 est fausse.
Mais c'est donc que tu n'as rien compris
C'est que j'explique si mal que ça ????
A quoi k est-il égal, à la ligne 11 ?
A quoi k est-il égal, à la ligne 9 ?
A quoi k devrait-il être égal, à la ligne 9 ?
Conclusion : ...
Tips : Regarder encore et encore et encore le code que j'ai proposé.
----------------------------
Ta formule, ligne 29 est fausse.
je ne suis pas sur d'avoir bien compris
sauf qu'avec ce que j'ai ecrit ci-dessous je n'ai plus d'erreur a la ligne 8 du code ci-dessosu mais a l'aide toujours de F8 j'ai une reereur a la ligne 23
et ma ligne 28
est t'elle toujours fausse
Cells(i, 11).Value = somme(i)
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) = x(i) / 12 + (j - 1)
T(j) = (g(i) * Worksheets("Forwards").Cells(x2(i, 1) + 11, 7).Value + 12 * (j - 1) + (30 - g(i)) * (Worksheets("Forwards").Cells(x1(i, 1) + 11, 7).Value + 12 * (j - 1))) / 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).Value = somme(i)
Next i
End Sub
desolé si je ne comprend pas vite
sinon merci de votre aide elle m'est precieuse
Dis-moi tu
--------------------------------
M'enfin ! C'est bon, oui. Mais c'est très bête de faire deux fois le même calcul.
Pourquoi, nom d'un clic de souris, ne veux-tu pas regarder le code que je te proposais ????
Je te le refais :
Qu'est-ce qui ne te paraît pas évident ?
--------------------------------
Abandonne l'utilisation de While .. Wend.
Utilise Do While / Loop à la place.
C'est une histoire d'obsolescence et de compatibilité.
--------------------------------
Dim k As Long
Dim x() As Double
ReDim x(6 To Cells(Rows.Count, 1).End(xlUp).Row)
k = Cells(Rows.Count, 1).End(xlUp).Row
M'enfin ! C'est bon, oui. Mais c'est très bête de faire deux fois le même calcul.
Pourquoi, nom d'un clic de souris, ne veux-tu pas regarder le code que je te proposais ????
Je te le refais :
Dim k As Long
Dim x() As Double
k = Cells(Rows.Count, 1).End(xlUp).Row
ReDim x(6 To k)
Qu'est-ce qui ne te paraît pas évident ?
--------------------------------
Abandonne l'utilisation de While .. Wend.
Utilise Do While / Loop à la place.
C'est une histoire d'obsolescence et de compatibilité.
bonjour tout le monde ,bonjour Zed
je crois avoir compris
en effet je faisais la chose suivante :
je definissais ReDim(6 to K) avant de declarer la valeur de K conclusion k=0
il fallait donc definir K avant de faire REDIM.
finalement j'ai ecris le code ci-dessous:
est-ce correct ic :
sauf que j'ai une erreur a la ligne 31 "incompatibilité de type"
aussi ai-je bien mis ma condition do while....loop? vu que tout ce qui m'interesse c'est faire mes calculs lorsque v(i)>0
et que pensez vous de ma formule ligne:43
merci d'avance
je crois avoir compris
en effet je faisais la chose suivante :
je definissais ReDim(6 to K) avant de declarer la valeur de K conclusion k=0
il fallait donc definir K avant de faire REDIM.
finalement j'ai ecris le code ci-dessous:
Sub Prixspot()
Stop
Dim k As Long
Dim x() As Double, 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
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
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
Do 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
Exit Do
'ici je crois qu'on ne fait rien puisque je veux faire mes calculs uniquement quand v(i)>0
Loop
somme(i) = somme(i)
Cells(i, 11).Value = somme(i)
Next i
End Sub
est-ce correct ic :
Sub Prixspot()
Stop
Dim k As Long
Dim x() As Double, 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
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...
sauf que j'ai une erreur a la ligne 31 "incompatibilité de type"
aussi ai-je bien mis ma condition do while....loop? vu que tout ce qui m'interesse c'est faire mes calculs lorsque v(i)>0
et que pensez vous de ma formule ligne:43
merci d'avance
AAAHHHH !!!!!!!!!!
Ça y est, t'as compris, ton code Dim et ReDim est nickel
Je viens de mieux regarder ta boucle Do While .. Loop.
M'enfin, utilise un If !
Par contre, je ne vois pas le soucis en ligne 31.
La voilà :
Bon, je te propose ceci :
Au moment où ça claque, tu regardes la valeur des nouvelles variables.
Ça y est, t'as compris, ton code Dim et ReDim est nickel
Je viens de mieux regarder ta boucle Do While .. Loop.
M'enfin, utilise un If !
Par contre, je ne vois pas le soucis en ligne 31.
La voilà :
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
Bon, je te propose ceci :
Dim forwards_x2_11x7 As Double
Dim forwards_x1_11x7 As Double
...
forwards_x2_11x7 = Worksheets("Forwards" ).Cells(x2(i) + 11, 7).Value
forwards_x1_11x7 = Worksheets("Forwards" ).Cells(x1(i) + 11, 7).Value
T(j + 5) = ( _
g(i) * (forwards_x2_11x7 + 12 * (j - 1))
+ (30 - g(i)) * (forwards_x1_11x7 + 12 * (j - 1)) _
) / 30
Au moment où ça claque, tu regardes la valeur des nouvelles variables.
c'est de cette façon que je dois utiliser mon If
ou je me suis encore trompé?
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)) ^ p(v(i)))
Next j
End If
somme(i) = somme(i)
Cells(i, 11).Value = somme(i)
en plus j'ai une erreur ici
l'indice n'appartient pas a la selection)
somme(i) = Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5) + 100 / (1 + T(v(i)) ^ p(v(i)))
je ne vois pas pourquoi cette erreur
Et bien pour ton histoire d'indice qui n'appartient pas à la sélection, je suppose que v(i) ou v(i)+1 doit dépasser k. Ça, c'est à toi de voir
Je trouve que ta ligne 8 est très .. inintéressante.
Le If me semble correct.
Je ne sais pas si ta ligne 9 doit se trouver dans le If, encore une fois, c'est à toi de voir.
Je trouve que ta ligne 8 est très .. inintéressante.
Le If me semble correct.
Je ne sais pas si ta ligne 9 doit se trouver dans le If, encore une fois, c'est à toi de voir.
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 :
raison pour laquelle j'ai defini le tableau v()
en colonne O de la ligne 6 a la ligne 195
mon objectif c'est de remplir le tableau
pour ce faire j'ai creer d'autres tableaux qui me sont utiles :
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 :
puis je met
voila j'espere avoir mieux eclairci le probleme
dont voici le code:
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
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
raison pour laquelle j'ai defini le tableau x()
x()=[10.33,11.55,8,...,12.33,12] x(6)=10.33,x(7)=11.55 ,..,x(195)=12
mon objectif c'est de remplir le tableau
qui est ma colonne K toujours de la ligne 6 a la ligne 195
somme()=[................]
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,...[/code]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 :
donc je calcule selon cette boucle:
x(6)=10.33;x1(6)=10;x2(6)=11;v(6)=5;g(6)=0.33*30
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
ouf enfin je fais ma somme(6)
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
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
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
bonjour tout le monde ,bonjour Zed
voici ci dessous le trvail correctement fait
voila et merci pour tout
grace a toi je commence a comprendre
voici ci dessous le trvail correctement fait
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
If Cells(i, 15).Value > 360 Then
x(i) = Abs(Cells(i, 15).Value - 360) / 30 'conversion du nombre de jours en mois a la ligne i
Else
x(i) = Cells(i, 15).Value / 30
End If
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) + 10, 7).Value
forwards_x1_11x7 = Worksheets("Forwards").Cells(x1(i) + 10, 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))) / 3000
somme(i) = somme(i) + Cells(i, 13).Value / (1 + T(j + 5)) ^ p(j + 5)
Next j
somme(i) = somme(i) + 100 / (1 + T(v(i) + 5) ^ p(v(i) + 5))
Cells(i, 11).Value = somme(i)
End If
End If
Next i
End Sub
voila et merci pour tout
grace a toi je commence a comprendre
M'enfin, pourquoi utilises-tu des tableaux ?
Retire tous les indices de i.
Je t'ai dit que la ligne 41 ne servait à rien. Tu m'écoutes ?
A la ligne 36, tu utilises T(v(i) + 5) et p(v(i) + 5). Or ces nombres ne sont pas encore calculés !
Et tu écrases à chaque tour le contenu de somme(i).
Bon, tu m'as fait dire une connerie. Dans ton code, le If de la ligne 31 ne sert à rien. Par ce que le For ne tournera pas si v(i) est nul. Mais ne le retire pas tout de suite, il est possible que d'autres lignes devraient s'y trouver.
Ça, ça pardonne tous les énervements que tu m'as causé
Retire tous les indices de i.
Je t'ai dit que la ligne 41 ne servait à rien. Tu m'écoutes ?
A la ligne 36, tu utilises T(v(i) + 5) et p(v(i) + 5). Or ces nombres ne sont pas encore calculés !
Et tu écrases à chaque tour le contenu de somme(i).
Bon, tu m'as fait dire une connerie. Dans ton code, le If de la ligne 31 ne sert à rien. Par ce que le For ne tournera pas si v(i) est nul. Mais ne le retire pas tout de suite, il est possible que d'autres lignes devraient s'y trouver.
Citation :
grace a toi je commence a comprendre
BONJOUR
LA JE COMPREND PAS
LA AUSSI JE NE COMPREND PAS
PAR CONTRE ICI
je fais une boucle jusqu'a v(i) pourquoi tu dis qu'il n'est pas calculé?
là j'ai tout compris
merci bien de m'eclairer un peu plus
LA JE COMPREND PAS
Retire tous les indices de i.
LA AUSSI JE NE COMPREND PAS
Et tu écrases à chaque tour le contenu de somme(i). :/
PAR CONTRE ICI
A la ligne 36, tu utilises T(v(i) + 5) et p(v(i) + 5). Or ces nombres ne sont pas encore calculés !
je fais une boucle jusqu'a v(i) pourquoi tu dis qu'il n'est pas calculé?
là j'ai tout compris Dans ton code, le If de la ligne 31 ne sert à rien. Par ce que le For ne tournera pas si v(i) est nul
merci bien de m'eclairer un peu plus
Retire ton doigt de la touche [Maj]
Ça ne sert à rien d'indicer tes variables. A chaque tour de boucle, tu les réinitialises et jamais tu ne les réutilises.
PAR CONTRE ICI Bah t'as qu'à éditer tes posts et après dire que tu ne comprends pas ![[:zeb:4] [:zeb:4]]()
Revoilà ton code, sans tableau sur i puisque je te dis que ça ne sert à rien.
Ligne 23, qu'est ce Abs fait là. On sait que la valeur est supérieure à 360, donc c'est inutile.
T'aime ça les trucs qui servent à rien, hein.
Bon, j'ai mis dans le If tout ce qui n'avait pas besoin d'être en dehors.
T'as compris pourquoi ?
(La bonne réponse est "Oui, j'ai bien regardé et j'ai tout compris", sinon, regarde encore).
Et i, ce sont des lignes. Comme il peut y en avoir plus que la taille d'un Integer, j'ai mis un long.
Quelle est le domaine d'un Integer, d'un long ? Quelle est la taille d'une feuille ?
J'ai viré tes superbes beaux calculs sur x1 et x2. Ce n'est utilisé qu'une fois, on va pas se faire chier.
v est un nombre d'années ? Ah bon. Et bien je renomme la variable en nb_annee. Tu devrais faire pareil pour les autres.
Bon, je n'aime vraiment pas les lignes 21 à 26.
Et tes tableaux de T et P, c'est pareil.
On va revoir ça.
Ça ne sert à rien d'indicer tes variables. A chaque tour de boucle, tu les réinitialises et jamais tu ne les réutilises.
Citation :
zebEt tu écrases à chaque tour le contenu de somme(i).
LA AUSSI JE NE COMPREND PAS
PAR CONTRE ICI
zebA la ligne 36, tu utilises T(v(i) + 5) et p(v(i) + 5). Or ces nombres ne sont pas encore calculés !
je fais une boucle jusqu'a v(i) pourquoi tu dis qu'il n'est pas calculé? ![[:zeb:4] [:zeb:4]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/e9/8b/zeb:4.gif)
Dim k As Long
Dim i As Long
Dim j As Integer
Dim T() As Double
Dim P() As Double
Dim x As Double
Dim g As Double
Dim nb_annee As Integer
Dim somme As Single
Dim forwards_10x7 As Double
Dim forwards_11x7 As Double
k = Cells(Rows.Count, 1).End(xlUp).Row
ReDim P(0 To k - 6), T(0 To k - 6)
For i = 6 To k
If Cells(i, 15).Value <> "" Then
' // nombre d'année de la ligne courante
nb_annee = Cells(i, 14).Value
If nb_annee > 0 Then
If Cells(i, 15).Value > 360 Then
' // conversion du nombre de jours en mois a la ligne courante
x = Abs(Cells(i, 15).Value - 360) / 30
Else
x = Cells(i, 15).Value / 30
End If
somme = 0
g = (x - Int(x)) * 30
forwards_10x7 = Worksheets("Forwards").Cells(Int(x) + 10, 7).Value
forwards_11x7 = Worksheets("Forwards").Cells(Int(x) + 11, 7).Value
For j = 0 To nb_annee - 1
P(j + 6) = x / 12 + j
T(j + 6) = (g * (forwards_10x7 + 12 * j) + (30 - g) * (forwards_11x7 + 12 * j)) / 3000
somme = somme + Cells(i, 13).Value / (1 + T(j + 6)) ^ P(j + 6)
Next
somme = somme + 100 / (1 + T(nb_annee + 6) ^ P(nb_annee + 6))
Cells(i, 11).Value = somme
End If
End If
Next
Revoilà ton code, sans tableau sur i puisque je te dis que ça ne sert à rien.
Ligne 23, qu'est ce Abs fait là. On sait que la valeur est supérieure à 360, donc c'est inutile.
T'aime ça les trucs qui servent à rien, hein.
Bon, j'ai mis dans le If tout ce qui n'avait pas besoin d'être en dehors.
T'as compris pourquoi ?
(La bonne réponse est "Oui, j'ai bien regardé et j'ai tout compris", sinon, regarde encore).
Et i, ce sont des lignes. Comme il peut y en avoir plus que la taille d'un Integer, j'ai mis un long.
Quelle est le domaine d'un Integer, d'un long ? Quelle est la taille d'une feuille ?
J'ai viré tes superbes beaux calculs sur x1 et x2. Ce n'est utilisé qu'une fois, on va pas se faire chier.
v est un nombre d'années ? Ah bon. Et bien je renomme la variable en nb_annee. Tu devrais faire pareil pour les autres.
Bon, je n'aime vraiment pas les lignes 21 à 26.
Et tes tableaux de T et P, c'est pareil.
On va revoir ça.
bonjour tout le monde ,bonjour Zed
c'est claire comme de l'eau de roche . mais je voudrais ajouter une condition mais elle est sur une colonne qui contient des caractères .
en fait je veux que l'exécution soit faite seulement lorsqu'on rencontre ce caractère dans une des cellules de la colonne 7.
ce caractère est
du coup jai pensé a ecrire comme ci-dessous
MAIS J'ai des doutes en ecrivant If Cells(i,7).Value="An" Then...[/cpp] puisque ce sont des caracteres qui sont en colonne 7 et non des nombres
merci de corriger mon erreur .
c'est claire comme de l'eau de roche . mais je voudrais ajouter une condition mais elle est sur une colonne qui contient des caractères .
en fait je veux que l'exécution soit faite seulement lorsqu'on rencontre ce caractère dans une des cellules de la colonne 7.
ce caractère est
An
du coup jai pensé a ecrire comme ci-dessous
For i=o to K-6
If Cells(i + 6, 15).Value <> "" Then
If Cells(i,7).Value="An" Then...
MAIS J'ai des doutes en ecrivant If Cells(i,7).Value="An" Then...[/cpp] puisque ce sont des caracteres qui sont en colonne 7 et non des nombres
merci de corriger mon erreur .
Bonjour
j'ai regardé l'aide et j'ai trouvé une façon d'ecrire la condition :
c'est elle que je veux inclure dans ma boucle .
mais j'ai une erreur a cette ligne : "erreur definie par l'application ou l'objet "
comment faire ? pour y remedier?
merci d'avance
j'ai regardé l'aide et j'ai trouvé une façon d'ecrire la condition :
For i=o to K-6
If Cells(i + 6, 15).Value <> "" Then
If Cells(i, 9).Value Like " *AnLD*" Or Cells(i, 9).Value Like "*An*" Or Cells(i, 9).Value Like "*AnRD*" Or Cells(i, 9).Value Like "*AnRDFo*" Or Cells(i, 9).Value Like "*In Fine*" Then...
c'est elle que je veux inclure dans ma boucle .
mais j'ai une erreur a cette ligne : "erreur definie par l'application ou l'objet "
comment faire ? pour y remedier?
merci d'avance
j'ai corrigé l'erreur
j'avais pas fait attention a l'indice dans ma boucle :
voilà ce que je devais ecrire:
merci bien
j'avais pas fait attention a l'indice dans ma boucle :
voilà ce que je devais ecrire:
If Cells(i+6, 9).Value Like " *AnLD*" Or Cells(i+6, 9).Value Like "*An*" Or Cells(i+6, 9).Value Like "*AnRD*" Or Cells(i+6, 9).Value Like "*AnRDFo*" Or Cells(i+6, 9).Value Like "*In Fine*" Then
merci bien
Ah, c'est résolu
Regarde bien tes conditions :
La condition 4 est contenue dans la condition 3.
Les conditions 1, 3 et 4 sont contenue dans la condition 2.
!
Regarde bien tes conditions :
Cells(i, 9).Value Like "*AnLD*" Or
Cells(i, 9).Value Like "*An*" Or
Cells(i, 9).Value Like "*AnRD*" Or
Cells(i, 9).Value Like "*AnRDFo*" Or
Cells(i, 9).Value Like "*In Fine*"
La condition 4 est contenue dans la condition 3.
Les conditions 1, 3 et 4 sont contenue dans la condition 2.
!
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :