Comparaison d'une somme avec un nombre

bonjour , desolé de vous deranger vu que mon probleme a l'air banale

'voila j'ai deux boucles inbriquées la deuxieme for j=0 to nb_annee... est celle qui me calcule ma somme

'une fois cette somme calculée je voudrai la comparer a un nombre fixe en ajoutant au denominateur un nombre

'tres petit "alpha" bien entendu si ma somme est inferieur a ce nombre fixe je doit prendre alpha negatif ,dans le

'cas contraire je prend alpha positif

'j'ai donc mis une condition d'arret si la difference des deux nombres est inferieur à 0.0001 la boucle sur alpha

'devrais s'arreter puis me mettre ce dernier alpha en colone V a la ligne consideré

'voila j'ai bricolé un code mais qui ne fait pas ce que je veux

'voici la partie du code concernée:

 For alpha = 0 To 10 Step 0.0001
        somme = 0
                For j = 0 To nb_annee - 1
                    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
                            T = alpha + (g * taux_spot_2 + (30 - g) * taux_spot_1) / 3000
                            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
                        somme = somme + 100 / ((1 + T) ^ p)
                        diff = Abs(Worksheets("Feuil1").Cells(i + 6, "J").Value - somme)

                            If Worksheets("Feuil1").Cells(i + 6, "J").Value < _
                            Worksheets("Feuil1").Cells(i + 6, "K").Value Then
                            alpha = alpha
                            Else
                            alpha = -alpha
                            End If
                        If diff <= 0.001 Then
                        Worksheets("Feuil1").Cells(i + 6, "V").Value = alpha
                        Else
                        Worksheets("Feuil1").Cells(i + 6, "V").Value = ""
                        End If

          Next

merci beaucoup de votre aide .

Bonjour dianbobo,

Difficile de comprendre quoi que ce soit dans ce code !

Dans ton code, il y a la ligne suivante :

                        If diff <= 0.001 Then

or tu dis

dianbobo a écrit :

...si la difference des deux nombres est inferieur à 0.0001...

ce ne serait donc pas :
                        If diff <= 0.0001 Then

?

Si ce n'est pas ça, joindre un fichier nous faciliterait probablement la compréhension de ton problème.

desolé de l'erreur de frappe c'est bien :

If diff <= 0.0001 Then

'voici mon code de façon complet pour mieux comprendre , je vais expliquer pas a pas ce que ce code doit faire

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 ligne
                If Worksheets("Feuil1").Cells(i + 6, 14).Value <> "" Then
                '//il s'agit d'un nombre d'année calculé a partir par exemple a 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 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
        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
                            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 masomme 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.0001 ,c'est porquoi je fait
                'diiff ci -dessous:
                        diff = Abs(Worksheets("Feuil1").Cells(i + 6, "J").Value - somme)
              '// alpha ne peu toujours pas etre positif cela depend de la somme trouver 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 le prendre negatif

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

          Next
        End If
    End If
Next
end sub

le code tourne deja pour i=0 jusqu'a i=18 puis il se bloc (excel ne repond pas!)

merci de votre aide

Bonjour dianbobo,

Peux-tu joindre un fichier en enlevant toutes données inutiles à la résolution du problème ?

bonjour

disons que j'ai pu voir l'erreur il suffisait de prendre un pas tres petit j'ai pris 10E-6 et une condition diff<=10E-2

voila ça marche bien merci beaucoup de votre aide .

Rechercher des sujets similaires à "comparaison somme nombre"