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 :

Appeler une fonction dans une autre fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut Appeler une fonction dans une autre fonction
    Bonjour a tous,

    Je desire faire des operations mathematiques sur une multitude de fonctions.

    Je m'explique, je definis la fonction mathematique suivante dans un module a part:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function g(x As Double) As Double
     
        g = x ^ 2
     
    End Function
    Je peux appeler la fonction avec g(x) dans n'importe quel module mais ce n'est pas ce que je veux faire.

    Je desire maintenant faire une simple operation sur la fonction, je vais translater la fonction sur l'axe des x:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function Translate(f, x As Double, a As Double) As Double
     
        Translate = f(x + a)
     
    End Function
    Et ensuite, je fais par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Translate(g, 1, 2)
    Ca ne marche pas (je le savais avant de le faire), mais je sais pas comment passer la fonction elle meme en variable... Si je definis 20 fonctions et que je dois faire des operations de derivations, etc... c'est quand meme bien pratique. Sinon je dois faire un module pour chaque operation et chaque fonction...

    Quelqu'un a une solution?

    Merci beaucoup!

    Poirot

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    Bonjour,

    Un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Translate(g(4), 1, 2)

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    ca ne marche pas malheureusement...

    Quelqu'un a une autre idee?

  4. #4
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Bonsoir j'espere comprendre ce que tu veux faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function g(x As Double) As Double
     
        g = (translate(x,a)) ^ 2
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function Translate(x As Double, a As Double) As Double
     
        Translate = x + a
     
    End Function
    ??

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 3
    Par défaut
    Oui ce que tu as fait va marcher mais c pas ce que je veux faire.

    Ce que je veux, c'est que ma fonction soit reconnu comme un variable generique.

    Par exemple, je definis 20 fonctions g1, g2, etc... de la meme maniere que mon premier poste. Les fonctions prennent un "double" et renvoie un "double".

    Ensuite je veux faire une operation de derivation sur certaines d'entre elle. Je voudrais donc une fonction qui prenne en variable d'entree:
    - ma fonction
    - le point dont je voudrais calculer la derivee.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Derivation(f, x0 As Double) As Double
     
        Dim DX As Double
        DX = 10 ^ (-9)
     
        Derivation = (f(x0 + DX) - f(x0)) / DX
     
    End Function
    Ensuite je souhaiterais appeler la fonction "Derivation" de la maniere suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Derivation(g1,12)
    Derivation(g5,2)
    Seulement pour que mon operateur "Derivation" marche, il faut que je remplace "f" a l'interieur de ma fonction "Derivation" par "g1" ou "g5"... Je dois donc creer 20 fonctions de derivations, une pour chaque fonction...

    Je voudrais donc plutot "factoriser" mon code, de la maniere que j'ai decris plus haut, j'espere que c plus clair maintenant...

    Merci beaucoup!

    Il n'y a aucun moyen de factoriser mon code ?

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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