comparaison d'une somme avec nombre

dianbobo

XLDnaute Junior
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:

Code:
 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 .
 

dianbobo

XLDnaute Junior
Re : comparaison d'une somme avec nombre

voici le code avec explications:


Code:
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
                            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)
              '// 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
                            '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
le code tourne deja pour i=0 jusqua i=18,il me donne les valeurs de alpha de la ligne 6 a la ligne 24 ,mais apres il se bloc !!
(Microsoft excel Ne repond pas !!) je ne sais pas quoi faire

merci de votre aide
 

Paritec

XLDnaute Barbatruc
Re : comparaison d'une somme avec nombre

Bonsoir Dianbobo,
voilà plusieurs fois que je te le demande, alors maintenant si tu ne mets pas de fichier exemple j'invite tous les participants du forum à ne plus te répondre, car tu te moques de nous, ton attitude le montre clairement
bonne soirée
Papou :)
 

dianbobo

XLDnaute Junior
Re : comparaison d'une somme avec nombre

bonjour tout le monde
" comment se moquer de ses professeurs ?" je ne peu le faire
desolé .mais je vous respecte tous
de ce qui est du probleme se n'etait pas grand chose en fait j'ai mal choisi le pas sur alphail fallait la prendre plus petite pour que ça marche

au lieu de :
HTML:
For alpha = 0 To 10 Step 0.0001 .......
j'ai mi
HTML:
For alpha = 0 To 10 Step 0.000001
ça fonctionne bien
et desolé si j'ai pas mi le fichier car j'avais trouvé la solution avant

merci pour tout
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 062
Membres
104 014
dernier inscrit
Aurélie MONTEIL