Créer une boucle en Visual Basic sous Access

cs_ppppp Messages postés 12 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 2 novembre 2004 - 19 août 2004 à 10:25
dichotom Messages postés 1 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 00:17
Tout d'abord bonjour à tous et à toutes.
Je suis assez novice en visual basic donc je me tourne une fois de plus vers vous.
Le problème à l'ordre du jour est le suivant:
j'ai une formule qui calcule des mensualités à partir d'un capital d'une durée et d'un taux:
Mensualité=(Capital*((Taux/100)/12)*(1+((Taux/100)/12))^Durée)/(((1+((Taux/100)/12))^Durée)-1)
Bon le truc c'est qu'à partir de ça il faut que je trouve le taux.Il faut donc procéder par itérations (par essais successifs).
Je cherche donc quelqu'un capable de me donner du code pour m'eviter de faire ça:

Dim var1 As Double
Dim var2 As Currency
var1 = 0
var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Durée) / (((1 + ((var1 / 100) / 12)) ^ Durée) - 1)
If var2 = Mensualité Then
Taux = var1
Else: var1 = 0.01
var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Durée) / (((1 + ((var1 / 100) / 12)) ^ Durée) - 1)
If var2 = Mensualité Then
Taux = var1
Else: var1 = 0.02
var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Durée) / (((1 + ((var1 / 100) / 12)) ^ Durée) - 1)
If var2 = Mensualité Then
Taux = var1

Je ne sais pas utiliser les boucles et les compteurs donc si vous pouvez m'aider.
Merci d'avance!

10 réponses

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
19 août 2004 à 10:43
Evites les variables avec des accents :

Do Until Var2=Mensualite ' Jusqu'a ce que....

Var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Duree) / (((1 + ((var1 / 100) / 12)) ^ Duree) - 1)
Var1=Var1+0.01

Loop

It@li@
0
cs_ppppp Messages postés 12 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 2 novembre 2004
19 août 2004 à 11:08
J'ai essayé ce que tu m'as donné (et je t'en remercie)mais ça me crée une erreur d'éxécution "Dépassement de capacité" sur la ligne
Var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Duree) / (((1 + ((var1 / 100) / 12)) ^ Duree) - 1)
et je ne vois pas pourquoi.
merci encore de m'aider.
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
19 août 2004 à 11:25
Excuses ca plante quanil divise par 0
..il suffit d'incrementer la variable avant

Do Until Var2=Mensualite ' Jusqu'a ce que....

Var1=Var1+0.01
Var2 = (Capital * ((var1 / 100) / 12) * (1 + ((var1 / 100) / 12)) ^ Duree) / (((1 + ((var1 / 100) / 12)) ^ Duree) - 1)

Loop

It@li@
0
cs_ppppp Messages postés 12 Date d'inscription mardi 17 août 2004 Statut Membre Dernière intervention 2 novembre 2004
19 août 2004 à 11:37
Bon je te remercie mais je t'avais prévenu je suis novice!
jJai l'impression que ça ne sors jamais de la boucle,je suis obligé de tout arrêter avec le gestionnaire de tache!
Y a pas un truc à faire après ce morceau de prog??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
19 août 2004 à 15:31
Faut dire que ta boucle doit tourner pas mal, surtout si tu tombes pas exactement sur la bonne valeur parce qu'alors il risque de tourner indéfiniment.
Tu n'as pas à la base une idée du taux, du genre il peux valoir tant ou tant ? Tu pourrais du coup éviter de tester toutes les valeurs depuis 0. D'ailleurs j'imagine que tu ne dépasse pas 100 (ce serait bizarre pour un taux) ce qui fait que tu peux faire un
For Var1 = 0 to 100 Step 0.01
  If ("La formule" = Mensualité) Then
    Exit For
  End If
Next Var1
If (Var1 = 100) Then
  MsgBox "Pas trouvé !"
Else
  MsgBox "Le taux est : " & Var1
End If


Ta fonction étant croissante, tu pourrais tenter une petite dichotomie :
Min = 0
Max = 100
Precision = 0.01 'C'est ce que tu a l'air de vouloir
While (Max - Min >= Precision)
  Milieu = (Max + Min)/2
  Temp = (Capital * ((Milieu / 100) / 12) * (1 + ((Milieu/ 100) / 12)) ^ Duree) / (((1 + ((Milieu / 100) / 12)) ^ Duree) - 1)
  If (Temp <= Mensualite) Then
  ' Au dessus
    Max = Milieu
  Else
  ' En dessous
    Min = Milieu
  End If
Wend
MsgBox "Le taux est : " & Min & " à 0.01 près" ' ou Max


-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
19 août 2004 à 15:46
La Boucle s'incremente de 0.01 à chaque fois alors si ta Mensualité est de 1000 la boucle se fera 100 000 fois

It@li@
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
19 août 2004 à 15:55
Je suppose que tu parle de la boucle For !
Ce n'est que le taux qui s'incrémente, la valeur de la formule croît plus vite ! Dans tous les cas la boucle ne fera pas plus du nombre d'intervalles de 0.01 entre 0 et 100 soit 10 000.
C'est pourquoi la dichotomie est bien meilleur dans ce genre de calculs car converge plus vite ...

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
19 août 2004 à 16:08
oui moi je repondais à ppppp sur ma boucle Do Until....Loop

Ok sur l'idée de Dichotomie... ca ne peu qu'aller plus vite

It@li@
0
Zigarn Messages postés 106 Date d'inscription mardi 13 juillet 2004 Statut Membre Dernière intervention 26 janvier 2005
19 août 2004 à 16:11
Ce qui n'empêche que ma remarque sur le nombre de boucles est toujours valable !
Ce n'est pas le taux qui doit atteindre la valeur Mensualité mais la formule avec le taux actuel.

-------------------------------------------------
Débutant ... mais pas pour longtemps !
0
dichotom Messages postés 1 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 00:17
Bonjour à tous et à toutes,

j'ai un ptit souci au niveau d'une formule excel (à moins qu'il ne faut utiliservisual basic mais j'y connais plus rien, les cours étant très très loin...). je vous explique mon pb :
j'ai une hauteur d'eau (valeur à rentrer) qui me donne un débit (par une formule simple) qui me donne comme résultat une pression (par une formule moins simple). je voudrais que le résultat s'approche d'une consigne (pression=2 par exemple) et pour cela j'ai besoin que modifier le débit qui me donnera une nouvelle pression et donc ma consigne au final.
Mais je ne sais pas du tout comment faire.
merci de votre aide

Salut
0
Rejoignez-nous