Aide pour formule requête

Bonsoir,

J'aurai besoin de vos connaissances en access, pour une formule surement très simple qui me pose un souci.

Voila j'ai une colonne comportant un numéro nommé "SOSA", j'aimerai que figure dans une autre Colonne nommé "Degré" le degré du Sosa. Compliqué a comprendre, j'avoue !!

j'ai une Table "Génération" qui comprend 3 colonnes
1. le Degré
2.Numéro minimum
3.Numéro maximum

exemple : Degré
4 = nombre entre 8 et 15 comprit
5= nombre entre 16 et 31 comprit
6= nombre entre 32 et 63 comprit
.....
j'entre le sosa "20" J'aimerai dans la colonne Degré il me met "5"

Que je passe par une table n'est pas obligatoire, il n'a que +/- 15 degrés différent donc j'avait pensé faire une formule dans ma requête
IIF ([Sosa]>32;"6";IIF([Sosa]>16;"5";IIF.....
Mais comme vous vous douter il me met Erreur dans la colonne.

Quel serai pour vous la meilleurs façon d'avoir un bon résultat ? Passant par la table "Génération" ou il fait une recherche OU avec une formule qui pourrais être un peu longue ???

Je vous remercie d'avance pour vos lumières ;-)

6 réponses

  1. Bonjour,

    si tu peux passer via un formulaire, en vba, cela serait simple.

    Mais dans ce cas, ta table "generation" sera inutile, tout sera géré via vba.

    A+
    0
    1. Bonjour HDU,

      Je te remercie pour ta réponse, le petit souci (si je peu dire) sait que je ne connait rien en VBA
      0
    2. @LucasineBonjour,

      peut-être que le temps est venu de t'y mettre...

      Si tu veux exploiter un peu Access, tu vas devoir y passer, tôt ou tard.
      0
  2. Pour le cas qui te concerne, un SELECT CASE fera l'affaire.

    Si tu veux + d'infos, n'hésites pas.

    A+
    0
    1. Si tu veux faire ceci sans vba,

      il faut le faire dans une requête, pas direct dans la table.

      Là, ce que tu mets :

      IIF ([Sosa]>32;"6";IIF([Sosa]>16;"5";IIF..... 
      


      Tu as forcémént une erreur, car si SOSA = 33, il répond aux 2 premiers critères.

      Il faudrait mettre :

      IIF (SOSA >= 8 AND SOSA <=15;"4";IIF (SOSA >=16 AND SOSA <=31;"5";(........................
      

      A+
      --
      Quand Jimmy dit What'd I say 
      I love you baby 
      C'est comme qui dirait 
      Toute la province qui chante en anglais
      0
      1. Merci HDU

        Je vais voir pour me lancer dans le VBA car je voit que beaucoup passe par là pour Access, j'en avait eu un vague aperçu avec une fichier Excel, ca ne doit pas être bien compliquer vu le monde qui travail en VBA ;-). En tout cas, un grand merci pour tes conseils
        0
    2. Bonne initiative !

      Regardes pour ton problème du coté de SELECT CASE.

      a+
      0
      1. Merci, je vais chercher après ca ;-) de plus la formule par requête, ma prit 10min à tapé pour me dire au final que la formule est trop complexe pour être exécuter MDR

        je comprend pourquoi il existe le VBA maintenant lol
        Merci pour tes précieux conseils.

        A bientôt
        0
      2. @LucasineC'est étonnant.

        Tu peux copier / coller ta formule ici ?

        A+
        0
      3. @Utilisateur anonymeJ'ai en mémoire ta base concernant les locataires, si je ne me trompes pas.

        C'est la même ??

        Renvoies ici un lien de ta base en te servant de cjoint.com si tu veux.

        A+
        0
      4. Bonjour HDU, la base des locataires, je l'ai donné à ma collègue, pour qu'elle la continue car je ne m'en sortais pas et qu'elle ai plus caler en access que moi, celle-ci est pour un cousin, qui fait des recherches généalogique est qui vu le nombre de personnes, aimerai une base qui l'aide a géré les recherches a effectuer.

        la formule est IIF([Sosa]>="16384" ET<=[Sosa]<="32767";"15";IIF([Sosa]>="8192" ET<=[Sosa]<="16383";"14";IIF([Sosa]>="4096" ET<=[Sosa]<="8191";"13";IIF([Sosa]>="2048" ET<=[Sosa]<="4095";"12";IIF([Sosa]>="1024" ET<=[Sosa]<="2047";"11";IIF([Sosa]>="512" ET<=[Sosa]<="1023";"10";IIF([Sosa]>="256" ET<=[Sosa]<="511";"9";IIF([Sosa]>="128" ET<=[Sosa]<="255";"8";IIF([Sosa]>="64" ET<=[Sosa]<="127";"7";IIF([Sosa]>="32" ET<=[Sosa]<="63";"6";IIF([Sosa]>="16" ET<=[Sosa]<="31";"5";IIF([Sosa]>="8" ET<=[Sosa]<="15";"4";IIF([Sosa]>="4" ET<=[Sosa]<="7";"3";IIF([Sosa]>="2" ET<=[Sosa]<="3";"2";IIF([Sosa]="1";"1";"0"))))))))))))))

        Comme je disait il a minimum 15 génération, donc quand une 16eme arrivera il sera embété, j'avait pensé a faire passé par une table, mais dur dur, et je ne suis pas encore au point en VBA
        0
      5. @LucasineRe,

        et cette formule te renvoie une erreur ou pas du coup ?

        A+
        0
    3. Bon, j'ai anticipé.

      Voici une table, avec le formulaire, et un code SELECT CASE.

      https://www.cjoint.com/c/FJdwCQsoVsi

      Elle fonctionne, à priori.

      Tiens moi au jus, mais le code vba est facilement compréhensible.

      A+
      0
      1. Ah Cool, merci HDU, ca ma l'air très simple en effet ;-) je teste ca cette après-midi et je passerai le lien Cjoint avec mon fichier des que c fait ;-)
        0
      2. @LucasineAlors ?
        0
      3. Bonjour HDU, je suis désolé, je n'ai pas encore eu beaucoup de temps pour m'y mettre à font, mais je ne manquerai pas de venir te donner le résultat
        0
    4. Contributeur
      Je suggère ceci, à utiliser comme formule dans la requête :

      Int(1 + Log([Sosa] + 0.5) / Log(2))
      0