Résolution d'équation par vba

Bonjour,
je voudrai résoudre cette équation (k = (2 * (2 * Sqr(k)) - 0.8) ^ -1) par vba mais jarrive pas ; voila ce que jai mis comme code
ce que je voudrais trouver c bien la valeure de k

Sub eqauation()
Dim k As Currency
k = (2 * (2 * Sqr(k)) - 0.8) ^ -1
MsgBox k
End Sub

c qlqun peut m'aider merci

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    valeur de K non définie

    on pourrait plutôt passer par une fonction
    par ex:

    Function Calculer_equation(K As Currency)
    Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1
    End Function


    1. bonjour michel_m

      merci pour votre reponse, je viens de lessayer mais ca marche toujours pas
      vous avez mis :

      Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1

      alors que

      calculer_equation doit prendre la valeur de k

      je ne sais pas comment y prendre

      si vous pouvez maider ca serrai vraiment genial
      merci davence
  2. Contributeur
    Re,

    modif : passer de currency à double ;o)

    petite maquette

    Function Calculer_equation(K As Double)
    Calculer_equation = (2 * (2 * Sqr(K)) - 0.8) ^ -1
    End Function
    '-----------------------------------------------------
    Sub calculer()
    Dim X As Double
    X = Range("G2") 'par exemple ( G2 est au format-nombre-currency)
    MsgBox Format(Calculer_equation(X), "#,##0.00 $")
    End Sub


    si X =10 je trouve 0,08€
    1. Re michel

      ca marche tjr pas

      au fait c une equation quil faut resoudre par methode iterative(par la calculatrice) , elle a la meme inconue dans les 2 partie de lequation , mais par vba je ne sais pas comment

      k = (2 * (2 * Sqr(K)) - 0.8) ^ -1)

      on voit bien K de cote droite et de cote gauche
    2. Contributeur
      au fait c une equation quil faut resoudre par methode iterative(par la calculatrice)
      Pourquoi ne pas l'avoir précisé au départ ?
    3. non c pas par calculatrice , c par vba
      jai peut etre mal exprime desole et merci
    4. Contributeur
      pas grave ! surtout que je ne suis pas un matheux
      :o)
  3. Bonjour

    k = (2 * (2 * Sqr(k)) - 0.8) ^ -1

    peut aussi s'ecrire

    k= 1/(4*sqr(k)-0.8)
    k*(4*sqr(k)-0.8) =1
    (k*4*sqr(k))-(0.8*k) =1

    avec k > 0 car sqr(k) est toujours positif

    avec un programme de type force bute, on fait varier k avec un increment de 0.0001
    et on trouve k = 0.4959

    Sub test()
    Dim k As Currency, r As Currency
    k = 0
    r = 0
    While r <= 1
    k = k + 0.0001
    r = (k * 4 * Sqr(k)) - (0.8 * k)
    Wend
    MsgBox ("k = " & Format(k, "0.0000"))
    End Sub
    1. Bonjour
      merci bcp effictivement c a marche

      au fait je voudrais aussi faire varier le re =2 dans l'example precendent
      je vais directement ecrire ce que je veux resourdre, si c possible

      1/sqr(k)= (2*log * (re * Sqr(k)) - 0.8)

      je ne sais pas si je peux remplacer directement le 2 avec (re) dans le programme qui vous mavez donne (qui marche bien )

      si vous pouvez maider vraiment jen ai besoin
      merci
    2. L'équation n'est pas la même

      1/sqr(k) = 2*log(re * Sqr(k)) - 0.8
      (2*log(re * Sqr(k)) - 0.8) * sqr(k) = 1

      donc cette fois le programme est le suivant ( si j'ai bien interprété l'équation)

      Sub test2()
      Dim k As Currency, r As Currency
      k = 0
      r = 0
      '--------------------------
      Dim re As Double
      ' entrer une valeur pour re
      re = 2
      '--------------------------
      While r <= 1
      k = k + 0.0001
      r = (2 * Log(re * Sqr(k)) - 0.8) * Sqr(k)
      Wend
      MsgBox ("Pour re = " & re & vbCrLf & "k = " & Format(k, "0.0000"))
      End Sub


      Pour re=2
      k=1.3260
    3. merci beaucoup ca a marche, pour les grnades valeurs par exemple de 10000 il ya une legere erreur mais c pas grave
      merci encore
    4. Pour plus de précision il faut diminuer le pas
      k=k+0.00001 'pour 1/100 000ème

      et aussi afficher le resultat au 1/100 000éme
      Format(k,"0.00000")

      Bonne continuation
    5. merci pour tout