Calcul dans un formulaire

nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -  
nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour

Je cherche à gérer à faire une petite gestion de paiement des cotisations à l'aide d'access.
J'ai une table qui contient mon fichier d'adhérent (T_adherent), une qui contient la liste des licences (T_licence) et une qui contient le cout de la licence des différents prestataires (T_fede, T_comite, T_ligue, T_club) pour chacune des catégories d'âge : en faisant les bonnes liaisons, j'ai associé une catégorie à son cout de licence pour chaque prestataire. Pour ça, pas de problème.

Dans un formulaire, j'ai calculé le nombre de licenciés selon la catégorie (à l'aide des fonctions CpteDom).
J'ai ajouté une zone de texte dans laquelle je renseigne le nombre de licences payées (suite à facture recue), je peux donc calculer dans ce formulaire dans une zone de texte le nombre de licences qui reste à payer (la différence). Je souhaiterai aller plus loin en calculant la somme qu'il reste à payer : il faudrait donc lier le nombre de licences qui reste à payer au cout de la licence de chaque prestataire pour chaque catégorie d'age.
J'ai essayé de rentrer dans ma source de données de la zone de texte correspondante
=[nb_M7]-[nb_Fede_M7]*[T_Fede]![partFede]


où nb_M7 correspond à la zone de texte qui contient le nombre de licence pour la catégorie M7 (déterminée à l'aide de CpteDom), nb_Fede_M7 correspond à la zone de texte où je renseigne le nombre de licences M7 payées. Le reste ([T_Fede]![partFede]) provient du choix que j'ai fiat en allant dans le générateur d'expression, mon nom de fichier, la table correspondante puis le champ qui contient le cout de la licence pour la fede.
Quand je lance le calcul, j'ai la mention #Nom ?
Je me doute que le problème vient du fait que dans le calcul le champ partFede n'est pas pris en compte puisque j'en ai plusieurs disponibles (un par catégorie) et qu'il n'est pas indiqué quelle catégorie sélectionnée.

Avez-vous une idée pour m'éclairer ?

Merci d'avance

8 réponses

Résumé de la discussion

Le problème porte sur le calcul du montant restant à payer en reliant le nombre de licences non payées au coût des licences par prestataire et par catégorie d'âge dans une base Access. Des explications montrent que l’expression =[nb_M7]-[nb_Fede_M7]*[T_Fede]![partFede] renvoie #Nom? car le coût doit être récupéré pour une catégorie et un prestataire précis, et la référence partFede n’est pas déterminée. Des réponses suggèrent de s’assurer que les valeurs utilisées dans les calculs soient numériques et d’utiliser des requêtes ou tables dédiées pour agréger les parts par catégorie. Pour éviter les erreurs et clarifier les liaisons, centraliser les coûts par prestataire et par catégorie dans une table et calculer le solde par adhérent via des requêtes consolidant parts et tarifs.

Bobot (l'IA à votre service)
  1. castours
     
    bonjour
    Quand on fait un calcul, les champs solicitès doivent êtres en numériques pas en texte
    0
  2. castours
     
    bonjour
    tu es sous access ou excel?
    0
  3. castours
     
    Bonjour
    Peux tu mettre ta base sur le site avec cjoint pour mieux comprendre ton probleme
    0
    1. nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   24
       
      Bonjour

      Je suis sous access. Ma base ici
      Pour ma base, le résultat que je souhaiterai est visible dans le formulaire Formulaire 1.
      0
    2. castours > nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour
      Avant de la mettre sur cjoinr, il faut compresser la base puis faire le lien
      0
    3. Tessel75
       
      Bonjour
      ATTENTION!!!
      J'ai regardé ta base pour voir le problème et je me suis rendu compte que ta base n'est pas anonymisée. Elle porte les noms complets, adresses e-mails et téléphone.
      Je demande la suppression de tes réponses précédentes.
      Bonne suite.
      0
    4. castours > Tessel75
       
      Bonjour Tessel
      Es ce cela qui gene l'ouverture de la base quand je decompresse?
      As tu dans tes archives winzip 8.1 français?
      Merci
      Guy
      0
    5. nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   24 > Tessel75
       
      Bonjour

      Je viens de m'en rendre compte : j'ai supprimé les fichiers correspondants sur Cjoint.
      Je renvoie la base completement anonymisée : ici
      0
  4. castours
     
    bonjour
    merci de ta reponse
    oui j'ai un access 2007 et je vais essayer ta solution
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. castours
     
    bonjour
    cela ne fonctionne pas
    Message reçu
    Format base de données (;users\\desktop`\adherents v6. accdb) nom reconnu
    Que faire?
    0
    1. eljojo_e Messages postés 1255 Statut Membre 155
       
      Alors la, je sèche.. je vais essayer de la convertir en .mdb
      0
    2. eljojo_e Messages postés 1255 Statut Membre 155 > eljojo_e Messages postés 1255 Statut Membre
       
      Ba j'arrive pas à la convertir
      0
    3. castours > eljojo_e Messages postés 1255 Statut Membre
       
      Bonjour
      Tu ne pourras pas. C'est une version inferieur access 2007. on peut convertir access 2003 vers 2007 mais pas l'inversr
      0
    4. nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   24
       
      Ah donc pas possible de m'aider ?
      0
    5. castours > nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour
      Je t'avais envoyé une recommandation de passer tous les champs qui supportent des calculs en numérique. Access ne fait pas de calcul avec du texte.
      0
  7. castours
     
    bonjour
    Je vais essayer de t'aider en envoyant conseils par email si tu veux me donner ton adresse en la copiant sur une page word que tu comresses et tu m'envoie car comment filtres les commentaires ou il y a des adresses mails..
    0
    1. Tessel75
       
      Bonjour Castours,
      Je t'envoie la base de Albmoi
      http://www.cjoint.com/c/EGsklwepIpm
      Elle n'est pas compressée, ce sera plus simple à ouvrir. Je rappelle qu'elle est en .accdb
      Je dois te dire que je n'ai jamais compris ton insistance à toujours vouloir compresser les BDD, alors que Cjoint.com accepte les fichiers jusqu'à 15Mb
      En espérant que tu puisse enfin l'ouvrir.
      Donne des nouvelles.
      Bonne suite.
      0
    2. Tessel75
       
      A Nlbmoi,
      J'ai jeté un oeil rapide à ta base.
      Il me semble que tu pourrais facilement supprimer les 2 ou 3 tables qui n'ont qu'un seul champ.Si les contenus te servent pour des listes de choix, tu dois savoir que tu peux construire tes listes directement avec une requête construite sur le seul champ qui reçoit cette donnée.
      Bonne suite.
      0
    3. castours > Tessel75
       
      Bonjour Tessel

      Toujours le meme probleme format base pas reconnu
      Peut etre version superieur a 2007, alors la , on ne fonctionne pas.
      0
    4. Tessel
       
      J'ai fait une copie en .mdb (2003-2007), essaie si ça passe.
      http://www.cjoint.com/c/EGsrheM3sFm
      0
    5. castours > Tessel
       
      bonjour
      C'est tout bon, j'ai pu ouvrir la base
      Merci de ton aide
      0
  8. Tessel75
     
    Re...,
    Le problème est que je ne suis pas le seul à utiliser la base
    Cela ne change rien au problème; c'est même plus compliqué parce que ça oblige à entrer les nouvelles données exprès et à part pour que la table de référence soit à jour lorsqu'on l'utilise. Alors que si la requête est basée sur le champ seulement, il suffit d'entrée les nouvelles données au fur et à mesure des saisies.
    Il suffit alors d'avoir pour la source, une requête du type:
    SELECT DISTINCT T_TableDEnregistrement.Champ_A_Selectionner FROM T_TableDEnregistrement;
    Et il faut régler la propriété de la liste de choix sur : Limiter à liste = Non
    Au besoin Castours te confirmera.
    Bonne suite à tous les deux.
    0
    1. nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   24
       
      Bonjour

      Je ne comprends pas bien ta méthode : quand tu as une liste de choix dans un formulaire, tu utilises une requête ?
      0
      1. castours > nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
         
        bonjour
        oui tu peux utiliser un requete pour faire un tri croissant de ta liste ou directement de la table.
        0
      2. castours > nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
         
        bonjour
        Il y a plusieurs possibilités de créer un liste déroulante. Tu peux la faire au moment de la création de la table ou dans un formulaire en transformant un champ existant en liste deroulante..
        0
      3. Tessel75 > nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention  
         
        Benh ! Oui ! C'est même la méthode la plus facile à privilégier pour faire une liste déroulante. Mais je laisse Castours te montrer un exemple puisqu'il a commencé à prendre en charge ta demande depuis déjà plusieurs jours.
        0
  9. castours
     
    types de licences et categorie c'est la meme chose?
    0
    1. nlbmoi Messages postés 427 Date d'inscription   Statut Membre Dernière intervention   24
       
      non mais il faut connaître l'un et l'autre pour connaître le montant de la cotisation.
      Si le type de licence est compet VB alors il faut connaître la catégorie pour calculer la cotisation. Pour tous les autres types de licence, c'est le type de licence qui détermine le montant de la cotisation (on paye le même prix quelle que soit sa catégorie).
      J'ai modifié mon fichier pour mettre à jour le champ catégorie de ma table t_adherent à l'aide d'une requête mise à jour avec la fonction CategorieSaison dont le code vba est le suivant (module 2) :
      Public Function CategorieSaison(Annee As Long, Datenaissance As Date, Typelicence As String) As String

      Dim Age As Long
      Dim txtCat2 As String
      Dim Typelicence_str As String

      Age = Annee - Year(Datenaissance)
      Typelicence_str = Typelicence
      If Typelicence_str = "Compet VB" Then
      Select Case Age
      Case Is <= 6
      txtCat2 = "M7"
      Case Is = 7, 8
      txtCat2 = "M9"
      Case Is = 9, 10
      txtCat2 = "M11"
      Case Is = 11, 12
      txtCat2 = "M13"
      Case Is = 13, 14
      txtCat2 = "M15"
      Case Is = 15, 16
      txtCat2 = "M17"
      Case Is = 17, 18, 19
      txtCat2 = "M20"
      Case Is > 19
      txtCat2 = "Senior"
      End Select
      Else
      txtCat2 = Typelicence_str
      End If


      CategorieSaison = txtCat2

      End Function

      Ainsi, on peut déterminer à l'aide de la seule categorie définie ainsi le montant de la licence.
      Le cas de la mutation est un peu différente, car c'est quelque chose en plus de la licence : on paye ce montant en plus de la cotisation lorsqu'on prend une licence Compet VB, categorie senior et que la case Mutation est cochée (dans T_adherent).
      Après, de la même manière que pour le type de licence 2, si c''est trop compliqué à gérer 2 items en même temps, on peut les mettre de côté en attendant.
      0