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 :

Un souci sur une formule à 8 conditions


Sujet :

Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    approvisionneur
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : approvisionneur

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Un souci sur une formule à 8 conditions
    Bonjour,
    Je travaille sur un dossier consommation sur plusieurs années qui va m'aider à isoler les pièces que j'ai en stock mais qui ne tourne plus pour pouvoir les vendre. La formule que je cherche doit calculer le prix de la pièce en fonction de la remise et du conditionnement, à savoir que j'ai des remise en % et des remises en €.
    Mon chargé d'étude m'a donné comme info cette formule:
    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
    if {p_objsppl.PrcUnitInCde}=1 then 
        if {p_objsppl.DctCde}=1 then
                if {p_obj.ClassInCde} in [1,22,82,140] 
                then {p_objsppl.ObjSpplObjPrc}*(1-{p_objsppl.DctVal}/100) 
                else 0
        else if {p_objsppl.DctCde}=2 then
                if {p_obj.ClassInCde} in [1,22,82,140] 
                then {p_objsppl.ObjSpplObjPrc}-{p_objsppl.DctVal}
                else 0
    else if {p_obj.ClassInCde} in [1,22,82,140] then
         if {p_objsppl.DctCde}=1 then
                    ({p_objsppl.ObjSpplObjPrc}/{r_unitcnv.ToUnitQty})*(1-{p_objsppl.DctVal}/100)
                else 0
        else if {p_objsppl.DctCde}=2 then
                    (({p_objsppl.ObjSpplObjPrc}/{r_unitcnv.ToUnitQty})-(({p_objsppl.DctVal}/100)/{r_unitcnv.ToUnitQty}))
                else 0
    Mais je suis incapable de le retranscrire sur un champ ou je peux utiliser le générateur. J'ai essayé quand même de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf([dbo_p_objsppl]![PrcUnitInCde]=1;IIf([dbo_p_objsppl]![DctCde]=2;IIf([dbo_p_obj]![ClassInCde]=1 Or (dbo_p_obj.ClassInCde)=22 Or (dbo_p_obj.ClassInCde)=82 Or (dbo_p_obj.ClassInCde)= 14;[dbo_p_objsppl.ObjSpplObjPrc]*(1-[dbo_p_objsppl.DctVal]/100);0;IIf([dbo_p_objsppl]![DctCde]=2;Iif([dbo_p_obj]![ClassInCde]=1Or(dbo_p_obj.ClassInCde)=22 Or (dbo_p_obj.ClassInCde)=82 Or (dbo_p_obj.ClassInCde)=14;0 ; IIf([dbo_p_obj]![ClassInCde]=1Or(dbo_p_obj.ClassInCde)=22 Or(dbo_p_obj.ClassInCde)= 82 Or(dbo_p_obj.ClassInCde)=14;IIf( [dbo_p_objsppl]![DctCde]=1;([dbo_p_objsppl.ObjSpplObjPrc]/[dbo_r_unitcnv.ToUnitQty])*(1-[dbo_p_objsppl.DctVal]/100);0;Iif(([dbo_p_objsppl.DctCde]= 2; (([dbo_p_objsppl.ObjSpplObjPrc]/[dbo_r_unitcnv.ToUnitQty])-(([dbo_p_objsppl.DctVal]/100)/[dbo_r_unitcnv.ToUnitQty]));0))))))))
    Mais ACCESS me donne en erreur "L'expression entrée comporte une fonction dont le nombre d'arguments n'est pas correct"

    J'espère qu'une âme charitable pourra m'aider.
    Merci beaucoup

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pas cool ton truc.

    La meilleure solution serait de faire une fonction VBA dans un module qui prendrait tes champs en paramètre et où tu programmerai ta logique.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function MonCalcul(prmPrcUnitInCde as long, prmDctCde as long, prmClassInCde as long, prmObjSpplObjPrc as double, prmDctVal as double, prmToUnitQty as double) as double
        'ici la logique pour calculer ton résultat.
    end function
    Après tu n'as plus qu'à appeler cette fonction comme n'importe quelle fonction intégrée d'Access.

    Bon, si tu ne peux pas alors procède par étape.

    Quelque chose comme :

    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      iif([p_objsppl].[PrcUnitInCde]=1; "Vrai, PrcUnitInCde=1"; "Faux, PrcUnitInCde<>1")
      Tu enregistres et tu valides que ça marche.
    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      iif([p_objsppl].[PrcUnitInCde]=1; iif([p_objsppl].[DctCde]=1; "Vrai, [DctCde]=1"; "Faux, [DctCde]<>1");  "Faux, PrcUnitInCde<>1")
      Tu enregistres et tu valides que ça marche.
    3. et ainsi de suite.


    Ça sera plus facile de trouver où tu as un problème et te repérer dans ta méga-formule.
    De plus il me semble que le nombre de iif() qu'on peut imbriquer est limité à 7 mais je ne me suis jamais rendu jusque là.

    Et mets des espaces avant et après tes Or, je ne sais pas si cela aide Access mais cela aide un humain c'est certain.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    approvisionneur
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : approvisionneur

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide, je vais tester dans ce sens et le rendre plus clair effectivement. Je pensais qu'il fallait tout coller. My Bad

Discussions similaires

  1. [Toutes versions] Besoin d'aide pour une formule
    Par stephane78400 dans le forum Excel
    Réponses: 13
    Dernier message: 01/11/2014, 10h43
  2. Besoin d'aide pour une formule excel.
    Par passio dans le forum Excel
    Réponses: 9
    Dernier message: 31/01/2012, 01h35
  3. Besoin d'aide pour une formule récalcitrante
    Par houdy dans le forum Excel
    Réponses: 2
    Dernier message: 01/01/2011, 11h35
  4. [OpenOffice][Tableur] Besoin d'aide pour une formule: colorer fond cellule suivant un chiffre
    Par bennji dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 26/01/2009, 13h47

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