Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Statistiques VARCENT

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Etoto

XLDnaute Barbatruc
Supporter XLD
Bonjour,

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
 

Pièces jointes

Dernière édition:
Bonjour Etoto,

je te propose cette petite amélioration :

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

soan
 
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 ?
 
@Etoto

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.​

soan
 
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.
 
Par contre pour arrondir 2 chiffres après la virgule c'est pas 2 qu'il faut mettre mais 4.

Il faudrait peut-être avant le If de faire n = n + 2 dans ce cas si tu veux que cela soit parfait (a moins que je suis un parfait idiot 😂 😂😅)
 
@Etoto

tu as écrit : « Par contre c'est pas censé être divisé par number2 ? »

number1 : 500
number2 : 600

différence : number2 - number1 = 600 - 500 = 100

si on divise par number2, ça fait : 100 / 600 = 0,166666666666667

si on divise par number1, ça fait : 100 / 500 = 0,2



500 × 16,67 % = 500 × 0,1667 = 83,35 ; ce n'est pas 100 !

500 × 20 % = 500 × 0,2 = 100

donc 100 est bien 20 % de 500. 🙂



on peut faire cette présentation :

VB:
       nombre1 : 500
variation 20 % : 100
-----------------------
       nombre2 : 600

soan
 
Jolie démonstration, mais dans le tuto que j'ai vu il disait l'inverse, mais bon tu viens de me prouver que sur internet pas tout est véridique 😅
 
@Etoto

tu as écrit : « Par contre pour arrondir 2 chiffres après la virgule c'est pas 2 qu'il faut mettre mais 4. »

a) pourquoi 4 ? 4 est pour arrondir avec 4 chiffres après la virgule, donc si on veut 4 décimales

b) c'est bien 2 pour arrondir avec 2 chiffres après la virgule, donc si on veut 2 décimales

relis l'Aide VBA sur la fonction Round() 😜

soan
 
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.
 

Pièces jointes

  • Capture.PNG
    12.8 KB · Affichages: 83
@Etoto

number1 = 324
number2 = 339

différence : number2 - number1 = 339 - 324 = 15

on divise par number1, ça fait : 15 / 324 = 0,0462962962962963

arrondi à 2 chiffres après la virgule : 0,05

=VARCENT(324;339) ➯ 0,0462963

=VARCENT(324;339;2) ➯ 0,05

l'arrondi à 2 chiffres après la virgule est correct, car comme la 3ème décimale est 6, la 2ème décimale 4 passe au chiffre supérieur qui est 5.​

VB:
            nombre1 : 324
variation 4,62963 % :  15,0000012
---------------------------------
            nombre2 : 339

soan
 
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.

EDIT : On s'est croisé, je vais voir ça
 

Pièces jointes

  • Annotation 2021-05-20 135824.jpg
    39.2 KB · Affichages: 76
Dernière édition:
@Etoto

dans ton post #1, tu as oublié de faire le changement de mon post #2 :
Dim vx# est passé sur la ligne en dessous. 😉

soan
Ok c'est officiel je suis perdu 😵 😵 😵 .

Cela donne quoi au final comme code ?

Si c'est exactement celui du post #2 ça m'arrondi toujours à 0 décimale si je mets 2, alors le problème persiste.
 
@Etoto

regarde le fichier joint. 🙂

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

soan
 

Pièces jointes

Dernière édition:
Bien vu c'est vrai que le pourcent est déjà un nombre décimal.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Suggestion Suggestion
Math et Trigo REGLE3
Réponses
7
Affichages
1 K
Réponses
2
Affichages
2 K
Réponses
1
Affichages
2 K
Réponses
9
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…