Prix dégressif par formule plutôt que table de référence
Bonjour à tous,
je viens vers vous car je suis actuellement en train de réaliser une feuille pour mon employeur.
Etant plus orienté "mathématiques" que "économie", une de ses demandes m'est apparue comme très simple à réaliser là où, visiblement, après recherches sur internet, personne ne semble avoir fait de cette manière. (A la base je suis développeur 3D et créé des animations fractales ou logiciels de modélisation, donc assez loin de EXCEL et ses us et coutumes ^^)
Il s'agit d'appliquer à un prix dégressif à un produit. Ils imaginaient donc que la feuille contienne diverses tables avec les différents paliers à appliquer.
Je leur ai proposé à la place, pour ne pas avoir à passer par des tas de tableaux, un simple formule cosinusoïdale, qui me semble beaucoup plus propre.
J'aurais voulu avoir votre avis là-dessus et si vous pensez que le palier à un intérêt ou s'il n'a, comme j'en ai l'impression, été créé que pour permettre d'obtenir un "semblant de courbe" sans avoir à passer par des mathématiques plus complexes.
Merci d'avance pour vos retours
Voici le "résumé" afin de mieux voir le fonctionnement :
Pour ceux voulant essayer, voici le code :
Function JGCOURBE(Quantite, Prix, Prix_Min, Quantite_Max, Format, Palliers)
Pi = 3.141592654
' Si la quantité est supérieure ou égale à la quantité maximale le calcul sera le suivant :
If Quantite >= Quantite_Max Then
JGCOURBE = Quantite * Prix_Min
End If
' Si la quantité est inférieure à la quantité maximale et le format égale à "1" alors c'est le type cosinusoïdale qui s'applique
If Quantite < Quantite_Max And Format = 1 Then
JGCOURBE = Quantite * (Prix_Min + ((Prix - Prix_Min) * Cos((90 / (Quantite_Max - 1) * (Quantite - 1) / 180) * Pi)))
End If
' Si la quantité est inférieure à la quantité maximale et le format égale à "2" alors c'est le type linéaire qui s'applique
If Quantite < Quantite_Max And Format = 2 Then
JGCOURBE = (Prix - ((Prix - Prix_Min) / Quantite_Max) * (Quantite - 1)) * Quantite
End If
' Si la quantité est inférieure à la quantité maximale et le format égale à "3", alors c'est un premier type par palliers avec le nombre de palliers indiqué.
If Quantite < Quantite_Max And Format = 3 Then
PPP = (Prix - Prix_Min) / Palliers
ESP = Quantite_Max / Palliers
' Nous faisons une boucle qui passe par tous les palliers et vérifie si la quantité voulue est sur ce pallier ou non. Si elle y est nous appliquons le calcul.
For i = 0 To Palliers
' La différence entre Palliers type 3 et 4 est ici,
If Quantite > i * ESP And Quantite <= (i + 1) * ESP Then
JGCOURBE = (Prix - (i * PPP)) * Quantite
End If
Next
End If
' Si la quantité est inférieure à la quantité maximale et le format égale à "4", alors c'est un second type par palliers avec le nombre de palliers indiqué.
If Quantite < Quantite_Max And Format = 4 Then
PPP = (Prix - Prix_Min) / Palliers
ESP = Quantite_Max / Palliers
For i = 0 To Palliers
If Quantite >= i * ESP And Quantite < (i + 1) * ESP Then
JGCOURBE = (Prix - (i * PPP)) * Quantite
End If
Next
End If
' Fin de la fonction
End FunctionLe point critique pour le prix minimum est assez simple à calculer : (Prix de base)*2Pi/10.
Si le prix minimum est inférieur à celui-ci, la courbe s'inversera à un moment.
Bonjour,
Je n'ai pas décortiqué ta fonction (mais je la mets de côté pour le faire plus tard, et te remercie si, comme je le pense il s'agit d'un instrument sophistiqué pouvant opérer un dégression selon des critères différenciés...)
Ce que je suggèrerais, c'est de réaliser une simulation suffisamment étendue pour avoir une vue d'ensemble, et éventuellement apporter des ajustements en fonction des résultats désirés (contrôles de cohérence des arguments fournis, etc.)
Si tu notes des erreurs ou des résultats indésirés, on pourra s'y repencher pour détecter d'où cela provient...
Je conseillerais juste, pour une bonne tenue du code, de déclarer tes variable (Pi, PPP, ESP), de définir Pi par :
Pi = WorksheetFunction.Pi()et de rendre ton argument Palliers Optional, il n'intervient en effet que pour les formats 3 ou 4.
Cordialement.
Et encore, bravo !
Ah, je vais me renseigner là-dessus, je ne savais pas que c'était faisable ^^
Merci pour les conseils!
Nouveau code tenant compte des remarques, l'Optional est bien pratique
Function JGCOURBE(Quantite, Prix, Prix_Min, Quantite_Max, Format, Optional paliers)
' Déclaration variables
' Je ne déclare pas PPP et ESP dans les variables globales car elles font appel à un argument optionnel. La déclaration de ces variables doit donc se trouver
' au sein des conditions où la variable "paliers" est appelée.
Pi = WorksheetFunction.Pi() ' Déclaration Pi
' Calcul de base, au-delà des limites de la dégression.
If Quantite >= Quantite_Max Then ' Si la quantité est supérieure ou égale à la quantité maximale le calcul sera le suivant :
JGCOURBE = Quantite * Prix_Min
End If
' Calcul selon méthode 1 : courbe
If Quantite < Quantite_Max And Format = 1 Then ' Si la quantité est inférieure à la quantité maximale et le format égale à "1" alors c'est le type cosinusoïdale qui s'applique
JGCOURBE = Quantite * (Prix_Min + ((Prix - Prix_Min) * Cos((90 / (Quantite_Max - 1) * (Quantite - 1) / 180) * Pi)))
End If
' Calcul selon méthode 2 : linéaire
If Quantite < Quantite_Max And Format = 2 Then ' Si la quantité est inférieure à la quantité maximale et le format égale à "2" alors c'est le type linéaire qui s'applique
JGCOURBE = (Prix - ((Prix - Prix_Min) / Quantite_Max) * (Quantite - 1)) * Quantite
End If
' Calcul selon méthode 3 : paliers 1
If Quantite < Quantite_Max And Format = 3 Then ' Si la quantité est inférieure à la quantité maximale et le format égale à "3", alors c'est un premier type par paliers avec le nombre de paliers indiqué.
PPP = (Prix - Prix_Min) / paliers ' Déclaration Prix par palier
ESP = Quantite_Max / paliers ' Déclaration Espacement entre paliers
For i = 0 To paliers ' Nous faisons une boucle qui passe par tous les paliers et vérifie si la quantité voulue est sur ce palier ou non. Si elle y est nous appliquons le calcul.
If Quantite > i * ESP And Quantite <= (i + 1) * ESP Then ' La différence entre paliers type 3 et 4 est ici.
JGCOURBE = (Prix - (i * PPP)) * Quantite
End If
Next
End If
' Calcul selon méthode 4 : paliers 2
If Quantite < Quantite_Max And Format = 4 Then ' Si la quantité est inférieure à la quantité maximale et le format égale à "4", alors c'est un second type par paliers avec le nombre de paliers indiqué.
PPP = (Prix - Prix_Min) / paliers ' Déclaration Prix par palier
ESP = Quantite_Max / paliers ' Déclaration Espacement entre paliers
For i = 0 To paliers
If Quantite >= i * ESP And Quantite < (i + 1) * ESP Then
JGCOURBE = (Prix - (i * PPP)) * Quantite
End If
Next
End If
End Function