IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

calcul dans un formulaire


Sujet :

JavaScript

  1. #21
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci mais comment puis je faire pour faire apparaitre un deuxième article.
    C'est a dire le p2, car si je refais un tableau en indiquant p2, etc pu2 et q2 ca ne fonctionne pas, aucun calcul ne se fait.
    Et la tva dois je efaire la fonction avec p2 ou n'y a t'il pas un moyen plus rapide ( je pense que si) car je me vois mal toute les référence si le bon de commande dois contenir plusieurs objets.

    J'espère avoir été clair

    Merci d'avance

  2. #22
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Il suffit de passer aussi l'objet (p1, p2 etc.) à ta fonction ...

    A+

  3. #23
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Voila ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function calcul(obj)
          {
            var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
            if (valeur == '#')
              return;
     
            var p1 = parseFloat(obj.form.p1.value);
    		var p2 = parseFloat(obj.form.p2.value);
            if (valeur=="1")
            {
              var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
    		  var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;
              var ttc = p1 + tva;
    		  var ttc = p2 + tva
    		 } 
    		 else if (valeur=="0")
    {		 
     var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
     var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;
    var ttc = p1 + tva;
    var ttc = p2 + tva;
     }
            else
            {
              var tva = 0;
              var ttc = p1 ;
    		  var ttc = p2 ;
            }
            obj.form.tva.value = tva;
            obj.form.ttc.value = ttc;
    Je ne pense pas que tu voulais dire cela, quand tu disais passer les autres paramètres dans la fonction, car le calcul de tva ne fonctionne pas.

    Merci d'avance

  4. #24
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Effectivement, je ne vois pas où tu as rajouté les nouveaux paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function calcul(obj, objP1, objP2)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;
    
    var p1 = parseFloat(objP1.value);
    var p2 = parseFloat(objP2.value);
    ....
    en passant, à chaque appel, les 2 objets à traiter, en plus du "obj" représentant le taux de tva ...

    A+

  5. #25
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Décidément.....

    J'ai une erreur de calcul form maintenant "calcul form is not defined"

    Voila le code que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
          function calcul(obj,objp1,objp2)
          {
            var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
            if (valeur == '#')
              return;
     
            var p1 = parseFloat(objp1.form.p1.value);
    		var p2 = parseFloat(objp2.form.p2.value);
     
            if (valeur=="1")
            {
              var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
    		  var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;
     
              var ttc = p1 + tva;
    		  var ttc = p2 + tva
     
    		 } 
    		 else if (valeur=="0")
    {		 
     var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
     var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;
     
    var ttc = p1 + tva;
    var ttc = p2 + tva
     }
            else
     
              var tva = 0;
              var ttc = p1 ;
    		  var ttc = p2;
     
            }
            obj.form.tva.value = tva;
            obj.form.ttc.value = ttc;
          }
        function test_champ(champ) {
          expr_reg = /^\d*$/ ;
          // Ci-dessus : expression régulière qui match 0,1 ou plusieurs chiffres ;
          // de cette façon on vérifie que l'utilisateur entre bien un nombre entier
          if ( expr_reg.test(champ.value) ) {
            // c'est bien un nombre entier
            calcul_form() ;
          } else {
            // ce n'est pas un nombre entier
            alert ("Ce n'est par un nombre entier !") ;
            document.form1.elements[champ.name].value = "" ;   // on efface la valeur entrée erronée
            calcul_form() ;
          }
        }
     
        function calcul_form() {
          // le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
          with (document.forms.form1) {
     
            p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
            p2.value = q2.value * pu2.value ;
            p3.value = q3.value * pu3.value ;
            total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
               // Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
               // et non pas une concaténation de chaînes de caractères
          }
        }
     
        function champ_verrouille(champ,valeur) {
               // Remarque : en HTML 4.0, il existe un attribut "read-only" pour la
               //            balise <INPUT TYPE=text> qui interdira de modifier un champ
               //            mais ce que je fais ci-dessous est beaucoup plus sûr !!!
          // alert ("Ce champ de peut pas être modifié !") ;
          document.form1.elements[champ.name].value = valeur ;   // on remet "valeur" initiale dans champ
        }
     
        function soumettre_form() {
          if ( document.forms.form1.total.value == 0 ) {
            alert ("Vous n'avez rien commandé !\n => commande non soumise") ;
            return false ;
          } else {
            // Les 2 lignes ci-dessous devraient être activées pour réellement passer le form. à script CGI
            // document.form1.method = "POST" ;
            // document.form1.action = "http://dgrwww.epfl.ch/cgi-bin/uncgi/mail_form.sh?mailto=Jean-Daniel.Bonjour@epfl.ch" ;
            document.write ("<H3 ALIGN=center>Commande passée\n pour un montant de " +
                             document.forms.form1.total.value + " Frs</H3>") ;
            document.close () ;
            return true ;
          }
        }
     
      // -->

    Et le code HTML qui va avec :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <TABLE width="100%" BORDER="1" CELLSPACING="0" BGCOLOR="#FFFFAA">
      <TR BGCOLOR="#CCCCCC">
    	<TH WIDTH=70%><B>Réference fournisseur et désignation</B>
        <TH >Prix unitaire HT
        <TH>Quantité
        <TH>Prix total HT
    	<TH>TVA
    	<TH>Taux appliqué
    	<TH>Prix Total TTC
    	</TR>
    <TH><INPUT TYPE="text" size="100">	
    <TH><INPUT TYPE="text" NAME="pu1" SIZE="3" MAXLENGTH="4" >
    <TH><INPUT TYPE="text" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" NAME="p1" SIZE="8" MAXLENGTH="4" >
    <TH><select name="select" onchange="calcul(this)">
    <option value="#">TVA Appliquée</option>
    <option value="0.196">TVA à 19.6 %</option>
    <option value="0.055">TVA à 5.5 %</option>
    <TH><input name="tva" type="text" value="" maxlength="30" />
    <TH><input name="ttc" type="text" value="" maxlength="15"/>
    <TR BGCOLOR="#CCCCCC">
    <TH><INPUT TYPE="text" size="100">	
    <TH><INPUT TYPE="text" NAME="pu2" SIZE="3" MAXLENGTH="4" >
    <TH><INPUT TYPE="text" NAME="q2" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" NAME="p2" SIZE="8" MAXLENGTH="4" >
    <TH><select name="select" onchange="calcul(this)">
    <option value="#">TVA Appliquée</option>
    <option value="0.196">TVA à 19.6 %</option>
    <option value="0.055">TVA à 5.5 %</option>
    <TH><input name="tva" type="text" value="" maxlength="30" />
    <TH><input name="ttc" type="text" value="" maxlength="15"/>


    Merci d'avance

  6. #26
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Tu dois avoir une erreur au chargement de la page : calcul_form() fait référence au form "form1", alors que dans ton code posté, ce form n'a pas de name ...

    A+

  7. #27
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    <FORM NAME="form1"> REFERENCE ICI DU CALCUL FORM
    Nom du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGth="20">
    <BR>
    Adresse du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    Ville :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    FAX :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    LIEU DE LIVRAISON
    <SELECT NAME="LIEU"
    <OPTION VALUE="st">Service technique
    <OPTION SELECTED VALUE="m">Mairie
    <OPTION VALUE="elc">Education Loisirs et Citoyenneté
    </SELECT>

  8. #28
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    A mon avis je dois remplacer le
    onchange="calcul(this)"
    mais je ne vois pas par quoi ????

  9. #29
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Est ce que ce code est bon ou pas ?????

    *

    function calcul(obj,objp1,objp2)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;

    var p1 = parseFloat(objp1.form.p1.value);
    var p2 = parseFloat(objp2.form.p2.value);

    if (valeur=="1")
    {
    var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;

    var ttc = p1 + tva;
    var ttc = p2 + tva

    }
    else if (valeur=="0")
    {
    var tva = Math.round(p1 * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(p2 * parseFloat(obj.value, 10) * 100) / 100;

    var ttc = p1 + tva;
    var ttc = p2 + tva
    }
    else

    var tva = 0;
    var ttc = p1 ;
    var ttc = p2;

    }
    obj.form.tva.value = tva;
    obj.form.ttc.value = ttc;
    }
    function test_champ(champ) {
    expr_reg = /^\d*$/ ;
    // Ci-dessus : expression régulière qui match 0,1 ou plusieurs chiffres ;
    // de cette façon on vérifie que l'utilisateur entre bien un nombre entier
    if ( expr_reg.test(champ.value) ) {
    // c'est bien un nombre entier
    calcul_form() ;
    } else {
    // ce n'est pas un nombre entier
    alert ("Ce n'est par un nombre entier !") ;
    document.form1.elements[champ.name].value = "" ; // on efface la valeur entrée erronée
    calcul_form() ;
    }
    }

    function calcul_form() {
    // le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
    with (document.forms.form1) {

    p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
    p2.value = q2.value * pu2.value ;
    p3.value = q3.value * pu3.value ;
    total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
    // Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
    // et non pas une concaténation de chaînes de caractères
    }
    }

    function champ_verrouille(champ,valeur) {
    // Remarque : en HTML 4.0, il existe un attribut "read-only" pour la
    // balise <INPUT TYPE=text> qui interdira de modifier un champ
    // mais ce que je fais ci-dessous est beaucoup plus sûr !!!
    // alert ("Ce champ de peut pas être modifié !") ;
    document.form1.elements[champ.name].value = valeur ; // on remet "valeur" initiale dans champ
    }

    function soumettre_form() {
    if ( document.forms.form1.total.value == 0 ) {
    alert ("Vous n'avez rien commandé !\n => commande non soumise") ;
    return false ;
    } else {
    // Les 2 lignes ci-dessous devraient être activées pour réellement passer le form. à script CGI
    // document.form1.method = "POST" ;
    // document.form1.action = "http://dgrwww.epfl.ch/cgi-bin/uncgi/mail_form.sh?mailto=Jean-Daniel.Bonjour@epfl.ch" ;
    document.write ("<H3 ALIGN=center>Commande passée\n pour un montant de " +
    document.forms.form1.total.value + " Frs</H3>") ;
    document.close () ;
    return true ;
    }
    }

    // -->

  10. #30
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Est ce que ce code est bon ou pas ?????
    Pas possible de dire :
    1. Tu ne donnes pas le code HTML correspondant, ni l'appel de la fonction
    2. Le code que tu as posté tout au début ne correspond visiblement pas (pas de "form1"), or, c'est sur celui-ci que l'on se base
    3. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      var p1 = parseFloat(objp1.form.p1.value);
      n'est pas la syntaxe que je t'ai donnée
    4. a peu de chance de fonctionner, si tu as, par ailleurs fait les modif que je t'ai indiquées

    Bref, je te laisse relire calmement tout ce qui a déjà été dit, car la solution s'y trouve

    A+

  11. #31
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci bien je vais relire ceci a tête reposé et "i'll be back" je pense

  12. #32
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Alors je ne vois pas du tout même en me torturant l'esprit je ne vois pas, mon code JAvascript :
    function calcul(obj, objp1, objp2)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;

    var p1 = parseFloat(objp1.value);
    var p2 = parseFloat(objp2.value);

    if (valeur=="1")
    {
    var tva = Math.round(objp1 * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(objp2 * parseFloat(obj.value, 10) * 100) / 100;
    var ttc = objp1 + tva;

    }
    else if (valeur=="0")
    {
    var tva = Math.round(objp1 * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(objp2 * parseFloat(obj.value, 10) * 100) / 100;

    var ttc = objp1 + tva;
    var ttc = objp2 + tva;
    }
    else
    {
    var tva = 0;
    var ttc = objp1 ;
    var ttc = objp2 ;

    }
    obj.form.tva.value = tva;
    obj.form.ttc.value = ttc;
    }
    function test_champ(champ) {
    expr_reg = /^\d*$/ ;
    // Ci-dessus : expression régulière qui match 0,1 ou plusieurs chiffres ;
    // de cette façon on vérifie que l'utilisateur entre bien un nombre entier
    if ( expr_reg.test(champ.value) ) {
    // c'est bien un nombre entier
    calcul_form() ;
    } else {
    // ce n'est pas un nombre entier
    alert ("Ce n'est par un nombre entier !") ;
    document.form1.elements[champ.name].value = "" ; // on efface la valeur entrée erronée
    calcul_form() ;
    }
    }

    function calcul_form() {
    // le with ci-dessous permet d'abréger "document.forms.form1.p1.value" en "p1.value"
    with (document.forms.form1) {

    p1.value = parseInt(q1.value, 10)* parseFloat(pu1.value, 10) ;
    p2.value = parseInt(q2.value, 10)* parseFloat(pu2.value, 10) ;
    p3.value = q3.value * pu3.value ;
    total.value = p1.value *1 + p2.value *1 + p3.value *1 ;
    // Ai mis les *1 ci-dessus afin que les + fassent une somme arithmétique
    // et non pas une concaténation de chaînes de caractères
    }
    }

    function champ_verrouille(champ,valeur) {
    // Remarque : en HTML 4.0, il existe un attribut "read-only" pour la
    // balise <INPUT TYPE=text> qui interdira de modifier un champ
    // mais ce que je fais ci-dessous est beaucoup plus sûr !!!
    // alert ("Ce champ de peut pas être modifié !") ;
    document.form1.elements[champ.name].value = valeur ; // on remet "valeur" initiale dans champ
    }

    function soumettre_form() {
    if ( document.forms.form1.total.value == 0 ) {
    alert ("Vous n'avez rien commandé !\n => commande non soumise") ;
    return false ;
    } else {
    // Les 2 lignes ci-dessous devraient être activées pour réellement passer le form. à script CGI
    // document.form1.method = "POST" ;
    // document.form1.action = "http://dgrwww.epfl.ch/cgi-bin/uncgi/mail_form.sh?mailto=Jean-Daniel.Bonjour@epfl.ch" ;
    document.write ("<H3 ALIGN=center>Commande passée\n pour un montant de " +
    document.forms.form1.total.value + " Frs</H3>") ;
    document.close () ;
    return true ;
    }
    }

    // -->

    et le code html qui va avec :

    </HEAD>
    <BODY BGCOLOR="white" onLoad="calcul_form()" >



    <table width="100%">
    <!--utilisation d'un tableau qui occupera toute la page-->
    <tr>
    <td>
    <table width="100%" align="center" border=1>
    <tr>
    <td align="center">
    VILLE DE DIVION<BR>
    1, rue Pasteur<BR>
    BP9<BR>
    Tel : 0321645570<BR>
    Fax : 0321645583<BR>
    Mel : contact@ville-divion.fr<BR>
    Mel : achatpublic@ville-divion.fr<BR>
    </td>


    <td align="center">
    <FORM NAME="form1">
    Nom du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGth="20">
    <BR>
    Adresse du fournisseur :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    Ville :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    FAX :
    <INPUT TYPE="text" NAME="nom" VALUE="" SIZE="20" MAXLENGTH="20">
    <BR>
    LIEU DE LIVRAISON
    <SELECT NAME="LIEU"
    <OPTION VALUE="st">Service technique
    <OPTION SELECTED VALUE="m">Mairie
    <OPTION VALUE="elc">Education Loisirs et Citoyenneté
    </SELECT>

    </td>
    <td align="center">

    <?php
    echo "Date du jour : ".date("d-m-Y")."<br>";
    //affiche la date du jour d'utilisation du serveur par le client
    ?>
    <BR>Action</BR>
    <INPUT TYPE="checkbox" NAME="Livraison"> Livraison
    <INPUT TYPE="checkbox" NAME="Retrait"> Retrait
    <INPUT TYPE="checkbox" NAME="Autre"> Autre
    <INPUT TYPE="checkbox" NAME="Transmission" CHECKED> Transmettre au fournisseur
    </td>
    <tr>
    <td colspan=4 align="center">

    Ne seront reconnus par le Ville de Divion que les services faits en exécution d’un bon de commande régulier dûment numéroté, visé et signé par le responsable achat
    </td>
    </tr>
    <TABLE width="100%" BORDER="1" CELLSPACING="0" BGCOLOR="#FFFFAA">
    <TR BGCOLOR="#CCCCCC">
    <TH WIDTH=70%><B>Réference fournisseur et désignation</B>
    <TH >Prix unitaire HT
    <TH>Quantité
    <TH>Prix total HT
    <TH>TVA
    <TH>Taux appliqué
    <TH>Prix Total TTC
    </TR>
    <TH><INPUT TYPE="text" size="75">
    <TH><INPUT TYPE="text" NAME="pu1" SIZE="3" MAXLENGTH="4" >
    <TH><INPUT TYPE="text" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" NAME="p1" SIZE="8" MAXLENGTH="4" >
    <TH><select name="select" onchange="calcul(this)">
    <option value="#">TVA Appliquée</option>
    <option value="0.196">TVA à 19.6 %</option>
    <option value="0.055">TVA à 5.5 %</option>
    <TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
    <TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>
    <TR BGCOLOR="#CCCCCC">
    <TH><INPUT TYPE="text" size="75">
    <TH><INPUT TYPE="text" NAME="pu2" SIZE="3" MAXLENGTH="4" >
    <TH><INPUT TYPE="text" NAME="q2" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" NAME="p2" SIZE="8" MAXLENGTH="4" >
    <TH><select name="select" onchange="calcul(this)">
    <option value="#">TVA Appliquée</option>
    <option value="0.196">TVA à 19.6 %</option>
    <option value="0.055">TVA à 5.5 %</option>
    <TH><input name="tva" type="text" value="" maxlength="15" SIZE="5" />
    <TH><input name="ttc" type="text" value="" maxlength="15" SIZE="5"/>

    </BODY>


    Encore désolé du pavé de code mais je m'accroche........

  13. #33
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tva = Math.round(objp1.value * parseFloat(obj.value, 10) * 100) / 100;
    objp1 étant un objet (d'où le "obj" ), c'est sa value dont tu as besoin pour le calcul. Pareil pour toute la suite de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var tva = Math.round(objp1 * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(objp2 * parseFloat(obj.value, 10) * 100) / 100;
    objp1 et objp2 devant représenter la quantité et le prix, tu calcules aussi la tva sur la quantité apparemment
    En plus, tu écrase la 1° "tva" avec la 2° re-

    De plus, tu n'as pas ajouté les nouveaux paramètres dans les appels de la fonction.
    Donne un id aux input (tu peux mettre le même que pour le name, sous réserve que l'id reste unique dans la page).
    Tu pourras ainsi appeler ta fonction (pour le 1° select, par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="select" onchange="calcul(this, document.getElementById('pu1'), document.getElementById('q1'), document.getElementById('p1') )">
    ! Attention ! si tu n'ajoutes pas les id, ça ne fonctionnera que sur IE (et encore ...)
    En fait il faut ajouter le 4° param pour pouvoir mettre à jour le bon champ "prix".
    Dans ta fonction (qui devient function calcul(obj, objp1, objp2, objprix) ) tu pourras terminer par Et arrête de doubler systématiquement les lignes (ttc = ...) : ça ne veut pas dire grand chose : utilise les paramètres de la fonction.

    Ta "valeur" ne sert à rien ni ta référence à la liste au début : utilise les paramètres de la fonction ...

    Voilà, commençons () par là

    A+

  14. #34
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Bonjour et oui me revoila,

    Est ce que cette fonction de calcul est bonne ou pas avec les élements que tu m'as donné?

    function calcul(obj, opbjp1, objp2, objp3, objprix)
    {
    var valeur = parseInt(obj.options[obj.selectedIndex].value, 10);
    if (valeur == '#')
    return;

    var p1 = parseFloat(objp1.value);
    var p2 = parseFloat(objp2.value);


    if (valeur=="1")
    {
    var tva = Math.round(objp1.value * parseFloat(obj.value, 10) * 100) / 100;
    var tva1 = Math.round(objp2.value * parseFloat(obj.value, 10) * 100) / 100;
    var ttc = objprix.value;

    }
    else if (valeur=="0")
    {
    var tva = Math.round(objp1.value * parseFloat(obj.value, 10) * 100) / 100;
    var tva = Math.round(objp2.value * parseFloat(obj.value, 10) * 100) / 100;

    var ttc = objprix.value;

    }
    else
    {
    var tva = 0;
    var ttc = objprix.value ;


    }
    obj.form.tva.value = tva;
    objprix.value = ttc;
    }
    MErci d'avance.

  15. #35
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Je ne comprend pas cette erreur......

    objp1 is not defined
    calcul(select, null, null, null, undefined)bdc.php (ligne 17)
    onchange(change )
    [Break on this error] var p1 = parseFloat(objp1.value);
    Merci d'avance encore de ton aide

  16. #36
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Je ne comprend pas cette erreur......
    Ca dépend de l'appel de la fonction.

    Pour le reste, tu n'as pas tenu compte de plusieurs corrections que je t'avais donné (valeur, form ...)

    objp3 sert à rien, tes affectations de objprix/ttc sont inversées ...

    Pas le temps de tout répéter aujourd'hui => relis ...

    A+

  17. #37
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Je suis paumé.......
    Je me bat avec cette fonction mais je pense faire pire que mieu

  18. #38
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bon !
    Normalement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="select" onchange="calcul(this, document.getElementById('pu1'), document.getElementById('q1'), document.getElementById('p1') );">
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function calcul(obj, opbjp1, objp2, objprix)
    {
    var pu = parseFloat(objp1.value);
    var qt = parseFloat(objp2.value);
     
    var tva = Math.round(pu * parseFloat(obj.value, 10) * 100) / 100;
    var ttc = pu + tva;
     
    objprix.value = ttc*qt;
    }
    tu devrais pas être loin ...

    A+

  19. #39
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 77
    Par défaut
    Merci encore de ton aide

    Je dois quand même mettre mes conditions ???
    Et j'ai toujour objp1 is not defined.


  20. #40
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par chegerg Voir le message
    Je dois quand même mettre mes conditions ???
    Quelles conditions ?
    Citation Envoyé par chegerg Voir le message
    Et j'ai toujour objp1 is not defined.
    Si tu as bien ajouté les id (et qu'ils sont uniques dans la page), il n'y a pas de raison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <TH><INPUT TYPE="text" id="pu1" NAME="pu1" SIZE="3" MAXLENGTH="4" >
    <TH><INPUT TYPE="text" id="q1" NAME="q1" SIZE="3" MAXLENGTH="4" onBlur="test_champ(this)">
    <TH><INPUT TYPE="text" id="p1" NAME="p1" SIZE="8" MAXLENGTH="4" >
    A+

Discussions similaires

  1. Calcul dans un formulaire
    Par mikaloop dans le forum Access
    Réponses: 4
    Dernier message: 18/04/2006, 15h24
  2. disparition des calculs dans un formulaire
    Par OBIWAN64 dans le forum Access
    Réponses: 6
    Dernier message: 24/03/2006, 12h05
  3. problème de calcul dans un formulaire
    Par Bray02 dans le forum IHM
    Réponses: 1
    Dernier message: 07/12/2005, 11h45
  4. Calculs dans sous-Formulaire
    Par Bernjean dans le forum Access
    Réponses: 5
    Dernier message: 17/11/2005, 18h29
  5. Pb champ calcule dans sous formulaire
    Par Brial dans le forum Access
    Réponses: 6
    Dernier message: 12/11/2005, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo