Création boucle itérative VBA - Calcul TRI

Bonjour,

J'ai le calcul suivant à réaliser :

boucle

Ce calcul doit être effectué tant que la valeur n'est pas supérieure ou égale à "S" en incrémentant "i" présent dans une boucle :

condition while

Au final, une fois que la valeur a dépassée "S", on applique le calcul suivant :

TRI = S / (Ge x Ce x somme de i=1 à N (1+t)^ti-1)/(1+a)^(i-1) pour i arrêtant la boucle)

On ne s'occupe pas de N, la boucle calcule tant que la valeur de S n'est pas égalée ou dépassée.

Pour le moment j'ai fait le calcul à la "main" (à trouver dans l'excel ci-joint). Ce que que j'aimerais c'est écrire une formule personnalisée dans excel qui me permet de réaliser le calcul automatiquement. J'ai pensé à fait une boucle While comme ceci :

Function Calcul_TRI(S, t, a, Ge, Ce)

Dim X As Double, i As Long, Y As Double, W As Double, Z As Double
W = 0
Z = 0
X = 0
Y = 0
i = 0

Do While (S > Y)
W = (1 + t) ^ (i - 1)
Z = (1 + a) ^ (i - 1)

X = X + (W / Z)
Y = Ce * Ge * X

i = i + 1

Loop

Calcul_TRI = S / Y

End Function

Sans succès... J'obtiens 0 sans savoir quelles modifications effectuer...

J'espère avoir été clair, n'hésitez pas s'il vous faut des informations complémentaires.

Merci d'avance !

10calcul-tri.xlsx (16.58 Ko)

bonsoir,

je ne vois pas de problème avec ta fonction. (mais je n'ai pas les compétences pour vérifier que le résultat est exact !)

11calcul-tri.xlsm (22.17 Ko)

Bonjour à tous,

erreur, désolé...
eric

Bonjour h2so4,

En effet, la formule a l'air de fonctionner ! Le résultat est en nombre d'année comme indiqué en rouge dans l'excel ci-joint.

J'ai reproduit dans le tableau "calcul TRI" ce que doit donner le résultat en faisant les différentes étapes du code. La formule me donne un résultat complètement différent du calcul à la "main" qui est juste.

J'aimerais lire les différentes étapes de mon code pour essayer de trouver l'erreur mais je ne suis pas familier avec les "espions" et la fenêtre d'exécution.

Merci d'avance !

11calcul-tri.xlsx (16.58 Ko)

Bonjour à tous,

Je pense qu'il faut juste initialiser la variable i à 1 (et bien sûr surveiller les arguments, notamment S, Ge et Ce) :

Function Calcul_TRI(S, t, a, Ge, Ce)

Dim Y As Double, W As Double, Z As Double, X As Double
Dim i As Long

i = 1 '<<<<< initialisation à 1
While Y < S '<<<<< inférieur ou inférieur ou égal ?
    W = (1 + t) ^ (i - 1)
    Z = (1 + a) ^ (i - 1)
    X = X + (W / Z)
    Y = Ce * Ge * X
    i = i + 1
wend

Calcul_TRI = S / Y

End Function

Cdlt,

(Re)Bonjour à tous,

C'est bon j'ai élucidé le mystère, en fait la fonction fonctionnait très bien, je ne regardais pas le bon résultat.

En effet, la formule affichait Calcul_TRI = S/Y au lieu d'afficher le nombre d'année "i".

Merci pour votre aide et à bentôt !

Oui, ça m'a effleuré l'esprit car i était finalement la seule inconnue.

Bonne continuation,

Rechercher des sujets similaires à "creation boucle iterative vba calcul tri"