Bonjour

J'ai un petit problème, je fais appel à une fonction dans une fonction, mais arrivé à celle ci, elle ne se lance pas et me sort incompatiblité de type... J'ai bien vérifié si mes expressions étaient bien des nombres, et c'est bien le cas, j'ai pas de string..

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub test()
 
Dim base As Single, val As Double, dt_final As Date, couru As Double, duree As Single, cpn As Double
 
dt_final = CDate("28/12/2022")
couru = (Now() - CDate("28/12/2016")) / 365
duree = Round((dt_final - CDate("28/12/2017")) / 365, 0)
cpn = equiv_taux(0.034, 4)
base = 1
 
val = 119.215
 
essaie = newton(0.034, cpn, 100, duree, couru, 1, val, 100)
 
 
 
End Sub
ici tout va bien

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function testote(x0, cpn, remb, duree, couru, freq, val, price)
 
Dim essai As Double, f As Double, f1 As Double
Dim test As String
 
test = ""
i = 0
f = 0
f1 = 0
 
Do
    f = price(cpn, remb, duree, couru, x0)
    f1 = deriv1(cpn, remb, duree, couru, rdmt)
    newton = x0 - f / f1
 
    essai = price(cpn, remb, duree, couru, newton)
 
    If val - essai < 0.00001 Then
        test = "ok"
    Else
        xo = newton
    End If
 
    i = i + 1
 
    If i > 1000 Then
        Exit Do
    End If
 
Loop While test = "ok"
 
 
 
End Function

ça me bloque au niveau de f=price(), incompatibilité de type...je vous mets ma fonction price() :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function price(cpn, remb, duree, couru, rdmt) As Double
 
price = 0
For i = 0 To duree
 
    If i = 0 Then
        price = cpn / ((cpn * couru) * (1 + rdmt) ^ (couru + 1))
    Else
        price = price + cpn / ((1 + rdmt) ^ (i + 1))
    End If
 
    If i = duree Then
 
        price = price + remb / ((1 + rdmt) ^ (duree + 1))
    End If
 
Next i
 
End Function

si vous savez pourquoi ? Je pense bien que c'est surement une maladresse mais bon je trouve pas malheureusement...