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 :

Calcul conditionnel sur champ d'un formulaire [AC-2003]


Sujet :

IHM

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut Calcul conditionnel sur champ d'un formulaire
    Bonjour,

    Tout d'abord je vous précise que je suis débutante dans access.

    J'ai une base pour des personnels. Dans cette base, j'ai créé un formulaire pour remplir une table générale (PERSONNELS, c'est original non ?) et d'autres petites tables annexes.

    Voici le problème :

    Je souhaiterais avoir un calcul automatique sur une date dans un champ. Ce champ, "prochainedateechelon" doit afficher une date en fonction de 2 champs "dernieredateechelon" et "reductionanciennete"en ajoutant des années en fonction de 3 critères.

    Ces 3 critères sont les suivants : Corps, grade et echelon.

    Dans une table annexe "ECHELON" j'ai répertorié tous les corps ainsi que les grades de ces corps, les échelons possibles rattachés et (et là c'est LA donnée qui m'intéresse) le temps moyen de passage à l'échelon suivant en fonction de l'échelon dans lequel on se trouve. Euh...suis-je claire ?

    Donc, il faut que dans mon champ "dateprochainechelon", j'aie :

    - Pardon de mon ignorance -

    Si une correspondance Corps, grade et echelon est trouvé dans ma table "ECHELON" alors ajouter à "datedernierechelon" le temps moyen de passage moins le nombre de mois de mon champ "reductionancienneté".

    J'ai essayé, j'ai cherché mais je suis dépassée (et pourtant j'ai envie de faire par moi-même, et de ne pas abandonner).

    Si quelqu'un avait la gentillesse de bien vouloir aider une ignorante qui a envie de comprendre, ce serait top.

    Merci d'avance

    Marie

  2. #2
    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,

    Il n'existe pas de possibilité de faire de calculs à proprement parlé dans une table... Même si la prochaine version d'Access le permettra, je ne suis pas pour conseiller ce choix.

    Plusieurs solutions s'offrent à toi...
    Dans ton champ prochainedateechelon peut s'incrire une fonction qui effectue ce calcul... Il faut alors la rédiger car avec une expression, cela s'avérerait un peu lourd et peu maintenable...

    Pour t'aider, il faudrait que tu nous dises où sont puisées les valeurs "dernieredateechelon" et "reductionanciennete" pour le calcul de ta date...
    1. Sont-elles affichées dans le formulaire ?
    2. Sont-elles dans une autre table ?
    3. Quel lien existe entre la table ECHELON et la table PERSONNELS.
    4. Est-ce que ton formulaire est fondé sur la table PERSONNELS ?


    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 ***

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci de m'avoir répondu.

    Le calcul ne doit effectivement pas se faire dans une table (j'ai lu à sujet qu'il était préférable, d'une manière générale de ne pas stocker ce type de calcul dans une table). Cela se trouve dans mon formulaire !

    J'ai essayé avec le générateur d'expression et sans succès, erreur.

    Les valeurs que tu me demandes "dernieredateechelon" et "reductionanciennete" sont dans des champs de ma table PERSONNELS et qui sont déjà à jour...enfin j'espère...(mais qui vont changer régulièrement).

    1. Oui elles sont dans mon formulaire
    2. Donc, oui elles sont dans ma table PERSONNELS
    3. Là, tu vas te moquer mais bon (je suis preneuse de conseils pour m'améliorer)... Il n'y en a pas !
    4. Oui, mon formulaire est fondé sur ma table PERSONNELS (et il comporte des champs liés à d'autres Tables/Requêtes.

    Merci

    Marie

  4. #4
    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
    Citation Envoyé par bahbiensûr Voir le message
    3. Là, tu vas te moquer mais bon (je suis preneuse de conseils pour m'améliorer)... Il n'y en a pas !
    Humm, c'est pas indispensable mais alors, comment passer les critères à la requête pour identifier leur présence dans la table ECHELON.

    Est-ce que Corps, grade et echelon sont aussi présents dans le formulaire ?
    Si oui, alors, tu peux affecter à ton champ la formule suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = IIf(ProchaineDateEchelonPossible([Corps], [grade], [echelon]); [dernieredateechelon] - [reductionanciennete];"NC")
    La fonction ProchaineDateEchelonPossible est à copier dans un module que tu ajoutes au projet...
    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
     
    Public Function ProchaineDateEchelonPossible(ByVal Corps, ByVal grade, ByVal echelon) As Boolean
    Dim SQL                                                As String
    Dim oRST                                               As DAO.Recordset
    Dim oDB                                                As DAO.Database
    Dim strCriteria                                        As String
     
        On Error GoTo ProchaineDateEchelonPossible_Error
        Set oDB = CurrentDb()
        SQL = "SELECT * FROM ECHELON"
        strCriteria = "Corps='" & Corps & "' AND grade='" & grade & "' AND echelon='" & echelon & "'"
        Set oRST = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRST
            .FindFirst strCriteria
            If .NoMatch Then
                Err.Raise 3021
            End If
            .Close
        End With
        oDB.Close
        ProchaineDateEchelonPossible = True
        On Error GoTo 0
    ProchaineDateEchelonPossible_Exit:
        Set oRST = Nothing
        Set oDB = Nothing
        Exit Function
    ProchaineDateEchelonPossible_Error:
        ProchaineDateEchelonPossible = False
        Resume ProchaineDateEchelonPossible_Exit
    End Function
    La compréhension de ce code va nécessiter une familiarisation de ta part avec les tutoriels disponibles sur ce forum.

    Sinon, bien je ne sais pas comment tu peux vérifier leur présence dans la table...

    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 ***

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Re,

    Oui mes champs sont dans mon formulaire donc je vais tester, vérifier l'exactitude de mes noms de champ et de table. Pour le code, je me doutais bien qu'il fallait en passer par là (mais même si ça me parle un peu - j'ai fait des pages web avec des requêtes asp -) je n'aurais jamais été incapable de faire le millionième de ce que tu m'as proposé.

    Un grand merci pour ton aide et dès que j'ai testé je repost pour te dire.

    Je suis très heureuse de voir que les forums : c'est aussi facile et efficace...(c'est ma première fois )

    A très vite

    Marie

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Re,

    Je disais donc que j'allais tester mais avant j'ai lu un peu le code et sauf si je me trompe, il manque un élément essentiel (celui qui est je pense le plus important) - mais je me suis sans doute mal exprimée...pas toujours facile de coucher cela par écrit.

    Donc ce dont j'ai besoin, c'est de récupérer une donnée dans ma table ECHELONS, "temps moyen de passage d'échelon" !

    J'explique pour exemple

    M. X est Conservateur des bib (corps), 2ème classe (grade) et au 2ème échelon au 01/01/2001.

    Je voudrais afficher automatiquement la date à laquelle il passe au 3ème échelon sachant que dans ma table ECHELON j'ai un enregistrement qui me dit (par exemple, j'ai pas vérifié).

    Corps/Grade/Echelon/TempsMoyenPassageEchelon
    Conservateur des bib / 2ème classe / 2 / 2.5

    et donc qui affiche dans mon formulaire : 01/06/2003 (s'il n'a pas de réduction d'ancienneté) ou par exemple 01/01/2003 (s'il a une réduction de 6 mois).

    Est-ce que c'est mieux ?

    Merci

    Marie

  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
    Humm, oui...
    Il suffit de modifier la fonction et qu'elle retourne directement le résultat s'il y a correspondance...
    Je vais regarder et te dire ça...

    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
    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
    Bon, je reviens sur le sujet par de question...
    Que représente 2.5, des mois ?

    Quand tu cites :
    M. X est Conservateur des bib (corps), 2ème classe (grade) et au 2ème échelon au 01/01/2001.
    où est dans cet état la date 01/01/2001, dans le champ prochainedateechelon ?
    Et celle de 01/06/2003 ?

    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 ***

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    j'étais justement en train de me familiariser avec les modules pour comprendre un peu de quoi est fait le code proposé.

    Donc 2.5 ce sont des années, après je ne sais pas s'il est possible de scinder des années (j'ai essayé avec la fonction ajdate mais j'ai pas réussi), c'est pourquoi je m'étais tourné vers une transformation en mois. Dois-je tout mettre en mois ?

    - Dans ma table personnels j'ai les champs Corps, grade, echelon, datedernierechelon, dateprochainechelon et moisréduction (qui est la réduction du temps moyen de passage d'échelon, si on a bien travaillé ) - au départ les données étaient saisies dans excel...

    Ex :
    Nom | prénom | blabla | Corps | Grade | Echelon | DateDernierEchelon | MoisRéduction | DateProchainEchelon | blabla

    - dans ma table echelons j'ai listé tous les corps et dans chaque corps tous les grades et dans chaque grade tous les echelons et pour chaque échelon de chaque grade et de chaque corps, le fameux "Tempsmoyendepassageechelon" :

    Ex :

    Conservateur | 2ème classe | echelon 1 | 1 an

    Conservateur | 2ème classe | echelon 2 | 2 ans

    Conservateur | 2ème classe | echelon 3 | 2 ans

    Conservateur | 2ème classe | echelon 4 | 2.5 ans

    Conservateur | 2ème classe | echelon 5 | 3 ans

    Et je cherche à faire coïncider ces données entre mes deux tables (Si le corps, le grade et l'échelon sont les mêmes dans les 2 tables alors la date du prochain échelon....sera calculé entre la datedernieréchelon + TempsMoyenpassageechelon - MoisRéduction.

    Je suis d'accord avec la maxime qui dit que ce qui ce concoit bien, s'énonce clairement et mots pour le dire nous viennent aisément.

    En fait je sais : ajouter une date, voire soustraire une durée à cette date mais faire coïncider les champs, pfiouuuuuuuuuuuuu

    Merci

    Marie

  10. #10
    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
    c'est pourquoi je m'étais tourné vers une transformation en mois. Dois-je tout mettre en mois ?
    L'idéal est en jours...
    En années, si tu n'es pas fachée avec les bixestiles, on peut convertir...
    2.5 ans si je maîtrise encore la table de 12, humm, ce doit faire pas loin de 30 mois.
    En mois, il y a les phalanges pour se rappeler mais Access est plus exigeant et nous oblige à différencier les 28-29-30 et 31 jours...

    Bon sinon, rien de compliqué...
    Mais il faut que Tempsmoyendepassageechelon soit numérique...
    Je crois avoir saisi que si ça match avec la table échelon, on transforme alors la fonction comme suit :

    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
    36
    Public Function ProchaineDateEchelon(ByVal Corps As String, ByVal grade As String, ByVal echelon As String, ByVal datedernieréchelon As Date, ByVal MoisRéduction As Single) As Date
    Const MOYENNE_MOIS                                     As Single = 30.41
    Const MOYENNE_ANNEE                                    As Single = 365.25
    Dim SQL                                                As String
    Dim oRST                                               As DAO.Recordset
    Dim oDB                                                As DAO.Database
    Dim strCriteria                                        As String
    Dim sngYearToDays                                      As Single
    Dim sngMonthToDays                                     As Single
     
        On Error GoTo ProchaineDateEchelon_Error
        Set oDB = CurrentDb()
        SQL = "SELECT * FROM ECHELON"
        strCriteria = "Corps='" & Corps & "' AND grade='" & grade & "' AND echelon='" & echelon & "'"
        Set oRST = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRST
            .FindFirst strCriteria
            If .NoMatch Then
                Err.Raise 3021
            Else
                sngYearToDays = (.Fields("TempsMoyenpassageechelon").Value * MOYENNE_ANNEE)
                sngMonthToDays = MoisRéduction * MOYENNE_MOIS
                ProchaineDateEchelon = datedernieréchelon + sngYearToDays - sngMonthToDays
            End If
            .Close
        End With
        oDB.Close
        On Error GoTo 0
    ProchaineDateEchelon_Exit:
        Set oRST = Nothing
        Set oDB = Nothing
        Exit Function
    ProchaineDateEchelon_Error:
        ProchaineDateEchelon = 0
        Resume ProchaineDateEchelon_Exit
    End Function
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ?ProchaineDateEchelon("Conservateur","2ème classe","echelon 3",#31/12/2009#,2)
    Renvoie : 31/10/2011

    Donc dans ton form, le champ reçoit la nouvelle formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = ProchaineDateEchelon([Corps]; [grade]; [echelon]; [DateDernierEchelon]; [MoisRéduction])
    C'est ça ?

    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 ***

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Re,

    et bien oui en théorie, et si je comprends bien, c'est ça.

    Je dis en théorie car, après avoir vérifié la concordance de mes noms de champs et de tables (Majuscules, etc...), ben j'ai #nom? dans mon champ de formulaire.

    Je vais chercher encore un peu, j'ai dû oublier shmoulk quelque part.

    Dès que je trouve je repost. Et si je ne trouve pas, je repost

    Merci en tous cas, pour ton aide et ton temps jusqu'à maintenant.

    Marie

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    c'est encore moi.

    Je sais que je m..... quelque part mais je n'ai pas trouvé où. J'ai vu un poste sur les #nom?, je suis allée voir sur le site de microsoft.

    Je me suis dit que mes 2 tables avaient les mêmes nom de champs et que cela devait poser problème. J'ai donc ajouté un 1 sur les noms de champs d'une table, j'ai changé dans le code... Je me suis dit, que c'était pas les bons que j'avais changé donc j'ai interverti (ben oui moi je sais faire les fondants au chocolat mais pas les modules à la noix...). Et pis toujours rien, et puis j'ai mal à la tête, alors j'ai pris un café et je suis revenue à la charge et cherche et trouve et teste et là : ben j'y arrrrrrrrrrrrrrrrriveeeeeeeee pas

    En plus, je suis tellement nulle, qu'access me dit que la syntaxe de mon expression n'est pas correcte...pourtant madameu j'vous jure que je n'ai rien touché à ta formule : si j'ai mis un =, un iif, sans iif, sans égal, avec des virgules, des points virgules.

    C'est vendredi, mon 7ème jour sans tabac, pas de sucre et je suis toute seule dans mon bureau........

    Bon j'arrête, plus sérieusement, tu as une idée ? Est-ce vraiment le fait que mes champs aient le même nom dans 2 tables distinctes ?

    Marie

  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
    Pas 36 solutions...

    Cette erreur est caractéristique d'un nom manquant ou erroné...
    La formule doit être enrichie avec le nom des contrôles présents dans le formulaire...
    • Où as tu écris la fonction, dans un module ou dans le formulaire ?
    • N'y as t-il pas une omission du style avoir laissé "ProchaineDateEchelonPossibe" à la place de "ProchaineDateEchelon"
    • Tes champs sont accentués (ce qui est une erreur), n'as tu pas omis un accent.
    • Les noms des champs et le nom des contrôles sont 2 choses distinctes;
    • Le contrôle textboxe txtNomFamille (Name) peut faire référence au champ (ControlSource) NomFamille...

    Vois cela et reviens.

    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
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Je suis encore dans le coin car je cherche sur le forum...

    Alors :

    J'ai plus #nom? mais...j'ai un champs toujours vide maintenant (c'est sympa aussi)

    Ma fonction est dans un module. Tout est ok et j'ai tout remis comme au départ.
    Noms de champs # champs contrôle (ça c'est ok)
    Mes champs sont accentués car quand j'ai fait ma recherche sur internet au moment de l'importation de ma base excel > access (et oui, j'avais déjà des soucis dès le début), j'ai vu qu'on pouvait mettre des accents : surtout pour dateechelon

    Revenons à nos moutons

    >>> Dans les propriétés de mon champ (et c'est peut-être là que ça coince...) J'ai :
    =VraiFaux(ProchaineDateEchelon([Corps];[Grade];[Echelon]);[DateDernierEchelon];[MoisRéduction])

    >>> dans Evénements avant MAJ car je voudrais qu'il me colle tout bien avant même de faire quoi que ce soit, on verra après les modifs (c'est pas là qu'il faut le mettre ?, car en source contrôle j'ai mon champ de départ de ma table PERSONNELS - qui, soit dit en passant, est vide maintenant, pour le test )

    Je ne désespère pas

    Marie

  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
    Humm... modifie comme ceci la fonction :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    Public Function ProchaineDateEchelon(ByVal Corps As String, ByVal grade As String, ByVal echelon As String, ByVal datedernieréchelon As Date, ByVal MoisRéduction As Single) As Date
    Const MODE_TEST = True 'Mettre false dès que ça marche
    Const MOYENNE_MOIS                                     As Single = 30.41
    Const MOYENNE_ANNEE                                    As Single = 365.25
    Dim SQL                                                As String
    Dim oRST                                               As DAO.Recordset
    Dim oDB                                                As DAO.Database
    Dim strCriteria                                        As String
    Dim sngYearToDays                                      As Single
    Dim sngMonthToDays                                     As Single
     
        On Error GoTo ProchaineDateEchelon_Error
        Set oDB = CurrentDb()
        SQL = "SELECT * FROM ECHELON"
        strCriteria = "Corps='" & Corps & "' AND grade='" & grade & "' AND echelon='" & echelon & "'"
        Set oRST = oDB.OpenRecordset(SQL, dbOpenDynaset)
        With oRST
            .FindFirst strCriteria
            If .NoMatch Then
                Err.Raise 3021
            Else
                sngYearToDays = (.Fields("TempsMoyenpassageechelon").Value * MOYENNE_ANNEE)
                sngMonthToDays = MoisRéduction * MOYENNE_MOIS
                ProchaineDateEchelon = datedernieréchelon + sngYearToDays - sngMonthToDays
                If MODE_TEST Then
                    MsgBox datedernieréchelon + sngYearToDays - sngMonthToDays & ";" & vbCrLf & _
                           " - datedernieréchelon=" & datedernieréchelon & vbCrLf & _
                           " - MoisRéduction=" & sngMonthToDays & vbCrLf & _
                           " - TempsMoyenpassageechelon=" & sngYearToDays
                End If
            End If
            .Close
        End With
        oDB.Close
        On Error GoTo 0
    ProchaineDateEchelon_Exit:
        Set oRST = Nothing
        Set oDB = Nothing
        Exit Function
    ProchaineDateEchelon_Error:
        ProchaineDateEchelon = 0
        Resume ProchaineDateEchelon_Exit
    End Function
    Bon WE, les abeilles m'appellent...

    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 ***

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Hello,

    Passé un bon week-end avec les abeilles ? Moi j'en ai peur (c'est con hein ?)

    Bon, alors sinon, j'ai fait un autre test avec les modifications prescrites par le Dr Argy...

    Et Access me dit : "L'expression entrée comporte un nom de fonction introuvable", malpoli n'est-ce pas ? Pourtant, si je passe par le générateur d'expression, elle est bien là dans le dossier fonctions.

    Was passiert ?

    Marie

  17. #17
    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
    Moi j'en ai peur (c'est con hein ?)
    Oh que oui !!!
    Imagine une seconde que sans elles, tu n'auras plus de certains fruits, plus de certains légumes et plus de miel évidemment. Et malheureusement elles disparaissent. T'as pas vu la vidéo dernièrement !!!
    Et pis autre chose, elles piquent pas les abeilles, sauf si tu vas leur chatouiller sous les bras dans leur ruche.

    Bon, tu es pardonnée si tu signes la charte

    Bon pour le sujet en cours, la fonction doit être implantée dans un module.
    Depuis VBE, tu dois avoir ajouté un nouveau module depuis le menu Insertion et dans ce module y copier la fonction et vérifier qu'elle est préfixée Public.

    Il ne faut pas passer par le générateur...

    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 ***

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Re

    Elle est dans un module ! Promis !!!

    Je t'expliquais juste que si je clique sur le générateur d'expression dans mon champ où j'ai collé mon vraiFaux, si je lance le générateur d'expression pour tester mes champs, mes tables, mes fonctions etc...la fonction est bien dans son petit dossier joli beau.

    De plus, en cherchant sur le site j'ai vu que j'avais fait une connerie en nommant mon module du même nom que ma fonction, donc je l'ai renommé (mon module bien sûr) et là, nouveau gros mot d'Access (décidément !) : "L'expression entrée comporte une fonction dont le nombre d'arguments n'est pas correct".

    Bon et pis comme j'adore le miel, les confitures et les costumes d'abeille pour enfants, je svais signer ta charte. Parce que je crie quand je les vois mais je n'ai jamais tué une abeille !!!

    Marie

  19. #19
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2010
    Messages : 30
    Points : 4
    Points
    4
    Par défaut
    Charte signée

  20. #20
    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
    Merci...
    De plus, en cherchant sur le site j'ai vu que j'avais fait une connerie en nommant mon module du même nom que ma fonction
    Ouh là, tu n'es pas la seule...

    "L'expression entrée comporte une fonction dont le nombre d'arguments n'est pas correct".
    Donc elle est trouvée mais là, il faut que tu regardes si tu as passé tous les champs nécessaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function ProchaineDateEchelon(ByVal Corps As String, ByVal grade As String, ByVal echelon As String, ByVal datedernieréchelon As Date, ByVal MoisRéduction As Single) As Date
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = ProchaineDateEchelon([Corps], [grade], [echelon]; [DateDernierEchelon]; [MoisRéduction])
    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 ***

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 25
    Dernier message: 09/02/2009, 15h13
  2. Selection conditionnelle sur champ date
    Par Hmiachon dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/04/2008, 15h56
  3. Calcul conditionnelles sur BO 6.5
    Par kinji dans le forum Deski
    Réponses: 8
    Dernier message: 20/11/2007, 15h10
  4. Réponses: 2
    Dernier message: 31/05/2007, 14h24

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