Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Solveur dans macro ?

  • Initiateur de la discussion pmfontaine
  • Date de début
P

pmfontaine

Guest
Bonjour,
Je souhaiterais utiliser le solveur dans une macro pour optimiser le résultat d'une équation du type :
Tangente (alfa) - alfa + X = 0 (la valeur à trouver est alfa)
Jusqu'a présent j'utiliser la fonction Do White .... Loop (Incrémente alpha tant que condition non remplie)
cette méthode est satisfaisante pour le résultat mais très longue lorsque l'on doit mettre des boucles dans des boucles.
J'espérais m'en sortir avec : ActiveSheet.Scenarios("involute").Show
"involute" étant le non du scénario enregistré a partir du résultat du solveur., mais ce principe ne marche pas car le scénario ne prend pas en compte les changements de la cellule correspondant a "X"
J’ai chercher dans le forum avec les mots (macro solveur) mais les réponses trouvées ne m’on pas aidées.
merci
 
M

Michel_M

Guest
Bonjour

Ce que j'avais fait:

J'ai parametré le solveur manuellement et vérifier les résultats

Ensuite j'ai utilisé l'enregistreur de macros et demander le calcul

J'ai "élagué" et incorporer dans mon code VBA

(le code est à la maison et je suis hélas au boulot)


Michel
 
M

Michel_M

Guest
Re,

De retour à la maison, je t'envoie le listing de la macro activant le solveur

ActiveSheet.Unprotect
Range("volume").ClearContents
SolverOk SetCell:="marge", MaxMinVal:=1, ValueOf:="0", ByChange:="volume"
SolverSolve (True)
ActiveSheet.Protect

En espèrant que cela te sera utile

Michel
 
P

pmfontaine

Guest
Bonsoir Michel et tous le Forum,
Merci pour ton aide, mais je ne m’en sors pas ni avec ton script, ni avec l’exemple de l’aide Visuel basic, j’ai pourtant bien coché la macro complémentaire Solveur.xla
Et j’ai ecris :
Sub test()
ActiveSheet.Unprotect
Range("A1").ClearContents
SolverOptions precision:=0.001
SolverOK SetCell:="A2", MaxMinVal:=3, ValueOf:="0", ByChange:="A1"
SolverSolve (True)
ActiveSheet.Protect
End Sub
Mais il me met toujours un message en sourlignant "SolverOptions" ou "SolverOk" si j'enlève le premier:
Erreur de compilation : Sub ou fonction non défini
Merci de venir a mon secours
pmfontaine
 
M

Michel_M

Guest
Salut pmf et le forum


Ci joint l'exemple de la boite de conserve qui sert a apprendre le solveur (j'ai fait ca pour avoir un exemple simple sous les yeux).

Par rapport à hier, la méthode est la même mais je pense que,
peut-être, tu n'as pas coché la référence "solveur" dans VBA par outils | références ce qui expliquerait le refus de compiler (c'est ce qui vient de m'arriver)

La commande la macro n'est pas traitée (faire macro executer)

N'hésites pas au cas où
Michel
 

Pièces jointes

  • xld_solver.zip
    6.4 KB · Affichages: 824
P

pmfontaine

Guest
Bonsoir Miclel_M et le Forum,
Merci pour ton aide, ça marche comme je veux.
Mais j'ai un problème avec la macro complémentaire solver.xla car malgré sont activation elle ne marche pas sur ma version Excel de office XP.
J'ai du mettre la macro solver.xla et le fichier dll de la version office 2000. Et là plus de problème.
PMF
 
F

Fabrice

Guest
Bonjour à tous !

J'ai le même problème avec la macro complémentaire solver.xla,

La macro fonctionnait à merveille sous 97 et 2000 mais depuis que j'ai office XP ca ne marches plus. J'ai eu quelques problèmes avec mes déclarations de variables (comme si "option explicit" est forcé en action ) que j'ai réussi à résoudre en reprenant toutes les déclaration manquantes (Ca oblige à être puriste )

la macro complémentaire solver.xla existe bien car je peut m'en servir à partir du menu outils d'Excel par contre à l'execution de mes macros c'est comme si elle n'etais pas trouvée.

Je pense que celà est du à une option d'excel qui force le traitement explicite des déclarations pourtant dans les options de l'éditeur VBA la case correspondante n'est pas coché. (Déclaration explicite des variable)
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…