Donnez vie à vos documents numériques !
 

Calcul automatique du tarif en fonction du pourcentage. – RÉSOLU

abracadabraPDF Forums PDF – Général Calcul automatique du tarif en fonction du pourcentage. – RÉSOLU

  • Ce sujet est vide.
  • Créateur
    Sujet
  • #44591
    adrith
    Participant

    Bonjour,

    Voici mon problème, j’ai un champ avec un prix fixe déjà renseigné, puis un champ pourcentage et un champ prix.
    Je voudrais que si l’on rentre un pourcentage, ça calcul le prix en fonction du prix fixe, et inversement, si on rentre le prix, ça calcul alors le pourcentage.
    Je me prend la tête avec ce truc  :Euuuh:
    Vous croyez que c’est possible de faire ça ?

    Merci

Affichage de 9 réponses de 1 à 9 (sur un total de 9)
  • Auteur
    Réponses
  • #55309
    Merlin
    Maître des clés

    Bonjour,

    Quelque chose comme une bête règle de 3 ?

    Comme expliqué ici : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/calculs-en-javascript-et-en-notation-simplifiee/
    Et mis en pratique ici : http://abracadabrapdf.net/pdf-de-demo/formulaires/bon-de-commande-modele/
    :Smiley03:

    Alors la réponse est oui.
    :soleil:

    #55310
    adrith
    Participant

    Bonjour,

    Merci Merlin.
    J’ai mis en pratique les infos glanée dans les 2 liens, mais j’ai un soucis, je m’explique:

    J’ai donc 3 champs:
    – champ 1 vide qui contient un pourcentage
    – champ 2 vide qui contient un prix
    – champ 3 en lecteur seule avec le prix de base
    Le but étant que si on rentre un pourcentage dans le champ 1, ça calcul le pourcentage du prix de base et ça marque ce prix dans le champ 2.
    Mais aussi, si je modifie le prix dans le champ 2, alors ça remet à jour le pourcentage dans le champ 1. J’espère que c’est clair :)

    J’ai donc mis ce code en script de calcul personnalisé dans le champ 1:

    var champ2 = this.getField(“champ2”);
    var champ3 = this.getField(“champ3”);
    event.value = champ2.value * 100 / champ3.value;

    Et celui-ci en script de calcul personnalisé dans le champ 2:

    var champ1 = this.getField(“champ1”);
    var champ3 = this.getField(“champ3”);
    event.value = champ1.value * champ3.value / 100;

    Si je mets une valeur dans le champ 1, le prix est bien calculé dans le champ 2. Mais dès que je touche au champ 2, il ne met pas à jour le champ 1 mais me rechange ma valeur du champ 2.

    Vous avez une astuce pour gérer ça, je ne vois pas ?  :doute:
    J’ai mis le cas concret dans le petit fichier joint.
    Merci pour votre aide

    [attachment deleted by admin]

    #55311
    adrith
    Participant

    Bonjour Merlin,
    J’ai posé une colle  :Ooops:
    Sérieusement vous avez vu le problème que je rencontre ? C’est bizarre que le calcul ne fonctionne que dans un sens. Ou plutôt qu’il y a une cellule qui est prioritaire sur l’autre.

    #55312
    Merlin
    Maître des clés

    Bonjour,

    C’est “normal” : l’ordre de calcul reste primordial…

    Alex avait fait un exemple de ce genre avec un calcul à double entrée, il est quelque part sur le forum mais je le retrouve pas.

    :joker:

    #55313
    adrith
    Participant

    ça ne serait pas ce post dont vous parlez ?
    http://abracadabrapdf.net/forum/index.php/topic,1483.msg7134.html
    je n’ai pas regardé encore en détail mais ça y ressemble à ce que je veux faire  :Smiley01:

    #55314
    Merlin
    Maître des clés

    C’est exactement ça !
    :bravo:

    #55315
    adrith
    Participant

    Bonjour Merlin,

    Bon j’ai réussi tant bien que mal à appliquer dans mon contexte l’exemple d’Alex. Nickel.
    J’ai 2 questions complémentaires sur mon doc en PJ:

    1) en mettant par exemple 3 dans le prix, ça affiche 97 %. OK. J’ai bien fixé à 0 chiffre après la virgule mais quand on clic ensuite dans la cellule 97, ça réaffiche tous les nombres (96,77). Pourquoi ? Est-ce normal et y a t-il un moyen de contrer ça ?

    2) ensuite, et c’est le plus important. J’aimerais maintenant dupliquer ces 3 champs et pouvoir utiliser la convention parent/enfant afin d’avoir qu’une seule fonction calcul() et qu’elle fonctionne sur tout le document (que j’ai 2, 3 ou même 10 fois le groupe de 3 champs). Je galère pas mal mais sans succès. Est-ce que c’est possible ?

    Merci pour tout.

    function Calcul()
    {

    if(this.event.target.name==”p02.btn1.champ08″&pourcent)
    {
    this.getField(“p02.btn2.champ08”).value=(this.event.value*this.getField(“p02.btn4.champ08”).value)/100;
    }
    if(this.event.target.name==”p02.btn2.champ08″&!pourcent)
    {
    this.getField(“p02.btn1.champ08”).value=(this.event.value*100)/this.getField(“p02.btn4.champ08”).value;
    }

    }

    [attachment deleted by admin]

    #55316
    Merlin
    Maître des clés

    Salut,

    1- Il faut utiliser Math.round() en orange ci-dessous.

    2- Au lieu d’utiliser directement les noms de champs le mieux est de les placer en variable dans la fonction :

    function CalculAmoi()
    {
    champPourcent = this.getField(“p02.btn1.champ08“);
    champPrix = this.getField(“p02.btn2.champ08“);
    champPrixFix = this.getField(“p02.btn4.champ08“);
    if(acTif)
    {
    champPrix.value = (event.value*champPrixFix.value)/100;
    }
    else if(!acTif)
    {
    champPourcent.value = Math.round((event.value*100)/champPrixFix.value);
    }
    }

    Ce qui permet éventuellement de ne pas déclarer les variables avec la fonction, mais avant : ainsi c’est chacun des champs qui déclare ses propres variables avant d’appeler la fonction et c’est une seule et même fonction qui est utilisée par tous les champs !
    (Ci-joint).

    function CalculAmoi()
    {
    if(acTif)
    {
    champPrix.value = (event.value*champPrixFix.value)/100;
    }
    else if(!acTif)
    {
    champPourcent.value = Math.round((event.value*100)/champPrixFix.value);
    }
    }

    :Smiley01:

    [attachment deleted by admin]

    #55317
    adrith
    Participant

    Bonjour,

    Un grand Merci Merlin. C’est parfait et ça m’a fait gagner bcp de temps.
    :bravo: :bravo:

    Bonne journée.

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