SVP PB pour definir une fonction sous excell

Résolu
aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
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+
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci de m'aider de trouver quelle demùarche j'ai manqué !!
    0
  2. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

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

    eric
    0
    1. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  7. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
     
    En fait j'écris tout ça dans un fichier module et puis apres je ne sais pas pourquoi ca ne marche pas !!
    0
  8. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. aikzman Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci Bcp Eric pour ton aide, en fait elle été bien dans ''Inserer fonctions ''
      Enfin une premiere fonction !!
      Bonne journée
      0