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 :

Champ automatique sur un formulaire


Sujet :

IHM

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Champ automatique sur un formulaire
    Bonjour à tous

    Voilà ma situation : J'ai un formulaire relié à une table dans lequel je renseigne notamment 3 notes dans trois champs (notes de A à C pour les champs S, C et P). Le champs suivant devrait être une synthèse de ces trois notes et afficher une note globale de A à C selon trois règles :
    - deux notes identiques donnent la note finale
    - la présence d'un C interdit une note finale de A
    - ABC donne B

    J'ai essayé de saisir dans l'éditeur d'expression une formule à grande doses de IIf avec tous les cas possibles (oui, je suis patient....) mais.... un message d'erreur m'indique que l'expression est trop complexe ou trop longue.

    Il y a surement plus simple.... Merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Prinièrement quand je rencontre un cas comme cela je crée une fonction public en VBA que j'affecte ensuite au champ.

    L'avantage du VBA c'est que le debugage et le test y sont plus facile.

    Seconde astuce c'est de remplacer tes lettres par des valeurs numériques, d'en faire la moyenne, puis, de convertir cette moyenne en lettre.

    Désolé je n'ai pas le temps de te donner plus de détails.

    A+

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse vive et fluide...


    EN revanche, je ne comprends pas tout ce que tu dis (surtout pour le VBA)...alors si un jour tu as le temps... peut être alors pourras tu détailler ce qui est aujourd'hui l'énigme de ma journée...

    Sincères salutations.. et à bientôt ...

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Tu peux utiliser un fonction que tu programme toi même en VBA.

    Tu vas dans module, créer un nouveau module et tu y copie le code 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    public function CalculerNote(prmNote1 as string, prmNote2 as string, prmNote3 as string) as string
     
       dim result as string
     
       if result="" then
         'Décide à la majorité
     
         if (prmNote1=prmNote2 and prmNote1=prmNote3) then
             result=prmNote1
         else if (prmNote2=prmNote3) then 
             result=prmNote2
         end if
     
         if (prmNote1="C" or prmNote2="C" or prmNote3="C") and result="A" then
           'Il y a un C, la note max est B
           result="B"
         end if
     
       end if
     
       if result="" then
         'Il n'y a pas eu de majorité et pas de C, calcul de la moyenne
     
         dim m as single
         dim partieEntiereM as single
         dim partieDecimaleM as single
         dim n1 as single:n1=RemplacerLetttreParValeur(prmNote1)
         dim n2 as single:n2=RemplacerLetttreParValeur(prmNote2)
         dim n3 as single:n3=RemplacerLetttreParValeur(prmNote3)
     
         m=(n1+n2+n3)/3
         partieEntiereM=int(m)
         partieDecimaleM=m-partieEntiereM
     
         'Traite l'arrondi à la main pour avoir un meilleur contrôle.
         if partieDecimaleM>=.5 then
             m=partieEntiereM+1
           else
             m=partieEntiereM
         end if
     
         result=RemplacerValeurParLettre(m)       
      end if
     
      CalculerNote=result
    end function
     
    private function RemplacerLetttreParValeur(prmLettre as string) as single
       dim result as single
       select case prmLettre
          case "A":result=1
          case "B":result=2
          case "C":result=3
          case else
             error(5) :'Pas supposé arriver
       end select
     
       RemplacerLetttreParValeur=result
    end function
     
    private function RemplacerValeurParLettre(prmValeur as single) as string
       dim result as string
       select case prmValeur
          case 1:result="A"
          case 2:result="B"
          case 3:result="C"
          case else
             error(5) :'Pas supposé arriver
       end select
     
       RemplacerValeurParLettre=result
    end function
    Dans ton champ tu mets =CalculerNote([S];[C];[P])

    A+

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Salut Marot !
    Merci bien d'avoir pris de temps de me répondre. J'ai essayé donc ce que tu m'as proposé (je viens donc de découvrir la fonction "modules" !!) mais je me heurte à un problème plus bas... où dois-je mettre la formule "=CalculerNote([S];[C];[P])" ?? Directement dans la table en mode création ou dans mon formulaire dans l'éditeur d'expressions ?
    J'ai essayé les deux et j'arrive au même message d'erreur : "Syntaxe SQL non valide - impossible d'utiliser plusieurs colonnes dans une contrainte de colonne de niveau CHECK"

    Une solution ??

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Citation Envoyé par chawiken Voir le message
    Directement dans la table en mode création ou dans mon formulaire dans l'éditeur d'expressions ?
    Tu ne peux pas le faire dans la table, ce n'est simplement pas possible. Tu peux utiliser la fonction dans une requète, dans un formulaire ou un rapport (état).

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    De plus on ne garde généralement pas le résultat d'un calcul dans une table. Ca si les éléments qui composent le calcul change souvant le résultat n'est pas mis à jour.

    A+

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

Discussions similaires

  1. [WD-2010] Champ automatique sur formulaire verrouillé
    Par syl67 dans le forum Word
    Réponses: 1
    Dernier message: 05/12/2014, 11h17
  2. Ajout de champs automatique sur la colonne A
    Par cedill23 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2010, 14h29
  3. [AC-2007] Champs automatique dans nouveau formulaire
    Par obel38 dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/03/2010, 00h12
  4. Réponses: 2
    Dernier message: 18/11/2008, 14h49
  5. Remplir des champs automatiquement sur un site
    Par Invité dans le forum Débuter
    Réponses: 4
    Dernier message: 09/05/2008, 01h04

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