Page 1 sur 1

Création d'une fonction.

Publié : 24 avr. 2024 19:14
par Amon_
Bonjour, 

Je tente pour mon travail de créer une fonction, je vous explique. 
J'ai constitué un tableau permettant de calculer la TPV (taxe sur plus-value) sur un produit X. Afin de calculer cette taxe, il existe un tableau dégressif qui permet de connaitre la TPV exact suivant l'année de détention du produit X. Le voici : 
 Image

Mon objectif est le suivant : je voudrais en fonction de la date d'achat du produit X et de la date du jour que la cellule correspondant au "TAUX TPV" (voir tableau en screen à la fin) se remplisse automatiquement. Pour cela j'ai tenté de réalisé le script suivant :
 
// Fonction pour calculer le taux en fonction de la différence entre les années
function TPV(dateAchat) {
  var dateActuelle = new Date();
  var differenceAnnees = dateActuelle.getFullYear() - dateAchat.getFullYear();
  var tauxDegressifs = {
    1: 0.3620,
    2: 0.3620,
    3: 0.3439,
    4: 0.3258,
    5: 0.3077,
    6: 0.2896,
    7: 0.2715,
    8: 0.2534,
    9: 0.2353,
    10: 0.2172,
    11: 0.1991,
    12: 0.1810,
    13: 0.1629,
    14: 0.1448,
    15: 0.1267,
    16: 0.1086,
    17: 0.0905,
    18: 0.0724,
    19: 0.0543,
    20: 0.0362,
    21: 0.0181,
    22: 0.0000
  };
  if (differenceAnnees >= Math.max(...Object.keys(tauxDegressifs))) {
    return tauxDegressifs[Math.max(...Object.keys(tauxDegressifs))];
  } else {
    return tauxDegressifs[differenceAnnees];
  }
}

Simplement lorsque je tente de l'exécuter j'ai l'erreur suivante qui s'affiche : 
Capture d'écran 2024-04-24 191629.png
Capture d'écran 2024-04-24 191629.png (7.52 Kio) Consulté 3977 fois
Pouvez-vous m'aider à régler ce problème s'il vous plaît ? Je n'ai pas les compétences requises pour le corriger et mes recherches restent vaines.

En vous remerciant d'avance. 

(Voici le screen de mon tableau si ça peut vous aider à mieux comprendre) 
Capture d’écran 2024-04-24 191538.pdf.jpg
Capture d’écran 2024-04-24 191538.pdf.jpg (142.38 Kio) Consulté 3977 fois
[/b]
 

Re: Création d'une fonction.

Publié : 25 avr. 2024 09:47
par RémiD
Bonjour Amon_ !
Merci pour ton post détaillé, ton code semble être okay, toutefois j'ai l'impression que ta variable "dateAchat" n'est pas un objet Javascript 🤔
Il faudrait que tu t'assures que l'argument dateAchat soit bien une date JS, voici comment tu peux corriger tout ça :

// Fonction pour calculer le taux en fonction de la différence entre les années
function TPV(dateAchat) {
  var dateActuelle = new Date();
  var dateAchat= new Date(dateAchat);
  var differenceAnnees;
  try {
       differenceAnnees = dateActuelle.getFullYear() - dateAchat.getFullYear();
  } catch (e) {
       console.error('Problème lors du calcul entre les deux dates', e);
  }
  if(!differenceAnnees)
  {
       return;
  }
  var tauxDegressifs = {
    1: 0.3620,
    2: 0.3620,
    3: 0.3439,
    4: 0.3258,
    5: 0.3077,
    6: 0.2896,
    7: 0.2715,
    8: 0.2534,
    9: 0.2353,
    10: 0.2172,
    11: 0.1991,
    12: 0.1810,
    13: 0.1629,
    14: 0.1448,
    15: 0.1267,
    16: 0.1086,
    17: 0.0905,
    18: 0.0724,
    19: 0.0543,
    20: 0.0362,
    21: 0.0181,
    22: 0.0000
  };
  if (differenceAnnees >= Math.max(...Object.keys(tauxDegressifs))) {
    return tauxDegressifs[Math.max(...Object.keys(tauxDegressifs))];
  } else {
    return tauxDegressifs[differenceAnnees];
  }
}

