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 :
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 :
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)
[/b]
Création d'une fonction. Le sujet est résolu
Re: Création d'une fonction.
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
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.
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 !
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 !
Re: Création d'une fonction.
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 :
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
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 :
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.
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
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