Voici une fonction qui calcule la variation en pourcentage
Voici son fonctionnement en PJ
Et voilà son code
VB:
Function VARCENT(number1#, number2#, Optional n As Byte) As Double
If number1 = 0 Then Exit Function
Dim vx#: vx = (number2 - number1) / number1
If n > 0 Then vx = Round(vx, n)
VARCENT = vx
End Function
Si vous avez une amélioration a ajouter, dites-le moi.
Crée par @Etoto
Améliorée par @soan
Function VARCENT(number1#, number2#, Optional n As Byte) As Double
If number1 = 0 Then Exit Function
Dim vx#: vx = (number2 - number1) / number1
If n > 0 Then vx = Round(vx, n)
VARCENT = vx
End Function
Function VARCENT(number1#, number2#, Optional n As Byte) As Double
Dim vx#: If number1 = 0 Then Exit Function
vx = (number2 - number1) / number1
If n > 0 Then vx = Round(vx, n)
VARCENT = vx
End Function
Ok merci de ce pas je vais la mettre comme code de base, merci de ton aide. J'ai donc rajouté ton nom à la fonction. Par contre c'est pas censé être divisé par number2 ?
on s'est croisés ; relis mon post #2 précédent ; j'ai déplacé Dim vx# sur la ligne du dessous, car c'est inutile de déclarer vx si number1 = 0 ; en effet, dans ce cas, y'a pas d'solution car c'est impossible de faire une division par 0 : c'est mathématiquement impossible et mon test pour quitter la fonction évite la valeur d'erreur #DIV/0! ; le n optionnel permet de faire éventuellement un arrondi ; par exemple, si on envoie 2 pour n, ça fera un arrondi à 2 chiffres après la virgule.
on s'est croisés ; relis mon post #2 précédent ; j'ai déplacé Dim vx# sur la ligne du dessous, car c'est inutile de déclarer vx si number1 = 0 ; en effet, dans ce cas, y'a pas d'solution car c'est impossible de faire une division par 0 : c'est mathématiquement impossible et mon test pour quitter la fonction évite la valeur d'erreur #DIV/0! ; le n optionnel permet de faire éventuellement un arrondi ; par exemple, si on envoie 2 pour n, ça fera un arrondi à 2 chiffres après la virgule.
Waw bravo, mais tu vois tout cela je savais pas, le VBA c'est vraiment pas mon fort , alors tu as tout juste, j'ai rien dit. Je vais aussi mettre à jour le fichier joint que j'ai fait avec ton code.
on s'est croisés ; relis mon post #2 précédent ; j'ai déplacé Dim vx# sur la ligne du dessous, car c'est inutile de déclarer vx si number1 = 0 ; en effet, dans ce cas, y'a pas d'solution car c'est impossible de faire une division par 0 : c'est mathématiquement impossible et mon test pour quitter la fonction évite la valeur d'erreur #DIV/0! ; le n optionnel permet de faire éventuellement un arrondi ; par exemple, si on envoie 2 pour n, ça fera un arrondi à 2 chiffres après la virgule.
Ha bon ?? J'ai fait une test avec ton VARCENT et si le dernier paramètre est 2 cela arrondi à 0 décimale, regarde toi même, c'est à 4 que c'est arrondi à 2 décimales.
Alors soit je suis débile, soit mon Excel bug, soit le VBA fonctionne différemment sur ma version, soit ce que tu me dit est bizarre, parce que regarde désormais si je place le paramètre 2 dans ma formule, c'est arrondi tout cour, y'a plus de décimale.
tu avais raison : c'est bien un arrondi avec 4 ; car y'a un format avec % (colonne F) ;
sinon, sans ce format avec %, c'est bien un arrondi avec 2(colonne D).
le code VBA est bien le même que celui du post #2, qui est maintenant aussi dans le post #1. (merci de m'avoir cité)
VB:
Option Explicit
Function VARCENT(number1#, number2#, Optional n As Byte) As Double
If number1 = 0 Then Exit Function
Dim vx#: vx = (number2 - number1) / number1
If n > 0 Then vx = Round(vx, n)
VARCENT = vx
End Function
tu avais raison : c'est bien un arrondi avec 4 ; car y'a un format avec % (colonne F) ;
sinon, sans ce format avec %, c'est bien un arrondi avec 2(colonne D).
le code VBA est bien le même que celui du post #2, qui est maintenant aussi dans le post #1. (merci de m'avoir cité)
VB:
Option Explicit
Function VARCENT(number1#, number2#, Optional n As Byte) As Double
If number1 = 0 Then Exit Function
Dim vx#: vx = (number2 - number1) / number1
If n > 0 Then vx = Round(vx, n)
VARCENT = vx
End Function