XL 2013 Prime suivant tranche variable

Chester Mefield

XLDnaute Nouveau
Bonjour,
Je ne sais pas comment cela peut s'appeler, donc pas simple à trouver... :-/
Existe t-il un genre de fonction rechercheV pour qu'en fonction d'un résultat variable cela aille chercher une valeur fixe liée à une tranche définie ?
Exemple : A= 172.5 et b1 =0%, b2=50%, b3=100%, b4=150%
upload_2018-8-2_9-5-48.png

Merci par avance.

PS : ici il y a peu de tranches et j'ai d'abord pensé à la condition SI... mais j'ai 21 tranches !

Chester.
 

chris

XLDnaute Barbatruc
Bonjour

Si tes tranches sont toujours de 50% le calcul peut être réalisé sans tableau des tranches : =PLAFOND(Valeur;50%)/50%*$A$1

Sinon utiliser RECHERCHEV avec la 4ème argument à vrai

Edit : tes limites de tranches étant les valeurs rondes c'est =((PLANCHER(Valeur;50%)/50%)+1)*$A$1
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Si c'est un vrai calcul par tranches, j'ai écrit ces jours ci cette fonction perso :
VB:
Function PCTranch(ByVal X As Double, ByVal TXY, _
   Optional ByVal C2 As Long = 2) As Double
Rem. ——— Cumul de pourcentages d'une valeur dans différentes tranches.
'  Paramètres :
'  X: La valeur dont on veut calculer une somme de pourcentages.
'  TXY: Plage rectangulaire ou tableau de 2 colonnes. À chaque ligne :
'     Colonne 1: Seuil de X à partir duquel le pourcentage s'applique.
'     Colonne C2: Pourcentage 0 à 100 appliqué à (X - Seuil), jusqu'à
'        concurrence éventuelle d'un autre seuil spécifié ligne suivante.
   Dim L As Long, X0 As Double, X1 As Double, Y0 As Double
   If TypeOf TXY Is Range Then TXY = TXY.Value
   X0 = TXY(1, 1): Y0 = TXY(1, C2)
   If X <= X0 Then PCTranch = 0: Exit Function
   For L = 2 To UBound(TXY, 1)
      X1 = TXY(L, 1): If X <= X1 Then Exit For
      PCTranch = PCTranch + (X1 - X0) * Y0 / 100
      X0 = X1: Y0 = TXY(L, C2): Next L
   PCTranch = PCTranch + (X - X0) * Y0 / 100
   End Function
Exemple d'utilisation :
:
upload_2018-8-3_12-29-39.png
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Une autre fonction qui peut vous intéressez :
VB:
Function IntpoLinT(ByVal X As Double, ByVal TXY, _
   Optional ByVal C2 As Long = 2) As Double
Rem. ——— Interpolation linéaire entre deux valeurs données dans une table.
'  Paramètres :
'  X: La valeur dont on veut calculer l'interpolation.
'  TXY: Plage rectangulaire ou tableau de 2 colonnes.
'     Colonne 1: Valeurs seuils de X.
'     Colonne C2: Valeur Y correspondantes de la fonction.
'        Remarque: une valeur X hors plages relèvera des plages extrêmes définies.
'           La première et dernière valeurs X ne sont donc pas de vrais seuils,
'           puisque les pentes des extrêmes sont prolongées au delà si nécessaires.
'           Notamment s'il n'y a que 2 XY, la fonction sera pour toute valeur
'           une droite passant par ces 2 points.
   Dim L As Long
   If TypeOf TXY Is Range Then TXY = TXY.Value
   L = UBound(TXY, 1) - 1
   Select Case X
      Case Is < TXY(1, 1): L = 1
      Case Is < TXY(L, 1): L = WorksheetFunction.Match(X, WorksheetFunction.Index(TXY, 0, 1))
      End Select
   IntpoLinT = IntpoLin(X, TXY(L, 1), TXY(L, C2), TXY(L + 1, 1), TXY(L + 1, C2))
   End Function
Function IntpoLin(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
                                     ByVal X2 As Double, ByVal Y2 As Double) As Double
   IntpoLin = Y1 + (Y2 - Y1) * (X - X1) / (X2 - X1)
   End Function
upload_2018-8-3_13-9-57.png
 
Dernière édition:

Statistiques des forums

Discussions
312 504
Messages
2 089 073
Membres
104 018
dernier inscrit
Mzghal