Comptage des occurences

  • Comptage des occurences

    Posté par Ange sur 26 avril 2025 at 16h57

    Bonjour à tous !

    Je souhaite avoir une aide sur ce code svp.

    je veux avoir le nombre d’occurences sous certaines conditions. Seulement le résultat n’est conforme à ce que j’attends. Quelque soit ce que je fais j’ai que 2 ou 0 quand bien même je devrais avoir 1 ou 2 ou 5 ou 10.

    À savoir que j’ai utilisé CountIf, Filter avec le même résultat.

    <div>
    <div>If(</div>
    <div> </div>
    <div>DateValue(Title2_2.Text) = Today() && // si la date dans le contrôle est égale à la date du jour</div>
    <div>(</div>
    <div>// si l’une de ces condition ci- après est vrai</div>
    <div> </div>
    <div>Body1_10.Text = “Évo” ||</div>
    <div>Body1_10.Text = “Arv” ||</div>
    <div>Body1_10.Text = “Dpt”</div>
    <div>);</div>
    <div> </div>
    <div>// appliquer la valeur si vrai 1, 2 ou 3 pour chaque ligne de ma gallerie</div>
    <div>Switch(</div>
    <div>true;</div>
    <div>!IsBlank(Body1_2.Text) && IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text); 1;</div>
    <div>!IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text); 2;</div>
    <div>!IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && !IsBlank(Body1_5.Text); 3;0</div>
    <div>)</div>
    <div>)</div>
    </div>
    <div> </div>
    <div>Merci d’avance pour votre aide.</div>

    Alexandre a répondu 6 hours ago 3 Membres · 2 Réponses
  • 2 Réponses
  • R3dKap

    Member
    26 avril 2025 at 18h45

    Salut @Ange,

    La fonction Switch() ne s’utilise pas de cette manière. Normalement on l’utilise sur une variable pour fournir un résultat en sortie selon les valeurs que peut prendre cette variable.

    Dans ton cas, tu peux déjà simplifier la 2è partie de ton If(). Au lieu d’écrire :

    (Body1_10.Text = “Évo” || Body1_10.Text = “Arv” || Body1_10.Text = “Dpt”)

    …tu peux plus simplement écrire :

    !IsBlank(Body1_10.Text) && Body1_10.Text in "Évo,Arv,Dpt"

    Le !IsBlank() est nécessaire car une chaîne vide existe toujours dans n’importe quelle chaîne. Donc si ton Body1_10 était vide, la condition serait vraie et donc on aurait plus le bon résultat.

    Pour la partie du Switch(), tu peux plutôt l’écrire comme ça :

    If(
    !IsBlank(Body1_2.Text) && IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text);
    1;
    !IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text);
    2;
    !IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && !IsBlank(Body1_5.Text);
    3;
    0
    )

    Au final ça donne ça :

    If( 
    DateValue(Title2_2.Text) = Today() && !IsBlank(Body1_10.Text) && Body1_10.Text in "Évo,Arv,Dpt";
    If(
    !IsBlank(Body1_2.Text) && IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text);
    1;
    !IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && IsBlank(Body1_5.Text);
    2;
    !IsBlank(Body1_2.Text) && !IsBlank(Body1_4.Text) && !IsBlank(Body1_5.Text);
    3;
    0
    )
    )

    Après, si ton objectif c’est de déterminer combien de zones de texte parmi Body1_2, Body1_4 et Body1_5 ont une valeur, tu peux encore simplifier comme ceci :

    If( 
    DateValue(Title2_2.Text) = Today() && !IsBlank(Body1_10.Text) && Body1_10.Text in "Évo,Arv,Dpt";
    !IsBlank(Body1_2.Text) + !IsBlank(Body1_4.Text) + !IsBlank(Body1_5.Text)
    )
  • Alexandre

    Member
    27 avril 2025 at 21h36

    attention @R3dKap :

    Body1_10.Text in "Évo,Arv,Dpt"

    Si Body1_10.Text contient par exemple “o,Ar” alors ton ‘in’ retournera vrai. Il est préférable d’écrire

    Body1_10.Text in ["Évo";"Arv";"Dpt"]

    Et pour le switch(true;…) c’est cocasse mais ca fonctionne aussi 🙂 le premier paramètre est une valeur (ici la valeur booleenne ‘true’) et la première condition qui est égale à ce paramètre sera considéré. Il m’arrive de l’utiliser selon mon humeur 🙂

Connectez-vous pour répondre.