Solveur et code VBA

Résolu/Fermé
rorolidalgo - 22 janv. 2010 à 14:36
 rorolidalgo - 27 janv. 2010 à 15:32
Bonjour,

J'utilise Excel 2007 et j'ai chargé le solveur que j'utilise sans problème, via des cellules dans ma feuille de données pour la cible et les cellules variables.
J'ai besoin maintenant de faire tourner le solveur, sans référence à des cellules, mais seulement à des variables définies dans mon code. Je sais que c'est possible , mais je n'arrive pas à trouver comment.
Exemple:
Au lieu d'écrire:
SolverOk SetCell:=Range("Equation"), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("a")
SolverSolve True

Je souhaiterais écrire:
SolverOk SetCell:=Equation, MaxMinVal:=3, ValueOf:="0", ByChange:=a où 'Equation' et 'a' sont des variables de ma macro.

Quelqu'un a -t-il la solution?

Merci

5 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
22 janv. 2010 à 16:40
Bonjour,
Je ne peux pas plus sans le fichier et la procédure.
Pouvez-vous mettre le fichier sur https://www.cjoint.com/ ou http://cijoint.fr/ et poster le lien ?
1
Voici le lien: http://www.cijoint.fr/cjlink.php?file=cj201001/cijqa7MhX8.xlsm
La zone de calcul où intervient le solveur est dans la feuille 'Métré" en AW1.
La procédure principale s'appelle Calcul et utilise une fonction à part s'intitulant 'Résolution_solveur'.
merci
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
24 janv. 2010 à 22:48
Bonjour,
En examinant votre procédure [Calcul] j'ai constaté que la plage [Range("Equation").FormulaR1C1 =] contient une formule.
Est-ce cette même formule qui est la référence pour SolverOk SetCell:=Range("Equation") ?
Note:
Comme signalé dans le poste précédent; l’argument [Equation] de l’objet Range fait référence à [=Métré !#REF !] !
En marge, il semble que votre classeur est toujours entrain de faire des calculs chaque fois clic sur une cellule il faut toujours attendre pour récupérer le focus, c'est ennuyeux ...!
1
Bonjour,
Désolé, j'avais supprimé des lignes pour alléger le fichier et, donc sans faire attention, une partie de la zone de calcul aussi.
Revoici le fichier, merci.
http://www.cijoint.fr/cjlink.php?file=cj201001/cijKPyKsDq.xlsm
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
27 janv. 2010 à 15:12
Bonjour,
Vous pouvez écrire la formule comme suit :
solverok setcell:="Equation", maxminval:=3, valueof:="0", bychange:="a"

ou
SolverOk SetCell:=Range("Equation"), MaxMinVal:=3, ValueOf:="0", ByChange:=Range("a")


A force de recherche, il faut respecter ceci :
SetCell Argument de type Variant facultatif. Fait référence à une seule cellule de la feuille de calcul active.

Donc, ceci n’est pas posible : où 'Equation' et 'a' sont des variables de ma macro.
1
bonjour
Merci pour les recherches en tous cas.
Effectivement, ça n'est pas possible avec le solveur d'Excel. Je me suis rapproché de Frontline, Inc. aux US, qui m'ont conseillé de télécharger leur module Risk Solver Platform pour aller ensuite programmer ensuite en VB.
Du coup, ça devient trop compliqué pour ce que je voulais faire.
Je reste donc avec ce que j'ai fait et qui fonctionne à peu près.
Merci encore
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
22 janv. 2010 à 16:01
Bonjour,
Juste au passage, la variable [equation] doit-être définie comme objet de type [Range]
exemple : Dim Equation as Range et ensuite lui attribuer la valeur.
Note : attention si vous avez 2 fois le même nom !
Salutations.
Jean-Pierre
0
Merci pour ta réponse.
Mais le problème est que mon équation est une fonction de a Equation=f(a).
Du coup, ça ne fonctionne pas si Equation reste une Range, si? ou alors faut-il que j'écrive:
Dim Equation as Range
Dim a as Range
Equation.Formula= "=" & a.value^4 & "+" & a.value

Le problème est que ma résolution d'équation n'a rien à voir avec ce qui passe dans la feuille Excel. Autrement dit, je veux que le solveur résolve mon équation dans le code et non pas dans la feuille. Tu comprends ce que je veux dire?
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
22 janv. 2010 à 23:25
Bonjour,
Merci pour la mise à disposition de votre fichier.
L’argument [Equation] de l’objet Range fait référence à [=Métré !#REF !], il m’est impossible de poursuivre sans connaitre la plage.
0