Formatage d'une valeur calculée

Étiquetté : , ,

  • Formatage d'une valeur calculée

    Posté par Patrice sur 16 mars 2023 à 14h08

    Bonjour à tous,

    Dans une valeur Montant_TTC global (qio est un champ de formulaire), je souhaite faire la somme des différents montants TTC qui sont dans une galerie.

    Je précise que dans cette galerie, j’ai du utiliser la formule suivante pour afficher correctement les montants : Text(Value(ThisItem.Montant_TTC;"en-US"); "#.00 €")

    Dans la partie Default de la Datacard du Montant-TTC global, j’ai la formule Sum(gal_Dépenses.AllItems; Value(Montant_TTC;"en-US"))

    Et le résultat donne cela : (voir ci-dessous, un montant avec 1 seule décimale alors que je voudrais dans l’exemple 182,30.

    J’ai essayé d’utiliser la fonction Text() comme précédemment mais rien ne fonctionne. Même les exemples du bouquin de Pascal Casti ne marche pas dans mon cas. Je pense que je ne maîtrise pas encore les subtilités du formatage de nombre entre les problèmes de “;” et de “,” de l’US au Français.

    PostID=H7fnBx7uxTwNBzz

    Patrice a répondu Il y a 9 mois, 1 semaine 1 Membre · 15 Réponses
  • 15 Réponses
  • Geoffroy

    Membre
    16 mars 2023 à 15h00

    Bonjour Patrice

    Avec la formule Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC;”en-US”)); “#.00 €”), j’obtiens le résultat souhaité.

    Au fait, pourquoi tu ne mets pas “fr-FR” au lieu de “en-US” ?

    CommentID=Fmla5zGzrhNaa1J, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      16 mars 2023 à 15h12

      Merci Geoffroy. J’avais essayé cette formule mais même si la syntaxe est OK, je n’ai aucun résultat qui s’affiche

      Dans la datacard si je change le format en Texte, l’affichage est correct mais j’ai une erreur de conversion

      Idem lorsque j’essaye d’utiliser fr-FR, j’ai systématiquement des erreurs de conversion.

      SubCommentID=MCgAtcifDPWAReM, CommentID=Fmla5zGzrhNaa1J, PostID=H7fnBx7uxTwNBzz

  • Geoffroy

    Membre
    16 mars 2023 à 15h31

    Avec Text(Sum(gal_Dépenses.AllItems; Montant_TTC);”#.00″), ça semble marcher.

    Mais on ne peut pas afficher la devise sinon ça fait une erreur.

    CommentID=LWjRW10Vmj7BTyf, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      16 mars 2023 à 15h37

      Effectivement cela fonctionne mais je dois quand même ajouter “en-US” Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC; "en-US")); "#.00") sinon j’ai une erreur de conversion.

      Il y a quelque chose qui m’échappe dans le choix des langues. Pourtant je suis en fr-FR partout, y compris dans la liste SharePoint et dans l’environnement M 365.

      En tous cas merci pour le coup de main 👍

      SubCommentID=3AzbwLyQ6alhJMX, CommentID=LWjRW10Vmj7BTyf, PostID=H7fnBx7uxTwNBzz

  • DavidZed

    Membre
    16 mars 2023 à 17h37

    Hello,

    Attention, le tag de langage se met en 3eme paramètre dans la fonction Text() et non en second, comme c’est également un tag de format reconnu pour les dates, cela ne génère pas d’erreur.

    Pour une valeur décimale le code de langage va permettre de choisir le séparateur de décimales : ” , ” ou ” . ” :

    CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      17 mars 2023 à 9h32

      Je suis d’accord mais ce n’est pas tout à fait mon cas. Je peux utiliser la formule suivante

      Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC; "en-US")); "#.00")

      ou bien

      Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC; "en-US")); "#.00"; "fr-FR")

      cela ne change rien.

      En revanche, si j’écris “#.00 €” à la place de “#.00” j’ai le résultat suivant :

      si le format de la datacard est Nombre

      si le format de la datacard est Texte, l’affichage est OK mais il y a une erreur

      Précision : le champ Montant_TTC dans la formule est une valeur calculée dans une liste SharePoint

      SubCommentID=znA0bKzgvlGu1Ju, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • DavidZed

      Membre
      17 mars 2023 à 9h40

      Ok, je vois !

      Dans le .Update du datacard, tu dois certainement avoir : Value(DataCardValueXX.Text)

      Si tu ajoutes l’unité et que tu mets le datacard value au format texte, il faudra modifier l’update pour enlever les caractères non numériques :

      Value(Substitute(DataCardValue3_1.Text,” €”,””))

      SubCommentID=tmpgobOJVK8Fjy1, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      17 mars 2023 à 13h44

      Euh, je ne vois pas de .Update dans la datacard. Mon écran est composé de 2 parties. La partie supérieure est un formulaire (associé à la liste NDF) qui affiche les infos globales de la note de frais.

      La partie inférieure est une galerie (associée à la liste NDF-Details) qui affiche les différentes dépenses de la note de frais. Cette liste à une colonne de référence qui pointe vers l’ID de la liste NDF (ici c’est l’ID 8)

      Donc dans la datacard Montant du formulaire, je veux faire la somme de toutes les dépenses. Comme tu peux le voir ci-dessous cela fonctionne sauf que je ne peux pas mettre de “€” dans le Montant du formulaire. Et je ne comprends pas pourquoi 🤪

      SubCommentID=mCF24Ev4SmXmrsx, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Geoffroy

      Membre
      17 mars 2023 à 14h51

      La propriété Update est dans la DataCard elle-même, pas dans le DataCardValue.

      SubCommentID=Cti0ge05g3NO68U, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • DavidZed

      Membre
      17 mars 2023 à 14h52

      Tu ne peux pas afficher l’unité, parce que la valeur du total que tu mets dans ton DatacardValue (Montant) doit mettre a jour un champ décimal dans ta source quand tu valides le formulaire.

      Si tu mets des chiffes et du texte à cet endroit, tu auras une erreur car ce champ attends une valeur numérique reçoit une chaîne de caractères Alphanumériques.

      Si ta colonne “Montant” était de type texte cela fonctionnerait. Mais tu peux faire comme indiqué dans la formule plus haut : remplacer ” €” par une chaine vide et utiliser Value() pour récupérer une valeur décimale à partir du texte et mettre le tout dans l’update du Datacard (pas du DatacardValue)

      SubCommentID=XbdWYvAnUCPvOII, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • DavidZed

      Membre
      17 mars 2023 à 14h55

      Il est possible aussi, si tu n’as pas besoin que l’utilisateur puisse modifier le montant total manuellement, de masquer le DatacardValue et de mettre un labelText à la place, où là tu n’auras pas de restrictions sur la nature de la donnée affichée.

      il faudra néanmoins laisser la formule actuelle dans le DatacardValue pour que l’update se fasse

      SubCommentID=g9bEodNOY2eGlNd, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      17 mars 2023 à 14h58

      DavidZed Désolé, je viens juste de comprendre de quel update tu parles. je cherchais dans DataCardValue alors que tu parlais de DataCard. Bref, j’ai appliqué ta formule et malheureusement cela ne change rien, le sigle € ne s’affiche pas.

      J’ai quand fait le test sur un autre formulaire et cela fonctionne bien. La seule différence c’est que je ne fais pas de Sum(). Estc-e que cela peut jouer ?

      SubCommentID=t9PYQKQYgXSsrvU, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      17 mars 2023 à 15h34

      DavidZed Bon j’ai l’impression d’être un gros boulet, mais je ne suis pas sûr de comprendre lorsque tu dis :

      “Mais tu peux faire comme indiqué dans la formule plus haut : remplacer ” €” par une chaine vide et utiliser Value() pour récupérer une valeur décimale à partir du texte et mettre le tout dans l’update du Datacard (pas du DatacardValue)”

      Où dois-je remplacer “€” par une chaine vide ? Dans le Default de la DataCardValue ? Je n’arrive justement pas à écrire “#.00 €” dans la DataCardValue

      Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC; "en-US")); "#.00")

      Je précise que j’ai pu le faire sur un autre formulaire où je n’utilise pas de Sum()

      Text(Value(ThisItem.'Salaire Brut'; "en-US"); "#.00 €")

      SubCommentID=3Cl1gBGiMmbMUYO, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • DavidZed

      Membre
      17 mars 2023 à 15h56

      Il y a normalement juste 3 choses à faire :

      Mettre le DatacardValue en mode texte (il est sur nombre de base)

      Mettre la formule Text(Sum(gal_Dépenses.AllItems; Value(Montant_TTC; "en-US")); "#.00 €") dans le default du datacardvalue

      Cela va faire une erreur sur le Datacard.Update, que tu vas pouvoir résoudre en ajoutant un substitute pour enlever le ” €” qu’on a ajouté à l’étape d’avant. :

      Value(Substitute(DataCardValueXX.Text," €",""))

      SubCommentID=Npo0pMLL6zz9kHN, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

    • Patrice

      Membre
      17 mars 2023 à 16h13

      OK. alors j’avais bien compris et c’est ce que j’avais essayé tout à l’heure quand je t’ai dit que cela ne fonctionnait pas. J’avais juste oublié de changer le format de la DataCardValue à Texte.

      Vraiment merci pour toutes ces astuces. Le Substitute() dans l’Update il fallait y penser 🧐

      SubCommentID=7ed1apLhUZXv9OK, CommentID=rg8G3zK2endDyhc, PostID=H7fnBx7uxTwNBzz

Connectez-vous pour répondre.