Fonction IF avec plusieurs condtions (Or)

  • Fonction IF avec plusieurs condtions (Or)

    Posté par Elias sur 21 avril 2024 à 19h19

    J’ai besoin d’utiliser une fonction If avec plusieurs conditions liées à la fonction Or:

    <div style=”color: #000000; background-color: #fffffe; font-family: ‘Menlo’, ‘Consolas’, monospace,sans-serif, Consolas, ‘Courier New’, monospace; font-weight: normal; font-size: 15px; line-height: 19px; white-space: pre;”>
    <div>If(</div>
    <div> Or(DataCardValue16.Selected.Value = “ASMR”;</div>
    <div> DataCardValue16.Selected.Value = “CETS”;</div>
    <div> DataCardValue16.Selected.Value = “MLAS”;</div>
    <div> DataCardValue16.Selected.Value = “OMONL”);</div>
    <div> “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value ;“Pas d application”)</div>
    <div>Ceci fait apparaitre dans ma fenêtre une concaténation d’information en fonction de la valeur de datacardValue16.</div>
    <div> </div>
    <div>Ici j’ai mis 4 conditions, ce qui est ‘simple’. mais n’y a t il pas une manière plus effecicace de faire cela?</div>
    <div> </div>
    <div>J’ai pensé à l’option suivante :</div>
    <div>
    <div style=”color: #000000; background-color: #fffffe; font-family: ‘Menlo’, ‘Consolas’, monospace,sans-serif, Consolas, ‘Courier New’, monospace; font-weight: normal; font-size: 15px; line-height: 19px; white-space: pre;”>
    <div> </div>
    <div>If(</div>
    <div> DataCardValue16.Selected.Value = Or(“ASMR”;“CETS”;“MLAS”;“OMONL”);</div>
    <div> “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value ;“Pas d application”)</div>
    <div> </div>
    <div>Mais ca ne fonctionne pas. Pourquoi? existe il une autre solution pour simplifié ces lignes?µ</div>
    <div>merci et bonne soirée</div>
    <div> </div>
    </div>
    </div>
    </div>

    Alexandre a répondu Il y a 3 semaines, 1 jour 4 Membres · 13 Réponses
  • 13 Réponses
  • Alexandre

    Membre
    21 avril 2024 à 19h25

    Essaye

    DataCardValue16.Selected.Value in [“ASMR”;“CETS”;“MLAS”;“OMONL”]

  • Nelson

    Membre
    21 avril 2024 à 19h42

    Bonjour,

    J’ai du mal à lire avec les tags html mais bon essayons.

    Je te dirai de te diriger vers l’utilisation de SWITCH

    https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-if

    Ce qui te donnerait dans ton cas :

    Switch(

    DataCardValue16.Selected.Value;

    “ASMR”; “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value;

    “CETS”; “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value;

    “MLAS”; “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value;

    “OMONL”; “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value;

    “Pas d application”

    )

  • Nelson

    Membre
    21 avril 2024 à 19h50

    Le second usage qu’on pourrait faire de Switch pour que sa soit mon verbeux on va dire serait :

    If(

    Switch(

    DataCardValue16.Selected.Value;

    “ASMR”; true;

    “CETS”; true;

    “MLAS”; true;

    “OMONL";true;

    “false”

    );

    “SPEC-“ & DataCardValue10.Text &“-“& DataCardValue15.Text & “-“ & DataCardValue16.Selected.Value ;

    “Pas d application”

    )

    Et la dernière solution serait l’usage d’une regex avec un group avec tes élements :

    https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-ismatch

    IsMatch(DataCardValue16.Selected.Value;(ASMR|CETS|MLAS|OMONL);MatchOptions.IgnoreCase)

    qui te retourne donc true si ta valeur sélectionnée est bien dans ton group de capture.

  • Elias

    Membre
    21 avril 2024 à 20h49

    Merci pour vos réponse.

    Je viens de tester la fonction, IN:

    <div style=”color: #000000; background-color: #fffffe; font-family: ‘Menlo’, ‘Consolas’, monospace,sans-serif, Consolas, ‘Courier New’, monospace; font-weight: normal; font-size: 15px; line-height: 19px; white-space: pre;”>
    <div>If(</div>
    <div>DataCardValue16.Selected.Value in (“CETS”);</div>
    <div>”SPEC-” & DataCardValue10.Text & “-” & DataCardValue15.Text & “-” & DataCardValue16.Selected.Value;</div>
    <div>”Pas d application”</div>
    <div>)</div>
    <div> </div>
    <div>Avec un argument dans In cela fonctionne, mais si j’en mets 2 ou plus ca ne fonctionne pas :</div>
    <div>par exemple :
    <div style=”color: #000000; background-color: #fffffe; font-family: ‘Menlo’, ‘Consolas’, monospace,sans-serif, Consolas, ‘Courier New’, monospace; font-weight: normal; font-size: 15px; line-height: 19px; white-space: pre;”>
    <div>in (“CETS”;”MLAS”)</div>
    <div> </div>
    <div> </div>
    </div>
    </div>
    </div>

    • Cette réponse a été modifiée Il y a 3 semaines, 1 jour par  Elias.
  • Elias

    Membre
    21 avril 2024 à 20h50

    Pourquoi j’ai tous ces codes qui apparaissent dans mes posts?

  • Geoffroy

    Membre
    21 avril 2024 à 21h09

    Il faut mettre des crochets [ ], et pas des parenthèses.

  • Alexandre

    Membre
    21 avril 2024 à 21h14

    Comme l’a dit Geoffroy, ce ne sont pas des parenthèses qu’il faut pour le in, mais des crochets (c’est une table de chaines et le “in” indique de regarder si la valeur fait partie de cette table de chaines)

  • Elias

    Membre
    22 avril 2024 à 9h02

    Bonjour

    j’ai essayé avec le In et les crochets, cela ne fonctionne pas :

    Vous voyez ce qui peut bloquer?

    <div>
    <div>If(</div>
    <div> </div>
    <div> DataCardValue16.Selected.Value In [“ASMR”;”MLAS”];</div>
    <div> “SPEC-” & DataCardValue10.Text & “-” & DataCardValue15.Text & “-” & DataCardValue16.Selected.Value;</div>
    <div> “Pas d application”</div>
    <div>)</div>
    </div>

  • Alexandre

    Membre
    22 avril 2024 à 9h41

    Tu es sur que ton DataCardValue16 est alimenté avec une liste de chaines ?
    Si tu prends la propriété items de ce DataCardValue16 tu as quoi ? Si c’est une source de données, alors ce sont peut être des enregistrements auquel cas il faut récupérer la propriété texte de cet enregistrement que tu veux comparer avec les chaines de caractère que tu as mis entre crochets

  • Elias

    Membre
    22 avril 2024 à 9h58

    Merci Alexandre pour ton aide.

    Dans sharepoint j’ai 2 liste

    1/ Types qui reprend entre autre comme colonne typeInit (en fait cette colonne reprend les initiales du type, la version courte, usuelle : par exemple “MLSA”, “OMONL”, “CETS”

    2/ une seconde liste sharepoint Items qui reprdend des colonnes dont itemNum (numéro d’indentification) et une colonne typeNomInit qui une colonne de type recherche qui renvoie vers la colonne typeInit de la liste Types.

    Dans power apps dans mon écran d’édition j’ai une datacard qui reprend “typeNomInit_Datacard2” qui reprend une datacardkey16 et ma datacardvalue16.

    La propriété Items de cette datacardvalue16 est : Item = Choices([@Items].typeNomInit)

    Petite question supplémentaire parfois dans des choix ou des filtre je vois cette écriture [@Items] et parfois uniquement le nom de la liste Items sans les crochets. quelle est la différence?

  • Alexandre

    Membre
    22 avril 2024 à 11h56

    La notation avec les [@…] est appelé un “opérateur de levée d’ambiguité” voici le paragraphe qui en fait mention : https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/operators#disambiguation-operator

  • Elias

    Membre
    22 avril 2024 à 12h56

    merci pour l’information.

    et en ce qui concerne la fonction In qu’est ce que je dois adapter?

  • Alexandre

    Membre
    22 avril 2024 à 13h04

    Là comme ca je ne vois pas. Je n’ai pas l’habitude de bosser avec sharepoint et j’ai du mal à me projeter dans l’ensemble de ton projet.

    si ton datacard est alimenté avec une source, alors les éléments de comparaison après le ‘in’ entre les crochets doivent être du même type : des enregistrements de ta source si ton datacard est alimenté par cette source

Connectez-vous pour répondre.