Besoin d'aide pour des if imbriqué

Fermé
jose7896 Messages postés 4 Date d'inscription vendredi 23 décembre 2016 Statut Membre Dernière intervention 23 décembre 2016 - 23 déc. 2016 à 10:40
jose7896 Messages postés 4 Date d'inscription vendredi 23 décembre 2016 Statut Membre Dernière intervention 23 décembre 2016 - 23 déc. 2016 à 14:02
Bonjour,
je voudrai faire un if imbriqué qui resemblerai à ça :

IF([@Etat]="Planifié";IF([@[K ZZR Last Assigned Date]]=""; IF([@[K O Appointment Date]]<(TODAY()-8); "défaut"; "ok"); IF([@[K ZZR Last Assigned Date]]<(TODAY()-8); "défaut"; "ok");if([@[K ZZR Last Assigned Date]]<([@[K O Appointment Date]];IF([@[K O Appointment Date]]<(TODAY()-8); "défaut"; "ok");if([@[K ZZR Last Assigned Date]]<([@[K O Appointment Date]];IF([@[K O Appointment Date]]<(TODAY()-8); "défaut"; "ok"))))));"ok";)

je pense que j'ai un probleme organisation des if.

merci

4 réponses

luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
Modifié par luckydu43 le 23/12/2016 à 10:59
Bonjour

Dejà, éclaircir le code permet d'un coup d'un seul d'y voir plus clair.
Là, on frôle l'obfuscation ^^
IF(
    [@Etat]="Planifié";
    IF(
        [@[K ZZR Last Assigned Date]]="";
        IF(
            [@[K O Appointment Date]]<(TODAY()-8);
            "défaut";
            "ok"
        );
        IF(
            [@[K ZZR Last Assigned Date]]<(TODAY()-8);
            "défaut";
            "ok"
        );
        IF(
            [@[K ZZR Last Assigned Date]]<(
                [@[K O Appointment Date]];
                IF(
                    [@[K O Appointment Date]]<(TODAY()-8);
                    "défaut";
                    "ok"
                );
                IF(
                    [@[K ZZR Last Assigned Date]]<(
                        [@[K O Appointment Date]];
                        IF(
                            [@[K O Appointment Date]]<(TODAY()-8);
                            "défaut";
                            "ok"
                        )
                    )
                )
            )
        )
    );
    "ok";
)


J'y regarde et je te dis si je trouve quelque facteur commun pour réduire le tout.
N'hésite pas à prévenir si tu te rends compte que la condition booléenne que tu nous as livrée est erronée, puisqu'on se base dessus pour te répondre ^^
Les 3 plus grands mensonges du dev : 
1. La doc ? On la fera plus tard... 2. Le programme a été testé et ne comporte aucun bug... 3. Les spécifications techniques sont finies...
0
jose7896 Messages postés 4 Date d'inscription vendredi 23 décembre 2016 Statut Membre Dernière intervention 23 décembre 2016
23 déc. 2016 à 11:06
Merci de votre réponse. en effet bonne idée d'éclaircir le code. la condition est bonne. c'est vraiment la syntaxe qui me pose probleme.
0
luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
Modifié par luckydu43 le 23/12/2016 à 11:42
Alors en fait j'ai du mal à comprendre ce que vous avez fait.
J'essaie des choses, mais visiblement ça ne va toujours pas.
IF(
    [@Etat]="Planifié";
    IF(
        [@[K ZZR Last Assigned Date]]="";
        IF(
            [@[K O Appointment Date]]<(TODAY()-8);
            "défaut";
            "ok"
        );
        IF(
            [@[K ZZR Last Assigned Date]]<(TODAY()-8);
            "défaut";
            "ok"
        );
        IF(
            (([@[K ZZR Last Assigned Date]] < [@[K O Appointment Date]]) 
                AND [@[K O Appointment Date]]<(TODAY()-8));
            "défaut";
            "ok"
        );  
    );
    "ok";
) 


La deuxième condition IF (ligne 3) ne marchera pas puisqu'elle a 4 paramètres (dont 3 sont des conditions if imbriquées).
Il ne lui en faut que 3 maxi. Et ce "léger détail" est présent dès le départ....
Essayez de commenter votre code. De dire ce que vous comptez faire.
Là... j'ai juste identifié du code en doublon, c'est tout ^^
0
jose7896 Messages postés 4 Date d'inscription vendredi 23 décembre 2016 Statut Membre Dernière intervention 23 décembre 2016
23 déc. 2016 à 11:50
IF(
[@Etat]="Planifié"; // si état = planifié
IF(
[@[K ZZR Last Assigned Date]]=""; // si last assigned date est vide
IF(
[@[K O Appointment Date]]<(TODAY()-8); // si ko apointemnt date est inferieur à today - 8
"défaut"; // afficher defaut
"ok" // sinon afficher ok
);
IF(
[@[K ZZR Last Assigned Date]]<(TODAY()-8);
"défaut";
"ok"
);
IF(
(([@[K ZZR Last Assigned Date]] < [@[K O Appointment Date]]) // si last assigned date est inferieur à appointement date
AND [@[K O Appointment Date]]<(TODAY()-8));
"défaut";
"ok"
);
);
"ok";
)
0
luckydu43 Messages postés 3484 Date d'inscription vendredi 9 janvier 2015 Statut Membre Dernière intervention 30 juin 2022 815
Modifié par luckydu43 le 23/12/2016 à 13:46
Ok.
Alors essayez ça :
IF(
    [@Etat]="Planifié"; // si état = planifié
    // si last assigned date est vide
    IF(
        [@[K ZZR Last Assigned Date]]=""; 
        // si ko apointemnt date est inferieur à today - 8
        IF(
            [@[K O Appointment Date]]<(TODAY()-8); 
            IF(
                [@[K ZZR Last Assigned Date]]<(TODAY()-8);
                // si last assigned date < à appointement date
                IF(
                    (
                    ([@[K ZZR Last Assigned Date]] 
                        < [@[K O Appointment Date]]
                    )
                    AND [@[K O Appointment Date]]<(TODAY()-8));
                    "défaut";
                    "ok"
                 );
                 // Faudrait peut-être mettre un "ok"; ici, à voir avec
                 // les tests unitaires...
            );
            "ok"
        );
        "ok" // sinon afficher ok
    );
    "ok";
)


J'ai un peu édité mon post après l'avoir posté... n'hésitez pas à rafraîchir la page
0
jose7896 Messages postés 4 Date d'inscription vendredi 23 décembre 2016 Statut Membre Dernière intervention 23 décembre 2016
23 déc. 2016 à 14:02
jai essayé ça ne marche toujours pas. je vais essayé de m'inspirer de ce vous avez fait pour avancer.
0