Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transformer une macro en une fonction perso

24 réponses
Avatar
isabelle
bonjour à tous,

je peux trouver la variable r valant entre 0.01 à 0.9999999999999 pour résoudre
toute équation égale à 0
avec la macro "test" mais je n'y arrive pas avec un fonction perso,
voici ma solution avec une macro et j'aimerais la transformer en une fonction
générale,

Sub test()
Dim i, z, a1, a2, r
FVt = 210
PV1 = 100
PV2 = 101
t1 = 0.5
t2 = 0.75
a1 = "0.0"
For i = 0 To 9
r = CDbl(Str("" & a1 & i))
z = Exp(Application.Ln((FVt - PV1 * (1 + r) ^ t1) / PV2) / t2) - 1 - r
If z < 0 Then
a1 = Str("" & a1 & i - 1)
i = Empty
If a2 = z Then Exit For
End If
a2 = z
Next
MsgBox CDbl(a1)
End Sub

voici ou je suis rendu en utilisant Evaluate et des cellules nommées, mais ce
n'est pas bon

Function r_value(FVt, PV1, PV2, t1, t2, r, equation)
a1 = [r]
For i = 0 To 9
[r_v] = CDbl(Str("" & a1 & i))
z = Evaluate(equation)
If z < 0 Then
a1 = Str("" & a1 & i - 1)
i = Empty
If a2 = z Then Exit For
End If
a2 = z
Next
r_value = CDbl(a1)
End Function

merci par avance de passer du temps sur mon problème,

isabelle

10 réponses

1 2 3
Avatar
isabelle
salut Denis,

j'ai été pas mal short dans mes remarques sur mon dernier message ,
je me repend et reprend,
en voici les détails:

lorsque j'exécute la fonction en pas à pas
je peut voir que peu importe la valeur de [R_V]
z est toujours égal à 0.120542711670023
donc la condition
If z < 0 Then
n'est jamais vrai

c'est à dire lorsque i prend la valeur entre 0 et 8
[R_V] prend la valeur entre 0.01 et 0.09

et ensuite i prend la valeur de 9
[R_V] prend la valeur de 0.1
la boucle est complétée et le résultat est 0.1

isabelle
Avatar
MichD
Regarde ceci, je crois que c'est prometteur : http://cjoint.com/?DCuexzkrlqu
Avatar
MichD
OK, j'ai terminé d'écrire la fonction et ça marche! je ne touche plus à
rien!
http://cjoint.com/?DCum3TeMAs5

;-)
Avatar
MichD
Même fonction, mais j'ai fait un peu de ménage autour!
http://cjoint.com/?DCunQ4anxiI
Avatar
MichD
Enfin, dernière présentation : http://cjoint.com/?DCun3q2bBWH
Avatar
Jacquouille
Tu ne pourrais pas avoir des questions du genre que JPS avait demandées
lors de sa première intervention, sommer 2 cellules!


Elle voulait juste le % de chance d'avoir 1 bonne réponse ...-))


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
lgenq8$dnb$

Même fonction, mais j'ai fait un peu de ménage autour!
http://cjoint.com/?DCunQ4anxiI


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
MichD
Pour une personne retraitée, je trouve qu'Isabelle s'amuse avec
des fonctions pour le moins ésotériques! ;-))
Avatar
isabelle
salutatous,

désolé de mon retard, j'ai fait une petite escapade au grand village,
Denis merci de ton effort, ça m'as donné l'idée de mettre r en variable " & r &
" dans l'équation.
je pense que c'est la seule solution pour garder "équation" en argument
mais il y a un erreur(2015) sur la ligne z = Evaluate(équation)
pourtant si j'enlève l'argument équation et que je remplace
équation par "Exp(Ln((FVt-PV_1*(1+" & r & ")^t_1)/PV_2)/t_2)-1-" & r & ""
cela fonctionne --> http://cjoint.com/?DCwb4QsT8Bp

en gardant les cellules nommées:
FVt, PV_1, PV_2, t_1, t_2, équation
contenant respectivement les valeurs de:
210, 100, 101, 0.5, 0.75, Exp(Ln((FVt-PV_1*(1+" & r & ")^t_1)/PV_2)/t_2)-1-" & r & "

Function r_value(FVt, PV1, PV2, t1, t2, équation)
Dim i, z, x, b
r = 0
x = 1
For i = 0 To 9
If i = 0 Then x = x + 1: b = 1 * 10 ^ x
r = r + (1 / b)
z = Evaluate(équation)
If z < 0 Then
If Len(r) = 19 Then Exit For
i = Empty
r = r - (1 / b)
If i = 0 Then x = x + 1: b = 1 * 10 ^ x
End If
Next
r_value = r
End Function

ce que l'on ne ferait pas pour un membre de la famille ;-)
encore merci! pour ton soutient,
isabelle

ps/ Jacques, crois-tu que ma chance augmente ;-)




Le 2014-03-20 09:12, MichD a écrit :
Pour une personne retraitée, je trouve qu'Isabelle s'amuse avec
des fonctions pour le moins ésotériques! ;-))
Avatar
isabelle
ha! c'est un problème de guillemets,comment les enlever ?

si j'écris en cellule A1 --> a1 + a2

Function test_evaluate(f)
test_evaluate = Evaluate(f)
End Function

et que je tape sur la feuille = evaluate(A1)
j'obtient l'erreur 2015


si j'écris en cellule B1 et B2 les valeurs 4 et 5

Function test_evaluate(a1, a2)
test_evaluate = Evaluate(a1 + a2)
End Function

et je tape sur la feuille = evaluate(B1;B2)
cela fonctionne

isabelle
Avatar
isabelle
pour simplifier ce problème de guillemets

sur la feuille:
2 cellules nommées valeur1 et valeur2, contenant les valeurs 1 et 2

Function test_evaluate1(v1, v2) ' sur la feuille
=test_evaluate1(valeur1;valeur2)
r = 0
test_evaluate1 = Evaluate("" & "valeur1+valeur2+" & r)
End Function

Function test_evaluate2(f) ' sur la feuille =test_evaluate2(A4)
cellule A4 contient "" & "valeur1+valeur2+" & r
r = 0
test_evaluate2 = Evaluate(f)
End Function

de souvenance Serge (tatanka) avait déjà amené un problème semblable mais je
n'arrive pas à le retrouver et je ne me souvient pas s'il avait été résolu ?

isabelle
1 2 3