Automatiser des sommes en fonction des coches

ItzFolloWerS Messages postés 22 Date d'inscription mercredi 4 novembre 2020 Statut Membre Dernière intervention 24 novembre 2023 - 24 nov. 2023 à 13:48

Bonjour,

Je suis actuellement sur Adobe acrobat Pro 2017.

J'essaye de réaliser un formulaire pouvant additionner des valeurs en fonction des coches et des montants présents dans des champs de texte.

J'avoue être débutant et ne pas tout comprendre.

Vous trouverez ci-dessous une tentative de code réalisée qui ne fonctionne pas

// Fonction pour calculer la somme en fonction des cases cochées
function calculerSomme() {
  // Liste des champs à additionner avec leurs valeurs associées
  var champsAAdditionner = [
    { nom: "OUI CGFS", valeur: 0 },
    { nom: "OUI CTJ", valeur: 0 },
    { nom: "frais archivage exo", valeur: 40 },
    { nom: "ISACOMPTA OUI EXO", valeur: 200 },
    { nom: "Stockanim exo", valeur: 40 },
    { nom: "frais deplacement exo", valeur: 58 },
    { nom: "Total_Saisie_Exo", valeur: 0 },
    { nom: "Total_Cloture_Exo", valeur: 0 },
    { nom: "Total_Bilan_Ouverture", valeur: 0 },
  ];

  // Vérifier l'état des cases à cocher "TPE", "EI", et "SOCIETE"
  var tpeCochee = this.getField("TPE").value === "On";
  var eiCochee = this.getField("EI").value === "On";
  var societeCochee = this.getField("SOCIETE").value === "On";

  // Assurer qu'une seule option est sélectionnée
  if (tpeCochee && (eiCochee || societeCochee)) {
    this.getField("EI").value = "Off";
    this.getField("SOCIETE").value = "Off";
  } else if (eiCochee && (tpeCochee || societeCochee)) {
    this.getField("TPE").value = "Off";
    this.getField("SOCIETE").value = "Off";
  } else if (societeCochee && (tpeCochee || eiCochee)) {
    this.getField("TPE").value = "Off";
    this.getField("EI").value = "Off";
  }

  // Mettre à jour les valeurs en fonction des coches
  if (tpeCochee) {
    champsAAdditionner[0].valeur = 366; // "OUI CGFS"
    champsAAdditionner[1].valeur = 39; // "OUI CTJ"
  } else if (eiCochee) {
    champsAAdditionner[0].valeur = 532; // "OUI CGFS"
    champsAAdditionner[1].valeur = 59; // "OUI CTJ"
  } else if (societeCochee) {
    champsAAdditionner[0].valeur = 615; // "OUI CGFS"
    champsAAdditionner[1].valeur = 82; // "OUI CTJ"
  }

  // Initialiser la somme
  var somme = 0;

  // Parcourir la liste des champs à additionner
  for (var i = 0; i < champsAAdditionner.length; i++) {
    // Récupérer le champ
    var champ = this.getField(champsAAdditionner[i].nom);

    // Vérifier si la case est cochée
    if (champ && champ.isBox && champ.value === "On") {
      // Ajouter la valeur associée du champ à la somme
      somme += champsAAdditionner[i].valeur;
    }
  }

  // Mettre à jour le champ de résultat Total_Exo
  var champTotalExo = this.getField("Total_Exo");
  if (champTotalExo) {
    champTotalExo.value = somme;
  }
}

En ouvrant le débogueur j'obtiens ce message

"TypeError: this.getField(...) is null
1:AcroForm:Total_Cloture_Ref:Calculate"

Si le code n’est vraiment pas clair, je pourrai vous envoyer le fichier PDF concerné.

Je suis un peu largué…

Je vous remercie d'avance si vous pouvez m'éclairer.
Windows / Chrome 119.0.0.0