Utilisation du solveur en boucle

  • Initiateur de la discussion Initiateur de la discussion Mathieu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Mathieu

Guest
Bonjour à tous,

Dans Excel 2003 (Windows XP), je tente d'utiliser le solveur à partir d'une macro pour résoudre une formule qui fait référence à son propre résultat. La formule est inclue dans une colonne d'une table de données et doit être résolue pour chaque ligne de la table.

J'ai commencé par tester la méthode pour la premiere ligne de la table de donnée et ça fonctionne correctement. Voici le code VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = '$B$2' Then
' Set the target cell E8 to a maximum value by changing cell F8.
Cells(8, 6) = 1
SolverOK SetCell:=Range('E8'), MaxMinVal:=1, _
ByChange:=Range('F8')
' Add constraint.
SolverAdd CellRef:=Range('E8'), Relation:=2, _
FormulaText:='$F$8'
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
End If
End Sub

Maintenant, j'aimerais inclure une boucle et changer les adresses de cellules pour des variables incrémentées afin que la macro solutionne l'équation pour chacune des lignes de ma table de données:

Boucle no1:
SolverOK SetCell:=Range('E8'), ByChange:=Range('F8')
SolverAdd CellRef:=Range('E8'), Relation:=2, _ FormulaText:='$F$8'

Boucle no2:
SolverOK SetCell:=Range('E9'), ByChange:=Range('F9')
SolverAdd CellRef:=Range('E9'), Relation:=2, _ FormulaText:='$F$9'

... et ainsi de suite jusqu'au bas de ma liste de données.

Est-ce que quelqu'un peut m'aider avec ce problème?

Merci.
 
Merci Michel,

J'ai utilisé Cells(x, y) et je crois être près du but, mais il y a quelque chose qui cloche dans ma macro:

Lorsque je démarre la procédure, la macro s'arrete en cours d'éxecution et Excel me renvoie le message: 'Solveur: une erreur est survenue, ou la mémoire disponible est saturée'.

En tentant de résoudre le problème, j'ai découvert que le simple fait d'ouvrir la boite de saisie des paramètres du Solveur via le menu Outil/Solveur... et de la refermer sans avoir modifié quoi que ce soit règle le problème!?! ceci me laisse perplexe.

Il semble que le simple fait d'ouvrir la boite de saisie des paramètres du Solveur via le menu Outil/Solveur... active certains paramètres du Solveur qui sont nécessaires à la résolution de mon problème.

Voici le code VBA de ma procédure:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = '$B$2' Then
Dim i As Long 'declare variable i loop
Dim x As Long 'declare variable x row
' A loop that will solve the equation for the 26 rows of my table.
i = 1
For i = 1 To 26
x = i + 6 'set row number
' Set up the parameters for the model.
' Set the target cell Ex to a maximum value by changing cell Fx.
SolverReset
' Add constraint: Ex = Fx.
SolverAdd CellRef:=Cells(x, 5).Address, Relation:=2, _
FormulaText:=Cells(x, 6).Address
SolverOK SetCell:=Cells(x, 5).Address, MaxMinVal:=1, _
ByChange:=Cells(x, 6).Address
' Solve the model but do not display the Solver Results dialog box.
SolverSolve UserFinish:=True
' Delete constraint: Ex = Fx.
SolverDelete CellRef:=Cells(x, 5).Address, Relation:=2, _
FormulaText:=Cells(x, 6).Address
' Finish and keep the final results.
SolverFinish KeepFinal:=1
Next i
End If
End Sub


Est-ce que quelqu'un aurait une idée géniale pour que ma procédure fonctionne du premier coup?


Toute suggestion sera appréciée,
 
Re,

Difficille de te répondre sans voir la bête...et installer un solveur exemple est long

mais d'après ta manip ouverture-fermeture, essaies d'utiliser avant le départ de la boucle la fonction solverload qui intialiserait ton solveur sur ta première ligne.

solveurreset partirait ainsi sur de l'existant (reset: remise à neuf...)

Bon courage
Tiens moi au courant

A demain (peut-être because charge de W prévue pas triste)

Michel
 
J'ai obtenu la solution a ce probleme sur le newsgroup 'microsoft.public.excel.programming', merci a Tushar Mehta pour la reponse:

Somewhere along the way (2000? 2002?), something happened between the
XL VBA and Solver interface. Now, it appears one must force Solver to
'initialize' itself. Stick in a SOLVER.Auto_open before the For loop.

Merci aussi a michel_m pour son aide.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
3 K
Retour