Solveur et code VBA [Résolu/Fermé]

Signaler
-
 rorolidalgo -
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

Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 012
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 74310 internautes nous ont dit merci ce mois-ci

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
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 012
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 74310 internautes nous ont dit merci ce mois-ci

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
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 012
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 74310 internautes nous ont dit merci ce mois-ci

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
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 012
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
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
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 012
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.