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. 🕵
Création d'une fonction partie 2. Le sujet est résolu
Re: Création d'une fonction partie 2.
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 !
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 !
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