Problème de boucle

Bonjour,

Tout d'abord je souhaite préciser que je suis un débutant en ce qui concerne Excel et je m'excuse donc d'avance pour mes erreurs potentiellement idiotes

Je dispose d'une fonction que j'ai moi même crée et qui dépend de deux variables : s et K (Fonction BS_STD)

Je dispose d'une inéquation (y) à une inconnue, K, dans laquelle une des valeurs doit être trouvée à partie de la fonction que j'ai crée précédemment.

J'ai ensuite crée une procédure dont le but est, à travers une boucle de type Do loop until, de trouver une valeur K solution de mon inéquation sachant que j'ai fixé s (s est fixé à 13.94 plus précisément)

La fonction est opérationnelle, cependant lorsque j'ajoute la procédure avec la boucle puis que je lance la macro, mon Excel crash.

Pourtant, lorsque j'utilise les boucles dans des cas plus simplistes, je n'ai aucun soucis, je soupçonne donc que l'origine du crash d'Excel est une mauvaise rédaction du code.

Auriez vous s'il vous plait une solution ?

Function Nd(d)

Nd = Application.WorksheetFunction.NormSDist(d)
'Fonction pour appliquer la fonction de distribution normale centrée réduite

End Function

Function BS_STD(s, K)

r = 0.03
sigma = 0.3
t = 1

d1 = (Log(s / K) + (r + 0.5 * sigma ^ (2)) * t) / (sigma * Sqr(t))

d2 = d1 - sigma * (t ^ (-1 / 2))

nd1put = 1 - Nd(d1)
nd2put = 1 - Nd(d2)

BS_STD = K * Exp(-r * t) * nd2put - s * nd1put

End Function

Sub strikeplancher()

h = 0.8
K = 1

a1 = BS_STD(13.94, K)
y = Abs(h * (13.94 + a1) - K)

Do Until y < 10 ^ (-15)

K = K + 0.5

Loop

End Sub

Bonjour,

Peut-être commencer par mettre "OPTION EXPLICIT" au départ et déclarer les variables

c'est déjà un petit plus de chance de trouver ou çà Bug

Merci M12 pour ta réponse.

Comme tu me l'as conseillé, j'ai utilise OPTION EXPLICIT pour déclarer toutes mes variables.

Effectivement, c'est mieux dans la mesure où je n'ai plus de crash, cependant, on me renvoi lors de l'éxécution de la macro à l'erreur d'exécution "6" : Dépassement de capacité

On me surligne alors la ligne :

d1 = (Log(s / K) + (r + 0.5 * sigma ^ (2)) * t) / (sigma * Sqr(t)) 

Qui est une ligne de code de ma fonction, la fonction fonctionne toujours malgré l'erreur et je n'ai plus aucune erreur dès que je supprime la macro.

J'ai tenté de définir d1 as variant mais rien n'y fait, j'ai toujours le dépassement de capacité

Bonjour Zedd,

Je sais pas comment tu as déclaré ta variable d1 ; normalement, tu devrais utiliser :

Dim d1 As Double ou son équivalent abrégé : Dim d1#

Si ton message de dépassement de capacité n'apparaît plus : tant mieux ! sinon, laisse quand même telle quelle la déclaration de d1 ; et l'erreur se produit à cause du calcul lui-même ; donc vérifie ta variable sigma : Dim sigma As Double ou Dim sigma#

Vérifie aussi quel est le contenu de sigma ; fais les mêmes vérifs pour tes 4 autres variables : s K r t


Les parenthèses autour du 2 sont inutiles :

d1 = (Log(s / K) + (r + 0.5 * sigma ^ 2) * t) / (sigma * Sqr(t))

Tu peux aussi l'écrire ainsi :

d1 = (Log(s / K) + (r + sigma ^ 2 / 2) * t) / (sigma * Sqr(t))

SAUF si tu voulais en fait :

d1 = (Log(s / K) + ((r + 0.5) * sigma ^ 2) * t) / (sigma * Sqr(t))

dhany

Rechercher des sujets similaires à "probleme boucle"