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 :

Utiliser une fonction contenue dans une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut Utiliser une fonction contenue dans une cellule
    Bonjour à tous, mes compétences en VBA étant très limitées, je m'en remet à vous, professionnels aguerris de la macro en tout genre !

    Voici mon problème, qui je l'espère n'en sera pas un pour au moins l'un d'entre vous .

    Je souhaiterais utiliser dans une macro l'expression d'une formule ( f(x) = ax + blabla ) entrée dans une cellule d'une feuille Excel.
    Utiliser cette formule dans une function, plus précisément, donc x serait variable.

    Le problème étant donc de récupérer cette chaîne de caractères et de l'utiliser pour faire des calculs en fonction des x qu'on lui envoi.

    J'espère avoir été suffisamment clair dans ces brèves explications et j'espère également que l'un ou plusieurs d'entre vous auront une solution ( et éventuellement un petit exemple pr la syntaxe etc... ) à me proposer.

    Merci

  2. #2
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    bonjour

    si c'est un formule qui existe dans une cellule (si je comprend bien) :

    1) je me place sur la cellue
    2) j'ctive l'enregistrement d'une macro (appelle la test par exemple)
    3) sur la cellule tu appuie sur la touche f2, pour activer la cellule
    4) puis entrer
    5) tu arrete l'enregistrement

    et normalement tu as la formule en VBA de diisponible

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Tout d'abord merci, cependant je ne vois pas très bien ou vous voulez en venir3

    C'est bien une formule qui est dans une cellule, c'est d'ailleurs l'utilisateur qui la l'écrit dedans.

    Je souhaite obtenir quelque chose du genre, attention les yeux, c'est probablement très faux mais ça illustre bien mon objectif :


    function f(x as double) as double

    f = Cells(l,c).Formula




    La function reprend l'expression et lorsqu'elle est appelé par un macro, elle remplace les x de l'expression par ceux qui lui sont soumis.

    Je pense que j'aurais également quelques soucis de types, mais je verrais ça dans un second temps3

    J'espère avoir été un peu plus clair, merci encore mais mon problème ne semble pas encore réglé.

  4. #4
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    quelle est la formule dans la cellule ? et dans quelle cellule ?

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Et bien disons

    3 * x ^ 2 + 5 * x

    dans la cellule L1

  6. #6
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    donc si je comprend bien x est la variable sur laquelle s'appliquera la formule

    pour bien comprendre, il faut savoir comment tu veux utiliser ta formule
    car il y a plusieurs méthode

    est-ce une chaine de calcul qui va s'appliquer sur tout une colonne de chiffre donc chacun sera un x
    est-ce que ton x sera le résultat d'en une cellule
    est-ce que tu entrera ton x par une msgbox, ou dans un formulaire
    est-ce que tu veux déclencher le calcul en cliquant sur un bouton ou une icône dans la barre d'outil ?

    donc si par exemple x=5
    alors le résultat attendu

    3 * (5) ^ 2 + 5 * (5)= 100

    est-ce que j'ai bien compris ce que tu veux ?

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    très vite fait, une piste...
    j'ai ceci : 3 * x ^ 2 + 5 * x en texte dans G1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub toto()
    Dim y As String
    Dim strpass As String
    Dim result
     
    y = 8
    strpass = Cells(1, 7)
    strpass = Replace(strpass, "x", y)
    Debug.Print strpass
    result = Evaluate(strpass)
    Debug.Print result
    End Sub
    cordialement,

    Didier

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    C'est en effet un calcul qui va s'appliquer à un ensemble de x qui forment une colonne.

    -x prend une valeur en début de boucle, c'est un double

    -cette variable x remplace le caractère "x" contenu dans le string correspondant à la formule entrée dans la cellule du tableau

    Le tout est, je pense, sensé être utilisé et renvoyer en double.

    C'est la phase ou la formule passe de string a double pour pouvoir effectuer un calcul, et la manière de remplacer le x dont je n'ai aucune idée

  9. #9
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    euh, tu as regardé le code au-dessus de ton message ,

    cordialement,

    Didier

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Oui je l'ai regardé, je ne l'ai pas essayé comme vous me l'avez donné, j'ai directement essayé de l'appliquer à mon problème et cela ne fonctionne pas ^^.

    Cependant je vous remercie pour cette piste, je vais essayer de la travailler, mais demain .

    Merci encore et bonne soirée

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    adapte cette fonction (celle de Ormonth)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function f(ByVal s As Double) As Double
    Dim expr As String
    Dim t
     
    expr = Range("A1").Value  'en A1 la formule sous forme de f(x)=... (à l'exception de exp()
    If Len(expr) > 0 Then
        t = Split(expr, "=")
        f = Evaluate(Replace(t(UBound(t)), "x", s))
    End If
    End Function
    en A1 tu mets ta fonction (à l'exception de l'exponentiel exp(t))

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Bonjour, je me remet enfin à mon projet laissé de coté durant les fêtes.

    Je viens de jeter un oeil à la proposition faite par Mercatog, je l'ai meme essayée et j'avoue que j'aimerais bien 2 ou 3 petite précision sur les commandes utilisées pour essayer de la faire fonctionner.
    Comme par exemple le Evaluate, le Ubound etc ...

    Il y a une incompatibilité de types dans les fonctions.

    Ce qui me parait étrange c'est le replace, vu que apparemment cette commande ne se destine qu'aux string. On remplace bien x string par s string, on donne bien une valeur à s, mais il ne s'agit pas du même s que précédemment.



    Merci et bonnes fêtes

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu testé la fonction?
    quel est le problème?

    ps. testé chez moi et fonctionnel

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    J'ai repris ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function f(ByVal s As Double) As Double
    Dim expr As String
    Dim t
     
    expr = Range("L1").value
    If Len(expr) > 0 Then
     
        f = Evaluate(Replace(t(UBound(t)), "x", s))
    End If
    End Function
    Et l'erreur est une incompatibilité de type sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      f = Evaluate(Replace(t(UBound(t)), "x", s))

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Etrange, ça fonctionne chez moi. (Testée dans Excel 2003)
    sinon, tu peux la remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = Evaluate(Replace(t(UBound(t)), "x", CStr(s)))

    Testé dans Excel 2003

  16. #16
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    J'ai modifié un peu cette fonction pour arriver à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function f(ByVal s As Double) As Double
    Dim expr As String
     
        expr = Range("L1").value
        expr = (Replace(expr, "x", s))
     
        f = CDbl(expr)
     
    End Function
    J'ai un problème au niveau du f = CDbl(expr) : une incompatibilité de type.

    Ce qui précède semble bon : quand je met ma souris sur expr Excel 2007 me dit bien que expr = 2^3 ( 2 étant la 1ere valeur de la série ).

    Je pense que je suis sur la bonne voie, il me faut juste un moyen de convertir ce 2^3 string en double.

  17. #17
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    expr = Range("L1").value
    expr = Replace(expr, "x", s)
    f = Evaluate(expr)
    Je ne saurai dire que Evaluate n'existe plus sur Excel2007

    si tu faisais un F1 (Help) sur Evaluate

  18. #18
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Je viens d'essayer avec Evaluate, dont l'aide est :

    "Cette méthode convertit un nom Microsoft Excel en un objet ou une valeur."


    J'ai également une incompatibilité de type.

    Ce qui est étrange c'est qu'il semblerait que cela fonction pour x = 2, mais plus pour x = 2.1.
    Evaluate ne fonctionnerait que sur les entiers ?

    Ou alors le probleme vient de la ","

  19. #19
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Voila !

    Il semblerait que cela fonctionne en remplaçant la , par un . .

    Je n'ai pas encore controlé mes valeurs, mais au moins j'en ai ^^.

    Je vous tiens au courant, merci pour le coup de main!

    A plus tard

  20. #20
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Ben non, la fonction citée par Karrig ne fonctionne nul part

    Karrig, un peu d'effort perso et adaptes ce qu'a fourni Mercalog*

    ???????
    *c'est OK sous 2007, et en mettant une balise de version comme demandé devant le titre de ton message, ça aidera tout le monde

    cordialement,

    Didier

Discussions similaires

  1. [Débutant] Utiliser les fonctions contenues dans une DLL écrite en VB.NET
    Par vg-matrix dans le forum VB.NET
    Réponses: 1
    Dernier message: 26/11/2012, 23h35
  2. utilisation d'une fonction contenue dans une DLL
    Par granbapt dans le forum Visual C++
    Réponses: 4
    Dernier message: 08/06/2012, 13h13
  3. Réponses: 4
    Dernier message: 24/08/2011, 18h23
  4. Réponses: 0
    Dernier message: 23/12/2009, 12h38
  5. [POO] appeler une fonction contenue dans une autre fenetre
    Par pepper18 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/09/2008, 02h27

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