IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

resoudre equation en VBA sans passer par excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut resoudre equation en VBA sans passer par excel
    Bonjour,

    j'ai un petit souci qui me fait m'arracher les cheveux: je souhaite resoudre une equation en modifiant un parametre dans une de mes macros.
    Concretement j'ai:
    DAv(i) = Abs(Av(i) - Av2(i))

    avec Av(i)=cste et
    AV2(i)= D(i) ^ 2 / 4 * Arcos(i) - (D(i) / 2 - hv(i)) * (hv(i) * (D(i) - hv(i))) ^ (1 / 2)

    Je cherche à avoir DAv(i)=0 en agissant sur hv(i) (les autres parametres etant constants).

    J'ai essayé en utilisant goalseek mais je n'y arrive pas et je me demandais si ce n'etait pas possible de le faire directement sous vba.

    Si qulelqu'un a une reponse ou un debut de solution, je suis preneuse!

    merci!

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Tu travaille sur des tableaux ? Dav(Index) ?
    Sinon, par VBA c'est faisable pour autant que les valeurs mises en jeu soient dans les limites d'un double.
    Peut-tu mettre un classeur exemple ?
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    oui je travaille sur un tableau: le "i" indique la colonne calculée.
    Pour chaque colonne je lis les valeurs d'entrées et je calcule ensuite Av(i) et Av2(i)

    Je pense que mes calculs sont dans la limite d'un double:
    Dav(i): difference entre deux calculs d'aire (AV(i) et AV2(i))
    hv(i): hauteur

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Peut-tu mettre un classeur exemple ?
    Ce serai plus simple et travaillerai directement sur le classeur.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    euh...tu entends quoi par classeur exemple?? (desolée je commence le vba donc je comprends pas tous les termes...) dis moi si il te faut la macro et le la feuille excel ou juste un...

    merci

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Si ton classeur n'est pas confidentiel et pas trop volumineux tu met ce classeur en pièce jointe.
    Sinon tu fais un nouveau classeur avec au moins de quoi calculer une ou deux formules.
    Faudrai aussi que tu mette de parenthèses dans ta formule parce que moi je ne sais pas exactement le comment de ta formule et il faut bien le spécifié à excel ! du genre..
    AV2(i)= ((D(i) ^ 2 / 4 )* Arcos(i)) - (D(i) / 2 - hv(i)) * (hv(i) * (D(i) - hv(i))) ^ (1 / 2)

    En tenant compte que les opérations sont dans l'ordre du calcul
    Multiplication et division ensuite + et - (les ^je ne me rappel plus l'ordre)
    et aussi exposant 1/2 et 2/4 ? C'est l'équivalent de 0,5 non ?
    ou alors c'est .. ex ((D(i) ^2) / 4 ), tu vois, c'est pas la même chose.

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    l'exposant est prioritaire sur tout (comme dans la vrai vie 2*3^2/9 ca vau 2)

    Visiblement tu as plus un problème d'analyse numérique que de programmation. En tout cas a ma connaissance aucune fonction vba permet de travailler directement sur des équation.

    Il va falloir se fendre d'un algorithme de résolution.
    Le plus simple étant un dichotomie si tu as un intervalle de hv et que ton résultat évolue de façon constante avec hv (si hv augmente le résultat augmente (ou diminue) a tout les coup mais pas un coup ca augmente un coup ca diminue)

    voila un petit algorythme de dychotomie
    on apelle f(hv) ta fonction (vu que hv est maintenant ta seule variable)
    f(hv)=Abs(Av(i) - D(i) ^ 2 / 4 * Arcos(i) - (D(i) / 2 - hv(i)) * (hv(i) * (D(i) - hv(i))) ^ (1 / 2))
    et que f est croissante
    tu sait que hv appartient a l'intervalle [ab]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    hv=(a+b/2)
    si f(hv)>0 alors
    b=(a+b/2)
    et tu retourne au début
    si f(hv)<0 alors
    a=(a+b)/2
    et tu retourne au début
    si f(hv)=0 alors
    c'est bon tu a trouvé ton hv
    Bien sur tu ne prend pas un vrai 0 mais un zéros numérique, et limite ton nombre d'itération, l'intervalle décroit en 2^n. Ca devrais aller vite

    Voila j'espère que c'était bien de ca que tu parler, résoudre f(x)=0

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par clemouille Voir le message
    Bonjour,

    j'ai un petit souci qui me fait m'arracher les cheveux: je souhaite resoudre une equation en modifiant un parametre dans une de mes macros.
    Concretement j'ai:
    DAv(i) = Abs(Av(i) - Av2(i))

    avec Av(i)=cste et
    AV2(i)= D(i) ^ 2 / 4 * Arcos(i) - (D(i) / 2 - hv(i)) * (hv(i) * (D(i) - hv(i))) ^ (1 / 2)

    Je cherche à avoir DAv(i)=0 en agissant sur hv(i) (les autres parametres etant constants).
    Bonjour,

    euh ...

    cela équivaut à chercher pour quelle valeur de i Av(i) = Av2(i)
    Je ne comprends toutefois pas :
    - à quoi peut bien correspondre :
    avec Av(i)=cste
    - comment est calculé, de son côté, av(i)
    - comment on pourrait, avec le même i, arriver à tes fins (ou alors : expose clairement et complètement ton mécanisme)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    voila une version simplifié de mon fichier.
    Pour les calculs sur excel, ils sont bons quand je les teste sans vouloir trouver la valeur de hv.
    Dans le fichier, les cellules en jaune sont les resultats calculés par la macro, celles en vert sont les données. Il n'y a pas de boucle/iteration/... ou autre methode pour determiner le hv (ce que je veux).
    Si vous avez besoin de plus de renseignements...
    Fichiers attachés Fichiers attachés

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    euh ...

    cela équivaut à chercher pour quelle valeur de i Av(i) = Av2(i)
    Je ne comprends toutefois pas :
    - à quoi peut bien correspondre :

    - comment est calculé, de son côté, av(i)
    - comment on pourrait, avec le même i, arriver à tes fins (ou alors : expose clairement et complètement ton mécanisme)
    je crains que je me sois mal exprimée: le "i" ne correspond pas a une variable, c'est juste un indicateur de colonne...
    av(i) est le rapport de données d'entrée Av(i)=Q(i)/v(i)

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    je n'ouvre pas ton fichier xls (je ne le fais jamais avec un xls non écrit par moi...)

    Ta question est finalement algébrique avant quoi que ce soit d'autre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AV2(i) = D(i) ^ 2 / 4 * Arcos(i) - (D(i) / 2 - hv(i)) * (hv(i) * (D(i) - hv(i))) ^ (1 / 2)
    Peux-tu s'il te plait mettre cette équation sous forme algébrique (avec les parenthèses telles qu'utilisées en algèbre, en remplaçant
    AV2(i) par 0 (puisque' tu cherches la valeur 0)
    D(i) par A ' puisque tu dis que cette valeur est fixe
    hv(i) par x 'puisque tu dis que seule cette valeur est à modifier

    On y verra beaucoup plus clair (si tu sais bien sûr ce que tu fais) ... et toi également

    Edit :
    Ah oui ... et comme tu utilise Arcos(i) : également la valeur de i ...
    Pardi !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    sous forme algebrique:
    B=(A^2/4)*ArcCos((A-2x)/A)-(A-2x)*(x*(A-x))^0.5

    avec B=Av1=cste

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Non ...

    Ton équation, selon tes dires, doit commencer par :
    0 = ...........
    ou encore :
    y = ..........
    (dont tu chercherais la valeur de x pour que y = 0) !!!

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par Krovax Voir le message
    l'exposant est prioritaire sur tout (comme dans la vrai vie 2*3^2/9 ca vau 2)

    Visiblement tu as plus un problème d'analyse numérique que de programmation. En tout cas a ma connaissance aucune fonction vba permet de travailler directement sur des équation.

    Il va falloir se fendre d'un algorithme de résolution.
    Le plus simple étant un dichotomie si tu as un intervalle de hv et que ton résultat évolue de façon constante avec hv (si hv augmente le résultat augmente (ou diminue) a tout les coup mais pas un coup ca augmente un coup ca diminue)
    Faut pas toujours juger les gens sur les apparences..
    Mais faudrai commencer par le commencement, non ?
    Faut d'abord résoudre la formule pour le calcul de ton fameux f(hv)
    La suite viendra avec une boucle.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    On peut aussi l'ecrire (pour moi ça revient au meme):
    0=(A^2/4)*ArcCos((A-2x)/A)-(A-2x)*(x*(A-x))^0.5-B

  16. #16
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Faut pas toujours juger les gens sur les apparences..
    Mais faudrai commencer par le commencement, non ?
    Faut d 'abord résoudre la formule pour le calcul de ton fameux f(hv)
    La suite viendra avec une boucle.
    Résoudre quel formule? Je en vois vraiment pas le problème. On fait du numérique pas de l'analytique.
    On a une formule. On applique un algo de résolution (dichotomie si on a la flemme de chercher plus loin) et on obtient la valeur de hv qui correspond a la valeur cible.
    En chemin on bidouille un peut sur les intervalle de croissance décroissance et c'est tout.
    Mais si quelqu'un viens me dire x=... de manière analytique je dit chapeau, perso je ne vois pas et ma calto non plus

    Et ensuite c'est cette algorithme que l'on met dans la boucle.

    Ou alors j'ai raté un épisode, mais j'ai beau relire le fil je ne vois pas


    En résumé ce que je propose c'est de résoudre de manière numérique
    avec les nouvelle notation
    B=(A^2/4)*ArcCos((A-2x)/A)-(A-2x)*(x*(A-x))^0.5
    ensuite on met l'algo de résolution dans une boucle, pour le faire avec les différentes valeurs du tableau

  17. #17
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut
    Salut Clemouille, salut à tous,

    si je comprend bien, tu veux trouver les valeurs de x vérifiant :

    f(x) = 0, avec
    f(x) = (A²/4)*ArcCos[(A-2X)(1/A-x(A-x)]^(1/2)
    Sur quel intervalle de définition cherches-tu x?

    Une méthode pas très classique pourrait être, sur ton intervalle de définition, de tester un très grand nombre de valeurs de façon à trouver celle qui réalise le min de f. Par ex, si ton intervalle est [0;1], tu peux décider de tester (par ex) 1000000 de valeurs dans cet interval, avec un interval régulier.
    Il suffit donc de générer ces valeurs et de les tester une à une en les comparant.
    Ensuite tu peux réitérer le processus en réduisant ton intervalle d'étude, et arriver rapidement, par dichotomie, à la valeur cherchée.
    Krovax je suis sûr que tu vois ce que je veux dire

    A+

    Edit : quelque chose m'échappe : la fonction arccos est définie sur ]-1;1[, avec lim(arccos(x))=+pi en x=-1 et lim(arccos(x))=0 en x=1
    la fonction ne s'annule donc jamais (sauf avec A=0).
    Mais peut-être que j'ai mal compris l'énoncé

  18. #18
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    ouf je suis pas fou on me comprend Merci

    Personnellement je préfère la dichotomie tu peux facilement choisir ta précision sur le résultat et c'est souvent plus rapide.

    bon en fait on devrait même pouvoir le faire de manière analytique en utilisant un stylo et tout.
    au feeling je dirait qu'il suffit de résoudre

    0=(Pi/2-1)*A-(A*Pi/2+2)*x+x²

  19. #19
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, kokobva,

    tu as oublié le B

    Ta remarque reste toutefois parfaitement fondée (sauf en ce qui concerne le A)

    notre fonction est donc :

    Y = -B +(A^2/4)*ArcCos((A-2x)/A)-(A-2x)*(x*(A-x))^0.5
    et on doit trouver quelle valeur donner à x pour que y = 0

    Posons donc la question au demandeur :
    Comment (par quelles opérations algébriques) compte-t-il s'y prendre ?
    Je n'en vois personnellement pas....
    S'il les connait, qu'il nous les montre...
    S'il ne les connait pas, il lui faudra d'abord poser sa question non sur un forum d'algo, mais sur un forum purement mathématique et revenir vers nous avec cette suite d'opérations algébriques, qu'on l'aidera (sans même en vérifier la justesse) à écrire au besoin en VB.
    Je ne veux par ailleurs personnellement pas confondre algèbre et informatique.
    Le langage n'est pas un grand manitou mathématicien résolveur d'équations mais uniquement un moyen d'exposer à un processeur les opérations précises qu'il doit effectuer.

    Il lui reste sinon, en effet, la solution de recherche par tâtonnements dans un intervalle donné, mais ce n'est plus là de l'algèbre ni de l'exactitude absolue.

  20. #20
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    j'avais oublié le B effectivement du coup la méthode algébrique tombe a l'eau (je me disais ben que c'était bizard que je ne l'avais pas vu). elle doit exister et même ne pas e^tre trop difficile a trouver puisque tous les x sont dans l'arc cosinus


    Citation Envoyé par ucfoutu
    Il lui reste sinon, en effet, la solution de recherche par tâtonnements dans un intervalle donné, mais ce n'est plus là de l'algèbre ni de l'exactitude absolue.
    Effectivement on appelle cela les résolution numérique, qui permette de résoudre les équation que les méthodes algébriques ne peuvent pas résoudre (et il y en a beaucoup)


    clemouille, je t'ai donnée le principe d'un des algos les plus simple mais qui reste efficace en permettant d'avoir une erreur facile a maitriser. essaye de le mettre en oeuvre si tu bloque montre nous ou tu en ai et on t'expliquera la suite
    Sinon tu peux toujours prendre un stylo et résoudre ca si j'ai bien suivit les parenthèse c'est jouable

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Envoyer un mail Outlook par vba sans passer par le ClickYes
    Par lakhdar16 dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/05/2012, 17h17
  2. [XL-2007] Ouvrir VBA sans passer par les menus
    Par Jcorbeaux dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/01/2012, 22h26
  3. Utilisation de feuilles variables en VBA sans passer par indirect
    Par Titeuf4243 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2011, 20h43
  4. [VBA-A] Envoi de mail sans passer par Outlook ou autre.
    Par genius99 dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/02/2006, 07h50
  5. VBA : ouverture d'un Userform sans passer par excel
    Par jemigo dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 23/11/2005, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo