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

IHM Discussion :

saisir une fonction dans un formulaire


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut saisir une fonction dans un formulaire
    Bonjour,
    je voudrai savoir s'il est possible de saisir une fonction dans un formulaire (par exemple, saisir f(x)=ent(x*2) ) et ensuite faire appel à cette fonction dans des requetes

    le pb est que je ne sais pas lier la formule que je saisis dans le formulaire (et qui doit etre de type texte?) à la fonction que je veux utiliser dans mes requetes et que je voulais créer dans un module, comme ceci :

    Function cout(x As Single) As Single
    cout = ent(x*2)
    End Function

    il faudrait qu'a la place de ent(x*2) je mette la valeur de mon controle indépendant "formule" de mon formulaire, malheureusement celui ci est en format texte alors que cout est de format nombre...

    si vous savez comment faire merci de m'aider parce que là je bloque completement..

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Dans ton champ, tu peux essayer le code suivant :
    N'oubliez pas le Tag afin de faciliter la recherche, et en votant cela permet de mieux la cibler.

    Je ne réponds pas aux messages privés s'ils sont liés à une question technique

  3. #3
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    Oui, tu peux tout à faire employer une fonction dans un champ indépendant:
    Ta fonction doit alors s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function CalculCout(ByVal Nombre As Single, Coef As Single) As Integer
      CalculCout = Int(Nombre * Coef)
    End Function
    Ensuite dans ton champ de formulaire, tu saisies:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CalculCout(CSmpl([ChampContenantLeNombre]); 2)
    C'est tout.

    Argy

    P.S. Ne pas oublier les balises Code
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    @argynoret : merci pour la réponse, mais ce n'est pas çà que je veux faire, en fait je veux pouvoir définir la fonction dans le formulaire;
    c'est à dire saisir f(x)=[x*2] dans mon controle indépendant, puis que cette fonction soit enregistrée dans un module afin que je puisse l'utiliser ensuite dans une requete.
    ici [x*2] est un exemple, je veux en fait pouvoir saisir n'importe quelle fonction de x.

    @zoom61 : je vais essayer cette piste mais j'ai des doutes
    merci en tout cas

  5. #5
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Quel intérêt ?
    Tu peux très bien utiliser une fonction (perso ou non) dans une requête...
    Un formulaire est attaché à une requête et pas le contraire.

    Ce que je crois comprendre, c'est que tu veux dans ton formulaire créer un générateur de fonction... Une fois rédigée, tu veux qu'elle s'ajoute à d'autre fonction dans un module VBA... C'est ça ?
    Si oui, c'est bien complexe à dévélopper mais c'est faisable...
    Ceci dit, ton projet est bien étrange

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    l'interet est de créer un outil ergonomique ou l'utilisateur paramètre dans un formulaire une fonction de cout qui est ensuite utilisée dans des requetes et qui renvoie des résultats.
    il ne s'agit pas de créer un générateur de fonction

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ce que tu veux, c'est exploiter la fonction rédigée comme telle dans la requête ou bien exploiter le résultat de la fonction opérée dans le formulaire dans la requête, ce qui n'est pas pareil... ???

    Et dans le 2nd cas, c'est tout de même assez facile à mettre en oeuvre.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    il s'agit du 1er cas malheureusement..

  9. #9
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Mouais...
    Et quels types de fonctions peuvent être potentiellement et sans exagération être rédigées dans cette zone ?
    Parce qu'en fait, tu pourrais très bien créer un jeu de boutons ayant des symboles et des listes ayant des valeurs limitées de manière à ce que l'utilisateur ne puisse pas faire n'importe quoi. De là, la fonction serait rédigée avec des élements connus et dans un module, tu aurais une fonction globale (toujours la même) qui serait exploitée par défaut dans la requête avec tous les paramètres possibles.
    Dans la fonction elle-même, il y aurait une décomposition de la chaîne de caractère représentant ce qui est passé en paramètre, c.a.d. ce qui a été saisie dans la zone de texte.
    Selon les cas, l'exécution plausible se ferait ou balancerait une erreur.
    Ce que je viens de te citer est réalisable dans la mesure où un coté raisonnable de possiblités est mis en oeuvre.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    tout à fait
    c'est d'ailleurs la solution que je viens de développer, car la plupart du temps la fonction sera de type ax^n+b
    je saisis donc les coeffs a,b,n et là je m'en sors

    mais dans le cas ou on voudrait utiliser autre chose, j'aurais aimer pouvoir saisir n'importe quelle fonction.
    il n'y aurait pas moyen d'utiliser la fonction eval? on m'a parlé de çà...

    merci en tout cas pour tes réponses

  11. #11
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui, Eval() sera de toute façon à employer mais ce qu'il faut avant tout c'est analyser la chaîne de caractères et c'est là que c'est délicat car imagine que l'analyse de la fonction soit mal rédigée et qu'elle soit pour autant opérationnelle (plausible), elle renvoie alors un résultat erroné ce qui est préjudiciable.

    Exemple de Eval ():
    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
    Sub TestEval()
    Dim I As Integer
        For I = 1 To 3
            Eval ("fnct" & I & "(" & I & ")")
        Next I
    End Sub
     
    Function fnct1(ByVal V As Integer)
      Debug.Print V * 1 + (Rnd ^ 2)
    End Function
     
    Function fnct2(ByVal V As Integer)
      Debug.Print V * 1 + (Rnd ^ 2)
    End Function
     
    Function fnct3(ByVal V As Integer)
      Debug.Print V * 1 + (Rnd ^ 2)
    End Function
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    je ne vois pas vraiment comme elle marche cette fonction eval..


    le pb c'est que je définis dans mon formulaire un champ formule_définie,
    sur l'évenement afterupdate je fais
    formule=formule_définie, formule étant une var publique de type string

    puis dans un module j'ai
    function cout (x as single) as single
    cout=eval(formule)

    mais quand j'écris par exemple 2*x+1 dans le champ formule_définie et que je demande la valeur de cout(1) dans une msgbox, il me dit que la variable x n'est pas définie...

  13. #13
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bien en fait, c'est ce que je t'ai expliqué... Il faut tester la formule pour savoir ce qu'elle contient.
    Mais de façon simple voici un exemple circonstantiel à ta formule:
    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
     
    Function Cout(ByVal Valeur As Single, ByVal Formule As String)
    Dim strBonneFormule As String
      strBonneFormule = Replace(Formule, "x", Valeur)
      Cout = Eval(strBonneFormule)
    End Function
     
    Sub TestCout()
    Dim UneValeurX As Single
    Dim MaFormule As String
     
      UneValeurX = 47
      MaFormule = "2*x+1"
    REM **** Là on doit trouver 95 !
      MsgBox "Pour la formule " & MaFormule & vbCrLf & _
    "Le résultat est : " & Cout(UneValeurX, MaFormule)
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 129
    Points : 47
    Points
    47
    Par défaut
    super, çà marche
    merci bcp j'aurai jamais trouvé çà tt seul

  15. #15
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Psssst.... !!!!

    Le tag

    Merci
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2013, 20h06
  2. [MySQL] Faire varier une liste en fonction d'une autre dans un formulaire
    Par lemirandais dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/01/2009, 22h45
  3. Lancer une fonction dans un sous formulaire
    Par malingue dans le forum Access
    Réponses: 4
    Dernier message: 20/06/2006, 11h33
  4. Réponses: 5
    Dernier message: 24/05/2006, 14h04
  5. Etat en fonction d'une requete dans un formulaire
    Par Cablan dans le forum Access
    Réponses: 5
    Dernier message: 16/11/2005, 15h25

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