Résolu Comparaison d'une somme avec un nombre

dianbobo

Expert
'bonjour j'explique a travers les lignes de mon code ce que je veux faire
'le code tourne deja jusqu'a la ligne 24 c'est a dire de i=0 à 18 ensuite il bloc !!
'(microsoft excel ne repond pas)!! je ne sais pas quoi faire

[cpp]Sub calcul_des_spread()
Dim i As Long
Dim j As Long, ind() As Long
Dim g As Double
Dim T As Double
Dim p As Double, alpha As Double
Dim nb_mois As Double
Dim nb_annee As Double
Dim nb_trim As Double
Dim nb_jr As Double
Dim nb_semestre As Double
Dim somme As Single
Dim taux_spot_1 As Double, diff As Double
Dim taux_spot_2 As Double
' prix sur les obligations a coupon annuel
For i = 0 To Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row - 6
'//ci-dessous je mets une condition sur la ligne pour que ma boucle sur i s'execute lorsqu'on
'rencontre l'un des caracteres An,..,In Fine.
If Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnLD*" _
Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*An*" _
Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnRD*" _
Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnRDFo*" _
Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*In Fine*" Then
'//une deuxieme condition sur le contenu de cette cellule
If Worksheets("Feuil1").Cells(i + 6, 14).Value <> "" Then
'//il s'agit d'un nombre d'année calculé a partir par exemple d'une date fixe
'donc c'est en general un nombre decimal
nb_annee = Worksheets("Feuil1").Cells(i + 6, 14).Value
'bien evidemment le nombre de mois restant avant la prochaine année en enlevant les années pleine c'est
'la partie decimale du nombre d'années multiplié par 12
nb_mois = (nb_annee - Int(nb_annee)) * 12 'nombre de mois avant la prochaine année
If (nb_annee - Int(nb_annee)) > 0 Then
nb_annee = Int(nb_annee) + 1
Else
nb_annee = nb_annee
End If

somme = 0
'g represente le nombre de jours (partie decimale du nombre de mois)
g = (nb_mois - Int(nb_mois)) * 30
'// ci-dessous je veux faire une boucle sur alpha pour comparer la somme de ma boucle sur j
'a un nombre positif .et comme alpha est tres petit raison pour laquelle je prend un pas de 0.0001

For alpha = 0 To 10 Step 0.0001
'// ici j'initialise la somme a zero pour chaque nouveau alpha
somme = 0
For j = 0 To nb_annee - 1
'// ce if c'est pour prendre des données dans une feuille noté Forwards
If Int(nb_mois) = 0 Then
taux_spot_1 = Worksheets("Forwards").Cells(7 + 12 * j, 7).Value
taux_spot_2 = Worksheets("Forwards").Cells(11 + 12 * j, 7).Value
Else
taux_spot_1 = Worksheets("Forwards").Cells(Int(nb_mois) + 10 + 12 * j, 7).Value
taux_spot_2 = Worksheets("Forwards").Cells(Int(nb_mois) + 11 + 12 * j, 7).Value
End If

p = nb_mois / 12 + j
'// alpha ne peu toujours pas etre positif cela depend de la somme trouvée et du nombre fixe en colonne J
'si je veux que les deux nombres se rapprochent il va falloir prendre alpha positif si ma somme est > au nombre
'avec le quel je fait ma comparaison situé en colonne J sinon je prend alpha negatif

If Worksheets("Feuil1").Cells(i + 6, "J").Value < _
Worksheets("Feuil1").Cells(i + 6, "K").Value Then
alpha = alpha
Else
alpha = -alpha
End If
T = alpha + (g * taux_spot_2 + (30 - g) * taux_spot_1) / 3000
'// je calcule une partie de ma somme a l'aide d'une formule ,T et P se calculent aussi par des formules
somme = somme + Worksheets("Feuil1").Cells(i + 6, 13).Value / (1 + T) ^ p
Next
p = nb_mois / 12 + nb_annee - 1
T = alpha + (g * taux_spot_2 + (30 - g) * taux_spot_1) / 3000
'// resultat final de ma somme
somme = somme + 100 / ((1 + T) ^ p)
'// une fois ma somme calculé je fais le test pour chaque alpha ,j'ajoute alpha
'dans T ainsi pour un certain alpha je vais trouver que ma somme est tres proche
'du nombre qui est :Worksheets("Feuil1").Cells(i + 6, "J").Value j'ai donc mi une condition d'arret
'lorsque la differrence entre les deux nombres est <=0.02 ,c'est pourquoi je fait
'le "diff" ci -dessous:
diff = Abs(Worksheets("Feuil1").Cells(i + 6, "J").Value - somme)


'une fois la condition est verifier mettre la valeur de cet alpha qui
'me verifie au mieux la condition "diff"en colonne V et sortir de la boucle puis
'aller a l'indice i suivant .
If diff <= 0.02 Then
Worksheets("Feuil1").Cells(i + 6, "V").Value = alpha
Exit For
End If

Next
End If
End If
Next
end sub[/cpp]

merci de votre aide
 

aalex_38

Nouveau membre
Bonjour,

Tu as combien de lignes à lire, quel chiffre te renvoi :

[cpp]
msgbox Worksheets("Feuil1" ).Cells(Rows.Count, 1).End(xlUp).Row[/cpp]
 

dianbobo

Expert
Meilleure réponse
Bonjour, :)
j'ai 240 ligne a lire

[cpp]msgbox Worksheets("Feuil1" ).Cells(Rows.Count, 1).End(xlUp).Row[/cpp]

me renvoi bien la derniere ligne non vide de mon tableau

sinon j'ai compris ce qui causait ce probleme , c'est la condition :

[cpp]If diff <= 0.02 Then.....[/cpp] en fait ça me créait une boucle infinie a la ligne 25 , en elargissant alpha à 0.028 ça passe bien
:bounce:


merci encore
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 037
Membres
1 586 389
Dernier membre
ROCKET8
Partager cette page
Haut