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

Access Discussion :

Fonction commune à plusieurs champs


Sujet :

Access

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut Fonction commune à plusieurs champs
    Bonjour à tous.

    Je bute sur un petit problème que je vais expliquer par un petit exemple simple :

    J'ai un formulaire avec 6 champs (A1, A2, A3, B1, B2, B3 et C1, C2, C3)
    Je souhaite multiplier la valeur de A1 avec celle de A2 et que le résultat s'affiche dans A3.
    Idem pour B et C

    Donc nous avons
    A1 * A2 = A3
    B1 * B2 = B3
    C1 * C2 = C3

    J'aimerais utiliser une fonction commune de multiplication du type
    variable1 * variable 2 = variable 3 et que lorsque je quitte par exemple le champ A2 (sur perte focus) il envoie la valeur A1 à la variable 1 et la valeur A2 à la variable 2 et qu'il me fasse le calcul.
    Pareil pour les B et C

    Ca, j'y arrive.

    Ce que je ne sais pas, c'est comment faire pour que la variable 3 s'affiche dans le bon champ => A3 si j'ai quitté le champ A2, B3 si je quitte le champ B2 etc..


    J'espère avoir été clair et merci pour vos indications.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Je ne sais pas comment tu t'organises mais moi je ferais sa comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub A2_LostFocus()
       A3.text = calcul(var1,var2)
    End Sub

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par tazmania
    Je ne sais pas comment tu t'organises mais moi je ferais sa comme sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub A2_LostFocus()
       A3.text = calcul(var1,var2)
    End Sub
    Merci pour ta réponse Tazmania.

    J'ai testé, j'obtiens l'erreur 2185 :

    "Impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé"

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Dans ce cas la tu active A3 avant, non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub A2_LostFocus()
     A3.SetFocus
     A3.text = calcul(var1,var2)
    End Sub

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par tazmania
    Dans ce cas la tu active A3 avant, non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub A2_LostFocus()
     A3.SetFocus
     A3.text = calcul(var1,var2)
    End Sub

    Ben justement, je ne veux pas activer ce champ

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 364
    Points : 253
    Points
    253
    Par défaut
    Dans ce cas, une fois que tu as affecter la nouvelle valeur à A3, tu mets le focus sur B1, le focus ne sera plus sur A3

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par tazmania
    Dans ce cas, une fois que tu as affecter la nouvelle valeur à A3, tu mets le focus sur B1, le focus ne sera plus sur A3
    Désolé Tazmania, mais cela risque d'être un peu lourd comme procédé.

    Cela implique que j'active le champ,je me déplace dessus, je lance le calcul, je me déplace dans un autre champ et que je désactive le champ

  8. #8
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Dans ton formulaire tu crées une fonction comme précisé avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Calcul(v1, v2)
      Calcul = Nz(v1, 0) + Nz(v2, 0)
    End Function
    et dans la propriété sourcecontrole de ton champ a3 tu mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =calcul([a1];[a2])
    Tu fais pareil pour b3 et c3 en changeant a1 et a2 par les champs respectifs.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    MERCI à vous deux pour votre aide

    J'ai trouvé comment faire
    Mon problème, c'était de récupérer le résultat d'un calcul et de le placer dans le bon champ

    J'ai utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Property Get
     
    end Property
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function
     
    End Function
    Pour l'exemple que j'ai donné, cela se traduit par
    - pour la function calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Property Get variable3(variable1, variable2)
        variable3 = variable1 * variable2
    end Property
    - pour les résultats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub A2_LostFocus()
       Me.A2 = variable3(Me.A1, Me.A2)
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub B2_LostFocus()
       Me.B2 = variable3(Me.B1, Me.B2)
    end sub


    Encore une fois, merci à vous deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub C2_LostFocus()
       Me.C2 = variable3(Me.C1, Me.C2)
    end sub

  10. #10
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Ton code ne fonctionne pas si l'utilisateur saisie la cellule 2 et revient après modifier la cellule 1, le calcul ne sera pas refais à ce moment.

    Regardes le code que je t'ai fourni, il a l'avantage ne ne pas être tributaire d'un quelconque évènement.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par DelphiManiac
    Ton code ne fonctionne pas si l'utilisateur saisie la cellule 2 et revient après modifier la cellule 1, le calcul ne sera pas refais à ce moment.

    Regardes le code que je t'ai fourni, il a l'avantage ne ne pas être tributaire d'un quelconque évènement.
    Si, mon code fonctionne car j'ai mis la même chose sur la perte focus du champ1.


    Par contre,je suis toujours intéressé pour simplifier.
    Est-ce que ton code fonctionne pour des calculs beaucoup plus compliqués qu'une addition ??


    Mon calcul est le suivant

    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
     
    Dim Db As DAO.Database
    Dim rs As DAO.Recordset
    Dim StrSql As String
    Dim varLimite
    Dim varValeur
    Dim varCompteur
     
    varCompteur = 1 'démarre à 1
     
     
    Set Db = CurrentDb
    StrSql = "SELECT tbl_Coefficient_decroissance.Nom_prestation_coefficient, tbl_Coefficient_decroissance.Limite_coefficient, tbl_Coefficient_decroissance.Valeur_coefficient"
    StrSql = StrSql & " FROM tbl_Coefficient_decroissance"
    StrSql = StrSql & " ORDER BY tbl_Coefficient_decroissance.Nom_prestation_coefficient, tbl_Coefficient_decroissance.Limite_coefficient;"
    Set rs = Db.OpenRecordset(StrSql)
     
    'Sélectionne la limite et la valeur du coefficient dans une table
    rs.MoveFirst
        varLimite = rs.Fields("Limite_coefficient")
        varValeur = rs.Fields("Valeur_coefficient")
        varCalcul = varTemps * (varValeur ^ ((Log(varCompteur) / Log(2))))
        Do
            Do While varCompteur < varNombre_boucle
            varCompteur = varCompteur + 1
            If varCompteur > varLimite Then
                'Sélectionne la limite et la valeur du coefficient suivant
                rs.MoveNext
                varLimite = rs.Fields("Limite_coefficient")
                varValeur = rs.Fields("Valeur_coefficient")
            End If
            varCalcul = varCalcul + varTemps * (varValeur ^ ((Log(varCompteur) / Log(2))))
            Loop
        Loop Until varCompteur = varNombre_boucle
    rs.Close

  12. #12
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Dans l'état ou tu l'avais donné, ton code ne fonctionnait pas, avec la gestion du lostfocus sur le champ1, bien sur que cela fonctionne

    Oui le code que je t'ai fourni fonctionne avec des calcul plus compliqué, vu que les calculs sont dans une fonction, tu n'es pas limité.

    Par contre, si tu veux que le calcul se fasse automatiquement sans avoir a géré les évènement lostfocus, tu dois passer en paramètres toutes les valeurs de tout les controles qui entrent en compte dans le calcul.

    IE : Si ton calcul s'appui sur 3 valeurs saisissables, tu dois créer une fonction qui attend 3 paramètres. Ainsi Access appelle ta fonction des que la valeur d'un controle change et ceci sans ton intervention.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par DelphiManiac
    Oui le code que je t'ai fourni fonctionne avec des calcul plus compliqué, vu que les calculs sont dans une fonction, tu n'es pas limité.
    Je viens de tester ta façon, et ca...


    ...FONCTIONNE


    Un grand merci à toi DelphiManiac

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 223
    Points : 240
    Points
    240
    Par défaut
    euh...
    par contre comme comme le calcul est dans la propriété "sourcecontrole", mon champ n'est plus lié à ma table.
    Comment je fais pour enregister le résultat dans ma table ??

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

Discussions similaires

  1. Ajouter un numéro unique en fonction de plusieurs champs identiques
    Par stephane.s7 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 19/06/2012, 18h21
  2. mapping en fonction de plusieurs champs
    Par laloune dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 17/03/2012, 13h33
  3. Réponses: 4
    Dernier message: 20/04/2011, 14h07
  4. Fonctions communes à plusieurs fichiers
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2010, 12h00
  5. Utilisation d'un resultat de fonction dans plusieurs champ
    Par 2-high dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 03/10/2007, 14h36

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