Besoin d'aide pour des if imbriqué

jose7896 Messages postés 4 Statut Membre -  
jose7896 Messages postés 4 Statut Membre -
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

  1. luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention   1 177
     
    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
  2. jose7896 Messages postés 4 Statut Membre
     
    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
    1. luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention   1 177
       
      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
  3. jose7896 Messages postés 4 Statut Membre
     
    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
    1. luckydu43 Messages postés 4497 Date d'inscription   Statut Membre Dernière intervention   1 177
       
      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
  4. jose7896 Messages postés 4 Statut Membre
     
    jai essayé ça ne marche toujours pas. je vais essayé de m'inspirer de ce vous avez fait pour avancer.
    0