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
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
A voir également:
- SVP PB pour definir une fonction sous excell
- Fonction si et - Guide
- Fonction somme excel - Guide
- Fonction moyenne excel - Guide
- Créer une liste déroulante excel - Guide
- Définir google comme page d'accueil - Guide
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
1 mai 2008 à 23:50
Merci de m'aider de trouver quelle demùarche j'ai manqué !!
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
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 !!!
j'ai essayer de faire VBAPROJECT.Feuille1.BS(je rentre lmes arguments ) mais ca ne marche pas !!!
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
2 mai 2008 à 01:28
2 mai 2008 à 01:28
Bonsoir,
une fonction personnalisée doit être écrite dans un module et non dans une feuille.
eric
une fonction personnalisée doit être écrite dans un module et non dans une feuille.
eric
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
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
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
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
2 mai 2008 à 08:11
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
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
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
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
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
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
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 !!
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 213
2 mai 2008 à 17:07
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.
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.
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
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
Enfin une premiere fonction !!
Bonne journée