J'espère que ce petit fix pourra t'aider ! Belle journée à toi et à très vite :)

Re: Création d'une fonction.

Publié : 26 avr. 2024 10:49
par Amon_
Bonjour RémiD 

Dans un premier temps merci pour ta réponse et ton aide c'est gentil de ta part.

Dans un second temps, c'est génial car le code n'affiche plus aucune erreur !! 

Enfin, puis-je te solliciter une dernière fois s'il te plaît sans abuser de ton temps. 

La fonction a été correctement créée et peut être utilisée dans mon GSHEET, cependant le calcul ne s'effectue pas et le taux reste à 0.00%. Aurais-tu une idée de la raison pour laquelle cela se produit ? 

Voici à nouveau le code que tu as fixer pour moi : 

/**
 * Rempli automatiquement le taux de TPV en fonction de l'année de détention et la date du jour
 * @customfunction
 */


// Fonction pour calculer le taux en fonction de la différence entre les années
function TPV(dateAchat) {
  var dateActuelle = new Date();
  var dateAchat= new Date(dateAchat);
  var differenceAnnees;
  try {
       differenceAnnees = dateActuelle.getFullYear() - dateAchat.getFullYear();
  } catch (e) {
       console.error('Problème lors du calcul entre les deux dates', e);
  }
  if(!differenceAnnees)
  {
       return;
  }
  var tauxDegressifs = {
    1: 0.3620,
    2: 0.3620,
    3: 0.3439,
    4: 0.3258,
    5: 0.3077,
    6: 0.2896,
    7: 0.2715,
    8: 0.2534,
    9: 0.2353,
    10: 0.2172,
    11: 0.1991,
    12: 0.1810,
    13: 0.1629,
    14: 0.1448,
    15: 0.1267,
    16: 0.1086,
    17: 0.0905,
    18: 0.0724,
    19: 0.0543,
    20: 0.0362,
    21: 0.0181,
    22: 0.0000
  };
  if (differenceAnnees >= Math.max(...Object.keys(tauxDegressifs))) {
    return tauxDegressifs[Math.max(...Object.keys(tauxDegressifs))];
  } else {
    return tauxDegressifs[differenceAnnees];
  }
}

En te remerciant d'avance, passe une très belle journée à bientôt ! 
Capture d’écran 2024-04-26 104614.png
Capture d’écran 2024-04-26 104614.png (133.21 Kio) Consulté 3963 fois
Capture d'écran 2024-04-26 104641.png
Capture d'écran 2024-04-26 104641.png (58.64 Kio) Consulté 3963 fois
 

Re: Création d'une fonction.

Publié : 26 avr. 2024 11:29
par RémiD
Hello Amon,
Avec plaisir ! Content d'avoir déjà pu t'aider là dessus !
J'ai pu tester ton code, et je te confirme qu'il fonctionne très bien de mon côté, avec un retour pertinent par rapport à la fonction :

Image

Le problème dans ton Sheets est l'utilisation de ta custom fonction, en effet ton script a la capacité de calculer l'écart de temps en année entre la date du jour VS la date passée en argument.
Dans ton utilisation pour l'instant tu passes en argument de ta fonction le nombre d'années d'écart, alors qu'elle attends simplement la date de départ 😀

Tu peux donc corriger la cellule en face de "Taux PV" par la fonction : =TPV(D9)
(si D9 correspond bien à la cellule contenant DateAchat)

Tout devrait fonctionner !
N'hésites pas à me confirmer que tout est ok ! Belle journée à toi et à très vite 😀
 

Re: Création d'une fonction.

Publié : 26 avr. 2024 15:55
par Amon_
Tu es incroyable RémiB 🧙, toute mon équipe et moi-même te remercions. Ton aide nous a été très précieuse.Tout fonctionne à merveille, je n'ai plus qu'à l'utiliser.Je te souhaite plein de belles choses, à bientôt et passe un très bon week-end 😁

Re: Création d'une fonction.

Publié : 24 juil. 2024 21:01
par Thierry
Il est trop fort ce Rémi !
N'hésitez pas à revenir poser vos questions sur ce forum !
Y a vraiment une super équipe chez Numericoach