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 :

Fonction retournant deux valeurs [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut Fonction retournant deux valeurs
    Bonjour à tous.

    Je me heurte à une colle, je code une fonction qui au final est censée me donner une moyenne et un écart type (donc deux valeurs).
    Le problème c'est qu'une fonction est normalement censée donner une seule valeur à l'issue de la procédure, or je veux que ma fonction me permette de récupérer mes deux valeurs.

    Comment suis je censé contourner ce petit problème ?

    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
    Function fnAlpha(r, rm, r0) As Variant
     
    Dim i, j, nb, observ As Integer
    Dim beta, cov, varm, error, moy, stdev As Double
     
    Set ws = wb.Worksheets("titres")
    Set wer = wb.Worksheets("er")
     
    nb = ws.Cells(Rows.Count, 1).End(xlUp).Row - 1
    observ = wer.Cells(Rows.Count, 2).End(xlUp).Row - 1
     
     
     
    varm = WorksheetFunction.stdev(rm) * (36) ^ 0.5
     
    cov = WorksheetFunction.Covar(r, rm) * 36
     
    beta = cov / varm
     
    error = r - (r0 - beta * (rm - r0))
     
    moy = WorksheetFunction.Average(error)
    stdev = WorksheetFunction.stdev(error)
     
    fnalpha= (moy,stdev)
    End Function
    Vous remerciant d'avance

    Cordialement

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Tu as plusieurs possibilités :
    1. tu fais 2 fonctions
    2. tu remplaces par une procédure sub et pour récupérer les résultats tu passes ByRef 2 variables MOY et ET
    3. Tu modifies ta fonction pour que la valeur renvoyée soit un tableau.


    La méthode la plus économe est celle de la procédure sub.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Je n'ai pas précisé que l'erreur venait bien entendu de la dernière ligne. Par ailleurs j'ai aussi tenté en dimensionnant la fonction as Tretour, néanmoins ça n'a pas fonctionné :/


    Edit: Merci pour cette réponse. Je vais tenter ça demain et voir ce que ça donne. Je vous tiendrez au courant.

    Merci

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Ce que tu as essayé, c'est de renvoyer un tableau. Tu aurais dû écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fnalpha= Array(moy,stdev)
    Quand tu auras besoin de la moyenne tu appellesIndex 1 pour l'ET, et à chaque fois tu exécutes la fonction.

    C'est pour cela que la procédure sub est plus économe


    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Ok merci beaucoup je vais essayer ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Fonction qui retourne deux valeurs
    Par Bonero dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/10/2013, 17h46
  2. Pour retourner deux valeurs dans une fonction
    Par IMANE21 dans le forum Débuter
    Réponses: 1
    Dernier message: 03/03/2012, 23h36
  3. Fonction retournent plusieurs valeurs
    Par Futixu dans le forum C++
    Réponses: 18
    Dernier message: 15/06/2006, 22h49
  4. Fonction retournant plusieurs valeurs
    Par Trap D dans le forum Scheme
    Réponses: 1
    Dernier message: 17/02/2006, 21h52
  5. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45

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