SVP PB pour definir une fonction sous excell

Résolu/Fermé
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008 - 1 mai 2008 à 23:48
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008 - 2 mai 2008 à 17:14
Bonjour,
MA question est la suivante :
J'ecris un code sous VBA il est correcte puisqu'il est correctement executé, ensuite je click sur enregistrer. au retour à
mon fichier excell je tape le nom de la fonction et je rentre les arguments ensuite rien ne change, je vas sur l'onglet INSERER UNE FONCTION et puis je ne trouve pas le nom de ma fonction nomé BS, il est dont clair qu'il manque une étape queqlque part ??

A+
A voir également:

7 réponses

aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
1 mai 2008 à 23:50
Merci de m'aider de trouver quelle demùarche j'ai manqué !!
0
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
1 mai 2008 à 23:59
J'ajoute comme précision que j'ai enrengistré le code sur Feuille1 qui est dans VBAPROJECT
j'ai essayer de faire VBAPROJECT.Feuille1.BS(je rentre lmes arguments ) mais ca ne marche pas !!!
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
2 mai 2008 à 01:28
Bonsoir,

une fonction personnalisée doit être écrite dans un module et non dans une feuille.

eric
0
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
2 mai 2008 à 02:27
Bonsoir Eric,
Merci bcp effectivement c'est le probleme que j'avais. Maintenant j'ai un autre problème avec l'execution de ce code:

Function BS(S As Double, X As Double, rf As Double, T As Double, sig As Double) As Double
Dim d As Double
d = Log(S / X) + (rf * T)
Dim v As Double
v = sig * Sqr(T)
Dim d1 As Double
d1 = d / v + 0.5 * v
Dim d2 As Double
d2 = d1 - v
Dim Nd1 As Double
Nd1 = Application.NormSDist(d1)
Dim Nd2 As Double
Nd2 = Application.NormSDist(d2)
BS = S * Nd1 - X * Exp(-rf * T) * Nd2

End Function

Sub black()
Dim Resultat As Double
Dim S As Double
Dim X As Double
Dim rf As Double
Dim T As Double
Dim sig As Double
Resultat = BS(S, X, rf, T, sig)
End Sub



En gros a l'execution le curseur pointe en jaunesur la ligne trois ie là où il y a d= Log(S / X) + (rf * T) ca affiche erreur 6 depassement de capacité .
Au depard j'avais pas precisé le type mais j'ai penser à metttre double comme ca il aura pas de probleme ! et bien non malgres ça il pointe toujours sor cette ligne !!!

Bonne soirée

Amine
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
2 mai 2008 à 08:11
Bonjour,

Tu as ça pour les divisions par 0.
Si ça doit arriver il faudra peut-être que tu testes dans la fonction pour retourner la bonne valeur d'erreur.
Mets tes variables à 1 avant l'appel et ça passe
eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
2 mai 2008 à 16:31
Salut Eric,

J'ai suivi ton indication et j'ai utiliser If pour contourner le problem de log(0) et de 1/0, le code est executable Mais mon probleme c'est que je n'arrive pas à le retrouver lorseque je le recherche sur ''inserer fonction'' , il faut faire quelquechose de special pour le rendre accessible depuis Excel??

Merci Pour tout


Function BS(S As Double, X As Double, rf As Double, T As Double, sig As Double) As Double
Dim d As Double
Dim v As Double
v = sig * Sqr(T)
If (S = 0 Or X = 0 Or v = 0) Then
BS = 0
Else
d = Log(S / X) + (rf * T)
Dim d1 As Double
d1 = d / v + 0.5 * v
Dim d2 As Double
d2 = d1 - v
Dim Nd1 As Double
Nd1 = Application.NormSDist(d1)
Dim Nd2 As Double
Nd2 = Application.NormSDist(d2)

BS = S * Nd1 - X * Exp(-rf * T) * Nd2
End If
End Function

Sub black()
Dim Resultat As Double
Dim S As Double
Dim X As Double
Dim rf As Double
Dim T As Double
Dim sig As Double
Resultat = BS(S, X, rf, T, sig)

End Sube


Bonne journée
0
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
2 mai 2008 à 16:55
En fait j'écris tout ça dans un fichier module et puis apres je ne sais pas pourquoi ca ne marche pas !!
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
2 mai 2008 à 17:07
Si tu l'as mises dans un module elle doit être accessible.
Dans 'insérer fonction' sélectionne la catégorie 'personnalisées', elle doit y être.
Sinon jette un oeil dans le menu 'outils / options' onglet "sécurité', bouton 'sécurité des macros'. Il faut le niveau moyen ou faible.
0
aikzman Messages postés 7 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 2 mai 2008
2 mai 2008 à 17:14
Merci Bcp Eric pour ton aide, en fait elle été bien dans ''Inserer fonctions ''
Enfin une premiere fonction !!
Bonne journée
0