IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Userform simple: Pas de résultats


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut Userform simple: Pas de résultats
    Bonjour à tous!

    Je suis en train de m'entrainer sur les userforms et mon code ne veut absolument pas marcher. Apres plusieurs messages d'erreur, il ne veut toujours pas me mettre un bon résultat. En ce moment il me met "Argument non facultatif" pour ma fonction pricer...

    J'aurai besoin d'un oeil frais sur ce petit code


    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 maturité()
     
        datetexte = CStr(jour.Value) & "/" & mois.Value & "/" & CStr(contenu_année.Value)
        maturité = (CDate(datetexte) - Date) / 365
     
    End Function
     
     
     
    Function pricers(s, k, r, sigma, t As Double) As Double
     
    Dim d1 As Double
    Dim d2 As Double
     
     
    d1 = (Log(s / k) + (r + 0.5 * sigma ^ 2) * t) / (sigma * Sqr(t))
    d2 = d1 - sigma * Sqr(t)
     
    pricers = (s * WorksheetFunction.NormDist(d1) - k * Exp(-r * t) * WorksheetFunction.NormDist(d2))
     
    End Function
     
    Private Sub Pricer1_Click()
     
    s = Val(cours.Value)
    k = Val(strike.Value)
    r = Val(rf.Value)
    sigma = Val(volat.Value)
    prix1.Value = Round(pricers(s, k, r, sigma, maturité()), 4)
     
     
    End Sub

    A savoir que les cours.value , strike.value ... correspondent à la valeur indiqué dans les userforms par l'utilisateur.

    Merci!

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 120
    Par défaut
    Salut le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NORMDIST(x, mu, sigma, cumul)
    Les arguments de NORMDIST x, mu et sigma sont des valeurs numériques alors que l'argument cumul est une valeur logique de type TRUE ou FALSE. Sigma doit être supérieur à 0, mais aucune condition similaire n'est requise pour les arguments x et mu.

    Référence : http://support.microsoft.com/kb/827371/fr

    Mytå_Qc

  3. #3
    Membre actif
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut
    Désolé jai pas compris où était mon erreur...

    Pourriez vous me donner plus de précision? Merci!

    D'accord!
    J'ai en fait remplacer normdist par normsdist et ma fonction marche.
    Mais pas le code...j'ai toujours un message d'erreur...

    D'accord!
    J'ai en fait remplacer normdist par normsdist et ma fonction marche.
    Mais pas le code...j'ai toujours un message d'erreur qui est dépassement de capacité.
    Je pense que ça a rapport avec la définition de d1 et d2 que j'ai défini en tant que double.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 120
    Par défaut
    Re le forum
    Citation Envoyé par cott333 Voir le message
    A savoir que les cours.value , strike.value ... correspondent à la valeur indiqué dans les userforms par l'utilisateur.
    Les valeurs retournées par l'Userform sont des valeurs texte.
    Regarde du côté de la conversion des valeurs.

    CDbl Convertit une expression au format chaîne de caractères ou numérique en valeur de type Double.

    Mytå_Qc

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    J'ai modifié ton code et l'ai commenté

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    'Evite les accents dans les nom de variable ou de nom de procédure/fonction
    'Précise de quel type est ta fonction (As Double ici je suppose)
    Function Maturite() As Double
     
    'Il est préférable de déclarer tes variables
    'Place toujours au moins une majuscule dans chaque variable pour les repérer plus facilement
     
    'Dim DateTexte As String
    Dim DateMature As Date
     
        'DateTexte = CStr(jour.Value) & "/" & mois.Value & "/" & CStr(contenu_année.Value)
        DateMature = DateSerial(contenu_année.Value, mois.Value, jour.Value)
     
        'Maturite = (CDate(DateTexte) - Date) / 365
        'Si ton besoin est de connaitre le nombre d'année dans une periode
        Maturite = DateDiff("d", DateMature, Date)
    End Function
     
     
    'Attention lors de la dclaration de plusieur variable, il faut préciser le type pour chaque variable
    'Sinon VBA déclare les variables non typés comme étant de type variant
    Function Pricers(s As Double, k As Double, r As Double, Sigma As Double, t As Double) As Double
     
    Dim d1 As Double
    Dim d2 As Double
     
     
    d1 = (Log(s / k) + (r + 0.5 * Sigma ^ 2) * t) / (Sigma * Sqr(t))
    d2 = d1 - Sigma * Sqr(t)
     
    Pricers = (s * WorksheetFunction.NormDist(d1) - k * Exp(-r * t) * WorksheetFunction.NormDist(d2))
     
    End Function
     
    Private Sub Pricer1_Click()
    'Soit tu déclares tes variables, soit tu utilises directement les valeurs dans l'appelle de la fonction
    'Sans variables ça donne ça
    'Comme dit dans un message précédent regarde du coté de Cdbl dans l'aide, il existe plusieurs autres fonction
    'qui permettent de faire du transtypage
    's = Val(cours.Value)
    'k = Val(Strike.Value)
    'r = Val(rf.Value)
    'Sigma = Val(volat.Value)
    prix1.Value = Round(Pricers(CDbl(cours.Value), CDbl(Strike.Value), CDbl(rf.Value), CDbl(volat.Value), Maturite()), 4)
     
    End Sub

    Par contre je serais toi, je modifierais Maturite en plaçant 2 paramètres Date, comme ça celui-ci est utilisable pour d'autre cas qu'avec une saisi dans les textbox de ta UserForm.
    Si tu n'as jamais a faire ce calcul autre que dans ce cas de figure, passe plutôt les 2 dates en paramètre à ta fonction Pricers et calcul la maturité directement dans la fonction Pricers (et tu supprimes la fonction Maturite).

    En règle générale, on crée une fonction uniquement si on a besoin de faire appelle plusieurs fois à une partie de code, on évite ainsi de répéter la même chose 50 fois.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Requete qui ne renvoie pas de résultat
    Par bruno782 dans le forum Requêtes
    Réponses: 6
    Dernier message: 01/08/2019, 13h39
  2. [Oracle] oci_num_rows ne retourne pas de résultat (0)
    Par osmoze dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/04/2006, 17h13
  3. Réponses: 2
    Dernier message: 14/10/2005, 12h14
  4. Retourner un count = 0 quand pas de résultat
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 21/12/2004, 15h11
  5. [VB.NET] DataSet qui ne retourne pas de résultat
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2004, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo