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

solveur dépendant d'une macro

BenW

XLDnaute Nouveau
Bonjour le forum,

Je suis embêté avec le solveur et j'espère que quelqu'un pourra m'aider la-dessus.
Tout d'abord, je bosse sur XL200, j'ai bien le solveur installé, et solver.xla est bien actif, pas de problème la-dessus.

Ce que je voudrais faire, c'est que le solveur me trouve une solution minimale dans une de mes cellules (A18), en changeant les cellules dites variables (A14 et A15). Jusqu'ici, tout va bien. Le soucis est que A18 n'est pas calculé directement à partir de A14:A15 , mais par l'intermédiaire d'une macro: (automatique_solve). J'ai essayé l'option 'showref' pour solversolve, mais ça ne marche pas.

Voici mon code:

Sub solveur()

Sheets('REGLAGES').Select
SolverReset
SolverOptions StepThru:=True

SolverOk SetCell:='A18', MaxMinVal:=2, ValueOf:='0', ByChange:='$A$14:$A$15'

SolverAdd CellRef:='$A$14:$A$15', Relation:=4

SolverAdd CellRef:='$A$14', Relation:=3, FormulaText:='1'
SolverAdd CellRef:='$A$14', Relation:=1, FormulaText:='5'
SolverAdd CellRef:='$A$15', Relation:=3, FormulaText:='1'
SolverAdd CellRef:='$A$15', Relation:=1, FormulaText:='30'

SolverSolve True, 'automatique_solve'

endsub



Merci d'avance de votre aide.
 

BenW

XLDnaute Nouveau
Re,

J'ai essayé un peu toutes les syntaxes possibles pour le 'showref', rien n'y fait: la macro ne se lance pas.
J'essaye en ce moment des boucles 'for' imbriquées pour chacune de mes variables, mai j'ai peur du temps que ça va prendre...

Merci de me donner une autre solution...
 

BenW

XLDnaute Nouveau
Salut Yeahou,

Merci de t'interesser à mon problème.
Je ne peux pas mettre en ligne mon fichier pour cause de 'mon patron veut pas' et que la fameuse macro que je veux lancer est lourde.
Le problème ne vient pas de là, puisque même avec une autre macro plus petite, ça n'est pas résolu...
Si j'ai posté le code, c'est que je voulais que quelqu'un qui a deja utilisé ce genre de solveur puisse m'éclairer.

Voila, sur ce, @+
 

michel_m

XLDnaute Accro
Saut Yeahou Benw et le forum,

Ton pb vient peut être du fait que tu as utilisé l'enregistreur de macro

en effet, lorsque ton code indique ce que tu as construit et tu as donné les valeurs 5 et 30 à A14 et A15 lors de ton enregistrement, donc le runtime afffecte toujours ces valeurs et donc A18 ne bouge pas.

Tu construit donc ton calcul sans macro
tu mets des valeurs dans A14 et A15
et seulement après tu enregistre ta macro en demandant juste le calcul et la publication des résuktats

Mes respects (...) à ton patron parano

A+
Michel
 

BenW

XLDnaute Nouveau
Bonjour le forum,
Merci Michel de ton conseil, mais il y a un truc que je ne comprend pas. Quand, dans les contraintes, on écris:

SolverAdd CellRef:='$A$15', Relation:=1, FormulaText:='30'

je crois que le solveur comprends ça comme 'A15<=30' , en reprenant la 'syntaxe solveur ', non?

Merci de chercher avec moi.

Bien à toi.
 

michel_m

XLDnaute Accro
Salut Ben,

tu supprimes les lignes comme celle là de ta macro:

SolverAdd CellRef:='$A$15', Relation:=1, FormulaText:='30'

qui sont des lignes de <s 'construction' /s> de ce qur tu demandes de faire au solveur: ces commandes de construction doivent être éxécutées hors enregistrement de macro (Solveur. xla est d'ailleurs basée sur une macro xl4)

En fait pour faire de nouveaux calculs suivant les m^mes contraintes, un code de ce genre fonctionne

Private Sub CommandButton1_Click()

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

End Sub

Je te joins l'appli, tirée d'un projet (j'ai supprimmé les liens) qui calcule les volumes de cépages de vins d'assemblage pour obtenir une marge totale maximum
[file name=cave_assemblage.zip size=27021]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/cave_assemblage.zip[/file]
 
Dernière édition:

BenW

XLDnaute Nouveau
Re,

Merci pour ton exemple, Michel. Je sais pas si c'est l'alcool qui reste dedans qui me fait ça ou quoi, mais je comprends pas tout

En fait, tu optimises 'marge' et changeant 'volume': ça, OK.
Mais o&ugrave; notes-tu tes contraintes de 'volume'?
Et comment fais-tu comprendre à Excel que 'volume' dépend d'une macro et non d'une formule ou d'une saisie clavier?

Merci de tes éclairecissements.
A+
 

michel_m

XLDnaute Accro
Re

dans l'exemple que je t'ai joint vise mornigue, tu vas à outils-solveur et tu as la liste des contraintes lies à chaque volume de produits à commercialiser

ces contraintes ont été écrites sur la feuille Excel AVANT de penser à toute macro. Ces contraintes restent en mémoire d'Excel

Volumes et marges sont des noms de cellule
Avec l'enregistreur de macro cela apparait peut-être sous la forme de cellules habituelles du style $A$1 par exemple.

Michel
 

BenW

XLDnaute Nouveau
Salut le forum, Salut Michel,

J'ai regardé ton fichier et ses contraintes, et je galère depuis pour adapter la méthode à mon problème

Je te joins le fichier (dur dur de le faire passer sous les 50ko) simplifié de mes simulations en espérant que tu puisses m'aider. Il faudrait que je puisse trouve les réglages (A10:A15 dans feuille 'REGLAGES') qui permettent d'obtenir le nombre de changements le plus faible (G7 dans feuille 'règle5'). Pour chaque essai, la macro 'règle5' doit être lancée.

Voila, c'est tout :lol:

Ce post est aussi destiné à tous ceux qui peuvent m'aider!!

A plus.

Message édité par: benw, à: 30/03/2005 10:54 [file name=simulation regroupements simplifiée_20050330105534.zip size=47723]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/simulation regroupements simplifiée_20050330105534.zip[/file]

Message édité par: benw, à: 30/03/2005 10:55

Message édité par: benw, à: 30/03/2005 11:01
 

Pièces jointes

  • simulation regroupements simplifiée_20050330105534.zip
    46.6 KB · Affichages: 11

BenW

XLDnaute Nouveau
Re,

J'ai essayé de faire de ma macro une fonction pour pouvoir l'inclure dans l'instruction 'showref' du solveur mais rien n'y fait.
Je ne sais plus dans quelle direction chercher!

Si un utilisateur du solveur passe par là, merci d'avance pour tes conseils.

@+
 

_RV

XLDnaute Nouveau
Bonjour à tous,

voilà, BenW et moi travaillons tous deux sur le meme code, et nos deux cerveaux ne parviennent pas à solutionner notre problème.

Je vais donc tenter de reprendre le problème clairement pour ceux qui voudraient bien se pencher dessus:


Nous avons une grosse macro qui effectue une simulation.

Les résultats de cette simulations dépendent d'une plage de données fixe (8 cellules) dont on peut faire varier les valeurs (pour obtenir différents résultats de simulation)

Le problème est que nous ne souhaitons pas faire les milliers de possibilités à la main (à moins d'y passer des mois).

Donc l'idée c'est d'optimiser la simulation, de facon à ce qu'un résultat qu'elle nous donne soit minimum par exemple.

C'est dans cette optique que nous avons songé au solveur (par macro)

Le solveur ne fonctionne pas (et c'est là le problème), je pense parce que la cellule cible ne contient pas de formule, mais le résultat d'une simulation, donc il ne sait pas quoi calculer, et il s'arrete.

Avec showref, il devrait lancer une simulation (la macro) après chaque résultat intermediaire. Mais comme il n'a pas de calcul, il ne fait rien.

Existe-t-il, avec le solveur ou non, un moyen simple de lui dire de trouver quels paramètres font que le résultat de la simulation soit minimum. (cad, qu'il doit faire varier les paramètres, relancer une simulation a chaque fois, et garder les paramètres 'optimum')


Après quelques jours de recherches infructueuses, nous nous attaquons à des boucles for, qui devraient marcher, mais qui vont faire durer l'optimisation pendant des heures... est-ce que c'est le seul moyen? qqun aurait-il une idée?

nous serons bientot chauves à force de nous arracher les cheveux...


merci mille fois à celui qui aurait une idée...


Hervé.
 

_RV

XLDnaute Nouveau
bonjour à tous,

voilà, après de nombreuses recherches, nous n'avons abouti à rien. Aujourd'hui le seul moyen d'optimiser la simulation est l'utilisation de boucles For.

Si qqun connait d'autres moyen de le faire, plus rapides... parce que là les optimisations prennent rapidement plus d'une journée, et vu le nombre d'opti que nous allons être amenés à faire tourner... ca va vite devenir ingérable...

Donc si qqun connait un moyen autre que les boucles for... s'il vous plait... aidez-nous, je crois qu'on a atteint nos limites...


merci beaucoup...



Hervé.
 

michel_m

XLDnaute Accro
Bonjour RV et benW

Impossible de télécharger le fichier joint au message de ben du 30/6.
indispensable pour comprendre le pb sans parler encore de solutions...

en effet:
Les pièces jointes ne doivent pas comporter de caractères spéciaux (espace, accent...)


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