Page 1 sur 1

Création d'une fonction partie 2.

Publié : 16 mai 2024 16:37
par Amon_
Bonjour ! 😁

Je fais suite à un premier post du 24 avril 2024 dont l'objectif était de créer 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.

Cliquer sur ce lien pour voir l'ancien sujet ---> viewtopic.php?p=966#p966

Aujourd'hui je viens avec l'espoir d'obtenir à nouveau votre aide. Je souhaite dorénavant que ma fonction calcul le taux de TPV non pas uniquement en fonction de l'année mais aussi du jour et du mois de l'achat. Sauf qu'avec le script que j'ai tenté de créer, la modification du taux de TPV se fait toujours en fonction de l'année. 

Voici mon code actuelle avec mes tentatives pour ajouter cette particularité : 

/**
 * 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, mois et jours
function TPVtest(dateAchat) {
  var dateActuelle = new Date();
  var dateAchat = new Date(dateAchat);
  var differenceAnnees, differenceMois, differenceJours;
  try {
    differenceAnnees = dateActuelle.getFullYear() - dateAchat.getFullYear();
    differenceMois = dateActuelle.getMonth() - dateAchat.getMonth();
    differenceJours = dateActuelle.getDate() - dateAchat.getDate();
    // Ajustement si le mois actuel est avant le mois d'achat ou s'il est le même mais le jour actuel est avant le jour d'achat
    if (differenceMois < 0 || (differenceMois === 0 && differenceJours < 0)) {
      differenceAnnees--;
    }
  } catch (e) {
    console.error('Problème lors du calcul entre les deux dates', e);
    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 if (differenceAnnees <= 0) {
    return tauxDegressifs[1]; // Considérer que la première année est utilisée si la différence est négative ou nulle
  } else {
    return tauxDegressifs[differenceAnnees];
  }
}

Pouvez-vous m'aider à trouver la solution s'il vous plaît ? Je continue mes recherches en parallèle et vous tiendrais informé si je l'ai trouvé.

En vous remerciant d'avance. 🕵

Re: Création d'une fonction partie 2.

Publié : 16 mai 2024 17:19
par RémiD
Bonjour Amon_ ! J'espère que tu vas bien ?
Je me souviens du topic d'avril, et en effet il manquait juste quelques petites lignes pour rendre ce calcul précis à l'échelle mois/jour 😉

Voici une version modifiée de ton code qui inclut cette nouvelle précision :

/**
* Rempli automatiquement le taux de TPV en fonction de l'année de détention et la date du jour
* @customfunction
*/
function TPVtest(dateAchat) {
var dateActuelle = new Date();
var dateAchat = new Date(dateAchat);
var differenceAnnees, differenceMois, differenceJours;
try {
var diff = (dateActuelle.getTime()-dateAchat.getTime())/1000;
// Convertir ms -> Jours
diff = diff / (60 * 60 * 24);
// Convertir le nombre d'écarts en jours en année, en considérant la moyenne de 365 jours par an
differenceAnnees = Math.abs(Math.round(diff / 365));
} catch (e) {
console.error('Problème lors du calcul entre les deux dates', e);
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 if (differenceAnnees <= 0) {
return tauxDegressifs[1]; // Considérer que la première année est utilisée si la différence est négative ou nulle
} else {
return tauxDegressifs[differenceAnnees];
}
}

J'ai rajouté 2 commentaires pour expliquer les opérations ajoutées, mais en gros une différence entre deux dates est possible en Javascript/GAS (en utilisant la méthode .getTime).
Cette opération nous permet de traiter des dates précisément, les comparer, faire une différence ...

J'espère que cette petite amélioration répondra à tes besoins, n'hésite pas à revenir vers nous si tu as des questions !
Et si un jour tu as besoin d'aller plus loin avec Google Apps Script, Numericoach propose des formations tous niveaux, toutes réalisées par nos collaborateurs experts 🧙‍♂️

Belle fin de journée à toi et à très vite !