Donnez vie à vos documents numériques !
 

Calcul de la moyenne des cellules non vides

abracadabraPDF Forums PDF – Général Calcul de la moyenne des cellules non vides

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #45807
    mamotte40
    Membre

    Bonjour

    Malgré de nombreuses recherches je n’ai pas trouvé la solution à mon problème donc je me permets de faire appel à vos compétences ;o)

    J’ai un formulaire pdf sur lequel on renseigne des notes de 1 à 7 (champ déroulant) sur des critères d’évaluation.
    Tous les critères n’étant pas évaluables, certaines notes peuvent rester vide.

    Je souhaite obtenir dans une case, la moyenne des notes renseignées et seulement sur celles ci.
    Je souhaite également que cette moyenne soit arrondi au chiffre supérieur (ex: 6,1 = 7)

    J’ai bien trouvé comment faire la moyenne de tous les champs de notation mais le problème c’est que ça me fait la moyenne également par rapport aux critères d’évaluation non renseignées ce qui diminue fortement la moyenne générale.

    Par exemple, si j’ai 9 critères et que j’en note seulement 7, ma moyenne la somme de toutes les notes renseignées divisé par 9 au lieu de 7… :(

    Je ne sais pas si je suis bien clair dans ma demande, au besoin je vous apporterai les précisions nécessaires.

    J’ai bien compris qu’il faut utiliser du javascript mais j’avoue que je n’y comprends pas grand chose…

    Merci pour votre aide ;o)

    Nicolas

Affichage de 11 réponses de 1 à 11 (sur un total de 11)
  • Auteur
    Réponses
  • #63442
    bebarth
    Maître des clés

    bonjour,
    c’est effectivement possible en javascript, mais la façon de faire dépend un peu de comment sont identifiés les champs…
    Si tu avais un fichier exemple à partager on pourrait adapter le script !
    @+
    :bonjour:

    #63443
    mamotte40
    Membre

    Bonjour bebarth,

    Merci de m’accorder du temps ;o)
    Voici le fichier exemple.
    Pour être plus concret les évaluations s’effectuent sur la 1ere page mais certains critères (II et III ) sont facultatifs puisqu’ils peuvent être “sans objet” soit “—“
    La note moyenne arrondi doit apparaître en bas de la 2ème feuille dans la case “note”
    Cette note doit être arrondi à l’entier directement supérieur (ex: 4,2 = 5)
    Merci

    #63444
    bebarth
    Maître des clés

    …voici !
    j’ai mis le champ “moyenne” sur la première page.
    Regarde un peu la différence avec ton fichier original.
    j’espère que tu comprendras sinon dis-moi, j’expliquerai !
    @+
    :bonjour:

    #63445
    mamotte40
    Membre

    Waouh!!
    Merci beaucoup pour la rapidité et l’efficacité de la réponse  :bravo:

    J’ai essayé de décortiquer la formule mais je ne comprend pas tout… :doute:

    J’ai compris que les notes obligatoires avaient été renommées “NOTE.X” et les notes facultatives “NOTEF.X”.

    Ensuite, si je comprends bien, il y a 4 variables :
    nb = nombre de notes renseignées
    total = la somme des notes renseignées
    i = les notes obligatoires
    j= les notes facultatives

    après, c’est pour moi du charabia… je comprends le principe des if (si), des for (pour) et des else (alors) mais après j’ai du mal à suivre…
    Il y a vraisemblablement des formules de calcul type mais je ne les connais pas…

    Si tu as le temps de m’expliquer, je suis curieux de comprendre tout ça  :Smiley08:

    Par contre une question complémentaire, est-il possible d’obtenir une moyenne sans virgule, avec une note arrondi à l’entier supérieur. par exemple pour une moyenne de 5.12 que la moyenne affichée soit 6.

    Je me répète mais encore une fois, MERCI beaucoup pour le temps consacré à ma demande  :bravo:
    @+

    Nicolas

    #63446
    mamotte40
    Membre

    Je pense avoir trouvé pour l’arrondi entier supérieur :

    – D’abord j’ai modifié le format du champ pour qu’il n’y ait pas de décimal.
    – Ensuite j’ai ajouté la mention “Math.ceil” dans le calcul final soit  une formule finale :

    Code:
    var nb=0;
    var total=0
    for (var i=0; i<12; i++) {
    if (this.getField(“NOTE.”+i).value !=0) {var nb=nb+1};
    var total=total+this.getField(“NOTE.”+i).value;
    }
    for (var j=0; j<14; j++) {
    if (this.getField(“NOTEF.”+j).value !=0) {var nb=nb+1};
    var total=total+this.getField(“NOTEF.”+j).value;
    }
    if (nb!=0) {
    this.event.target.value=Math.ceil(total/nb);
    } else {
    this.event.target.value=0
    }

    ça te paraît cohérent?

    #63447
    Merlin
    Maître des clés

    D’abord j’ai modifié le format du champ…

    Je n’ai pas tout suivi depuis le début mais il ne faut pas oublier que ce qu’on règle dans “Propriétés : Format” ne concerne que le format d’affichage des données.
    Ça ne modifie pas les données elles-mêmes.

    Par exemple si on demande à afficher un format de symbole monétaire le champ affichera : 777 €
    Mais la vraie valeur du champ, celle utilisée pour les calculs c’est toujours : 777

    Même chose pour les décimales, si on demande un format qui ne les affiche pas ça ne les empêche pas d’exister quand même et d’être prises en compte dans les calculs qui découlent.

    :idee:

    #63448
    mamotte40
    Membre

    Bonsoir Merlin,
    Au fil des différentes discussions du forum et de vos nombreuses interventions à tous les deux c’est que j’ai pu comprendre.
    Dans mon cas, cela n’a pas d’importance puisque cette valeur ne va pas être réutilisée mais elle doit simplement être affichée.
    Merci à tous les deux pour votre disponibilité.
    Pour gérer moi même un forum depuis plus de 10 ans avec environ 35 000 inscrits, je sais que le poumon et le cœur d’un forum vit et respire grâce à une poignée passionnés comme vous :)

    #63449
    bebarth
    Maître des clés

    bonjour,
    …et merci pour tes remerciements que je réitère moi-même à Merlin vu le nombre d’heures qu’il consacre à son forum !  :bravo:
    Je dis toujours que lorsque l’on donne ce n’est pas pour recevoir, mais ça fait quand même plaisir de recevoir de temps en temps…
    Certaines fois on a aucun retour alors que l’on s’est creusé la tête pour trouvé une solution. Même pas : “ça marche pas !” ou “ça marche !”.

    En ce qui concerne la duplication des champs, je te conseille de lire cette page :
    https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/duplication-rapide-de-champs-de-formulaire/
    Tu comprendras certainement mieux l’indexation des champs et la facilité des calculs sur ces champs dupliqués.
    Dans ton cas, il faut donner des valeurs d’exportation à chaque élément de la première liste et cocher “Valider la valeur sélectionnée immédiatement”. Ensuite il n’y a plus qu’à dupliquer….
    @+
    :bonjour:

    #63450
    Merlin
    Maître des clés

    Pour gérer moi même un forum depuis plus de 10 ans avec environ 35 000 inscrits, je sais que le poumon et le cœur d’un forum vit et respire grâce à une poignée passionnés comme vous

    Merci.
    Quel forum ?
    Sur quelle thématique ?

    #63451
    mamotte40
    Membre

    Merci pour ces précisions Bebarth, je vais étudier attentivement tout ça :)

    Merlin, je t’ai transmis les infos par MP pour des raisons de confidentialité que tu comprendras vraisemblablement ;o)

    #63452
    Merlin
    Maître des clés

    Merlin, je t’ai transmis les infos par MP pour des raisons de confidentialité que tu comprendras vraisemblablement

    Merci. Si tu peux fait passer aussi à bebarth que je ne sois pas le seul à connaitre cet usage mobile, et un peu inattendu, du PDF.  :Smiley03:

    Je comprend mieux ton pseudo, mais sans le “r” c’est tout de suite plus suggestif…  :Smiley08:

Affichage de 11 réponses de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.