Création d'une fonction. Le sujet est résolu

Avatar de l’utilisateur
Amon_

Membre tout neuf
Messages : 3
Inscription : 24 avr. 2024 19:00
A remercié : 2 fois

Création d'une fonction.

Message 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é 61 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é 61 fois
[/b]
 
Avatar de l’utilisateur
RémiD

Coach Numericoach
Invétéré
Messages : 20
Inscription : 12 avr. 2022 16:38
A remercié : 3 fois
Remercié : 3 fois

Re: Création d'une fonction.

Message 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 :)
Avatar de l’utilisateur
Amon_

Membre tout neuf
Messages : 3
Inscription : 24 avr. 2024 19:00
A remercié : 2 fois

Re: Création d'une fonction.

Message 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é 47 fois
Capture d'écran 2024-04-26 104641.png
Capture d'écran 2024-04-26 104641.png (58.64 Kio) Consulté 47 fois
 
Avatar de l’utilisateur
RémiD

Coach Numericoach
Invétéré
Messages : 20
Inscription : 12 avr. 2022 16:38
A remercié : 3 fois
Remercié : 3 fois

Re: Création d'une fonction.

Message 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 😀
 
Avatar de l’utilisateur
Amon_

Membre tout neuf
Messages : 3
Inscription : 24 avr. 2024 19:00
A remercié : 2 fois

Re: Création d'une fonction.

Message 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 😁
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous