Se connecter avec
S'enregistrer | Connectez-vous

Comparaison d'une somme avec un nombre

Dernière réponse : dans Programmation

'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

  1. Sub calcul_des_spread()
  2. Dim i As Long
  3. Dim j As Long, ind() As Long
  4. Dim g As Double
  5. Dim T As Double
  6. Dim p As Double, alpha As Double
  7. Dim nb_mois As Double
  8. Dim nb_annee As Double
  9. Dim nb_trim As Double
  10. Dim nb_jr As Double
  11. Dim nb_semestre As Double
  12. Dim somme As Single
  13. Dim taux_spot_1 As Double, diff As Double
  14. Dim taux_spot_2 As Double
  15. ' prix sur les obligations a coupon annuel
  16. For i = 0 To Worksheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row - 6
  17. '//ci-dessous je mets une condition sur la ligne pour que ma boucle sur i s'execute lorsqu'on
  18. 'rencontre l'un des caracteres An,..,In Fine.
  19. If Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnLD*" _
  20. Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*An*" _
  21. Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnRD*" _
  22. Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*AnRDFo*" _
  23. Or Worksheets("Feuil1").Cells(i + 6, 9).Text Like "*In Fine*" Then
  24. '//une deuxieme condition sur le contenu de cette cellule
  25. If Worksheets("Feuil1").Cells(i + 6, 14).Value <> "" Then
  26. '//il s'agit d'un nombre d'année calculé a partir par exemple d'une date fixe
  27. 'donc c'est en general un nombre decimal
  28. nb_annee = Worksheets("Feuil1").Cells(i + 6, 14).Value
  29. 'bien evidemment le nombre de mois restant avant la prochaine année en enlevant les années pleine c'est
  30. 'la partie decimale du nombre d'années multiplié par 12
  31. nb_mois = (nb_annee - Int(nb_annee)) * 12 'nombre de mois avant la prochaine année
  32. If (nb_annee - Int(nb_annee)) > 0 Then
  33. nb_annee = Int(nb_annee) + 1
  34. Else
  35. nb_annee = nb_annee
  36. End If
  37.  
  38. somme = 0
  39. 'g represente le nombre de jours (partie decimale du nombre de mois)
  40. g = (nb_mois - Int(nb_mois)) * 30
  41. '// ci-dessous je veux faire une boucle sur alpha pour comparer la somme de ma boucle sur j
  42. 'a un nombre positif .et comme alpha est tres petit raison pour laquelle je prend un pas de 0.0001
  43.  
  44. For alpha = 0 To 10 Step 0.0001
  45. '// ici j'initialise la somme a zero pour chaque nouveau alpha
  46. somme = 0
  47. For j = 0 To nb_annee - 1
  48. '// ce if c'est pour prendre des données dans une feuille noté Forwards
  49. If Int(nb_mois) = 0 Then
  50. taux_spot_1 = Worksheets("Forwards").Cells(7 + 12 * j, 7).Value
  51. taux_spot_2 = Worksheets("Forwards").Cells(11 + 12 * j, 7).Value
  52. Else
  53. taux_spot_1 = Worksheets("Forwards").Cells(Int(nb_mois) + 10 + 12 * j, 7).Value
  54. taux_spot_2 = Worksheets("Forwards").Cells(Int(nb_mois) + 11 + 12 * j, 7).Value
  55. End If
  56.  
  57. p = nb_mois / 12 + j
  58. '// alpha ne peu toujours pas etre positif cela depend de la somme trouvée et du nombre fixe en colonne J
  59. 'si je veux que les deux nombres se rapprochent il va falloir prendre alpha positif si ma somme est > au nombre
  60. 'avec le quel je fait ma comparaison situé en colonne J sinon je prend alpha negatif
  61.  
  62. If Worksheets("Feuil1").Cells(i + 6, "J").Value < _
  63. Worksheets("Feuil1").Cells(i + 6, "K").Value Then
  64. alpha = alpha
  65. Else
  66. alpha = -alpha
  67. End If
  68. T = alpha + (g * taux_spot_2 + (30 - g) * taux_spot_1) / 3000
  69. '// je calcule une partie de ma somme a l'aide d'une formule ,T et P se calculent aussi par des formules
  70. somme = somme + Worksheets("Feuil1").Cells(i + 6, 13).Value / (1 + T) ^ p
  71. Next
  72. p = nb_mois / 12 + nb_annee - 1
  73. T = alpha + (g * taux_spot_2 + (30 - g) * taux_spot_1) / 3000
  74. '// resultat final de ma somme
  75. somme = somme + 100 / ((1 + T) ^ p)
  76. '// une fois ma somme calculé je fais le test pour chaque alpha ,j'ajoute alpha
  77. 'dans T ainsi pour un certain alpha je vais trouver que ma somme est tres proche
  78. 'du nombre qui est :Worksheets("Feuil1").Cells(i + 6, "J").Value j'ai donc mi une condition d'arret
  79. 'lorsque la differrence entre les deux nombres est <=0.02 ,c'est pourquoi je fait
  80. 'le "diff" ci -dessous:
  81. diff = Abs(Worksheets("Feuil1").Cells(i + 6, "J").Value - somme)
  82.  
  83.  
  84. 'une fois la condition est verifier mettre la valeur de cet alpha qui
  85. 'me verifie au mieux la condition "diff"en colonne V et sortir de la boucle puis
  86. 'aller a l'indice i suivant .
  87. If diff <= 0.02 Then
  88. Worksheets("Feuil1").Cells(i + 6, "V").Value = alpha
  89. Exit For
  90. End If
  91.  
  92. Next
  93. End If
  94. End If
  95. Next
  96. end sub


merci de votre aide

Autres pages sur : comparaison somme nombre

Lassé par la pub ? Créez un compte

Meilleure solution

Bonjour, :) 
j'ai 240 ligne a lire

  1. msgbox Worksheets("Feuil1" ).Cells(Rows.Count, 1).End(xlUp).Row


me renvoi bien la derniere ligne non vide de mon tableau

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

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


merci encore
Lassé par la pub ? Créez un compte