Académique Documents
Professionnel Documents
Culture Documents
L'auteur
Jean-Philippe ANDRÉ
L'article
Publié le 7 décembre 2012
Version PDF
Liens sociaux
inPartager
I. Introduction▲
En voyant à nombreuses reprises des sujets en lien avec le solveur dans les forums Excel de Developpez.net,
j'ai souhaité faire quelques recherches de mon côté pour me permettre de découvrir à titre individuel ce qu'est le
solveur, et d'en faire une analyse plus poussée. Voici quelques éléments qui permettront à vous visiteurs, d'en
apprendre plus sur cet outil bien souvent oublié sous Excel !
Outils>Macros Complémentaire
Dans l'onglet Compléments, dans la zone Gérer, sélectionner Compléments Excel>Macros complémentaires
disponibles>Complément Solveur. Le solveur apparaitra dans l'onglet Données >Analyse > Solveur
Contrainte Signification
Valeur de cellule
<= inférieure ou égale à la
contrainte
Valeur de cellule égale à
=
la contrainte
Valeur de cellule
>= supérieure ou égale à la
contrainte
Valeur de la cellule doit
ent
être un entier
Valeur de la cellule doit
bin
être 0 ou 1
IV-e. Résoudre▲
On résout l'équation en cliquant alors sur Résoudre.
Si le solveur trouve une solution, il propose soit de garder les valeurs de solution ou bien de récupérer les
valeurs d'origine du problème.
V-b. Itérations▲
Il s'agit du nombre de calculs intermédiaires maximum que le solveur testera s'il ne trouve pas la solution. La
valeur maximale du temps de traitement étant 32 767. La valeur par défaut 100 convient parfaitement à la
plupart des problèmes simples.
V-c. Précision▲
Cette option correspond à la précision des résultats intermédiaires obtenus et les contraintes qui ont été fixées
dans le cadre de l'énoncé. Le nombre décimal sera compris entre 0 et 1, une valeur de 0.001 sera plus précise
qu'une valeur de 0.01. Plus le nombre de décimales sera grand, plus le niveau de précision sera donc élevé. La
précision sera aussi à considérer pour les grandes valeurs. Si vous calculez avec des milliers ou des millions,
pensez à cocher l'échelle automatique.
V-d. Tolérance▲
Cette option ne s'applique que dans le cas où des contraintes sur des nombres entiers existent. Elle est similaire
à la précision pour les nombres entiers.
V-e. Convergence▲
Cette option n'existe pas en version Excel 97, mais est disponible pour les versions 2003 et suivantes. Il s'agit
cette fois de définir dans quelle limite la valeur de la cellule cible correspond au critère de valeur. Plus la
convergence aura une valeur faible (entre 0 et 1), plus le résultat obtenu sera proche de l'objectif. Toutefois,
cela peut impliquer un allongement de la durée de résolution.
V-j. Estimations▲
On indique ici si la solution sera de type linéaire (du type y = ax + b) ou bien si une puissance supérieure ou
égale à 2 sera présente (du type y = ax² + bx + c). La solution Tangente est plus lente.
Il s'agit d'une approximation linéaire de la fonction à optimiser. On retrouve la représentation graphique d'une
droite pour le système.
V-j-ii. Quadratique▲
Si le problème se représente avec une courbe, l'estimation sera alors quadratique. Cette solution permet
notamment de diminuer le nombre de pas à chaque recherche.
V-k. Dérivées▲
Pour estimer les dérivées partielles sur les fonctions d'objectif et de contraintes, on peut utiliser deux méthodes
ici.
V-k-i. A droite▲
Utilisez cette option pour la plupart des problèmes dans lesquels les valeurs de contrainte changent assez
lentement.
V-k-ii. Centrée▲
Utilisez cette option pour les problèmes dans lesquels les contraintes changent rapidement, particulièrement
près des limites. Bien que cette option nécessite davantage de calculs, elle peut s'avérer utile lorsque le Solveur
renvoie un message indiquant qu'il n'est pas en mesure d'améliorer la solution.
V-l. Recherche▲
Une option qu'on ne changera que dans le cas de problèmes complexes, nécessitant des contraintes de type
mémoire. Dans le cadre d'une utilisation non poussée du solveur, la valeur par défaut Newton fera l'affaire.
V-l-i. Newton▲
Il est question de calculer les dérivées successives de la droite qui représente le problème. C'est la méthode par
défaut. Les plus doués en mathématiques iront voir les détails sur les approximations de la Hessienne.
Nécessite moins de mémoire que la méthode Newton, mais requiert généralement un plus grand nombre
d'itérations pour atteindre un niveau de précision particulier. Utilisez cette option pour résoudre un problème
important avec une quantité de mémoire limitée ou lorsque l'examen des itérations révèle une progression lente
entre chaque étape.
Cellules Variables
Contraintes
Contraintes
Si on coche l'option " Modèle supposé linéaire ", une autre série de données est indiquée dans le rapport de
sensibilité.
On y voit cette fois-ci d'autres éléments sur les cellules variables et contraintes.
Cellules Variables
NB : ajouter des contraintes aux cellules variables d'être supérieures ou égales à 0 permet d'éviter d'avoir des
valeurs très grande dans les cellules pour les augmentations et réductions admissibles (1E+30).
Contraintes
Coût Ombre (Shadow Price), une mauvaise traduction Office, le terme plus correct serait Prix Fictif :
remplace le multiplicateur de Lagrange
Contrainte à droite (en fait le côté droit de la contrainte) : simplement la valeur de la contrainte
Augmentation Admissible : Il s'agit de la variation du coefficient objectif qui est admissible sans que
cela ait pour impact une augmentation de la valeur des cellules variables.
Réduction Admissible : Il s'agit de la variation du coefficient objectif qui est admissible sans que cela ait
pour impact une diminution de la valeur des cellules variables.
VII-a. SolverAdd▲
Cette fonction sert à ajouter des contraintes à la résolution.
Sélectionnez
'on ajoute la contrainte sur le nombre d'animaux total
SolverAdd CellRef:="$D$2", Relation:=2, FormulaText:="10"
CellRef correspond à la cellule ou plage de cellules sur laquelle des contraintes sont imposées. Ici la cellule D2
(nombre total d'animaux)
Relation prend la valeur selon le tableau suivant
Cont
Val
raint
eur
e
<= 1
= 2
>= 3
ent 4
bin 5
Dans notre cas " = ", donc 2.
FormulaText correspond à la valeur de la contrainte, ici 10.
VII-b. SolverChange▲
Cette fonction change les contraintes.
Sélectionnez
'on change la contrainte de la cellule D2, passant le nombre total d'animaux à 8
SolverChange CellRef:="$D$2", Relation:=2, FormulaText:="8"
De la même façon que SolverAdd, la fonction prend en paramètre les nouvelles contraintes.
VII-c. SolverDelete▲
Cette fonction supprime les contraintes.
Sélectionnez
'on supprime la contrainte de la cellule D2, passant le nombre total d'animaux à 8
SolverDelete CellRef:="$D$2", Relation:=2, FormulaText:="8"
De la même façon que SolverAdd, la fonction prend en paramètre les contraintes qui sont supprimées.
VII-d. SolverFinish▲
Cette fonction indique que faire des résultats une fois la résolution effectuée.
Sélectionnez
'on exécute la résolution et on stocke les valeurs de solutions et générer les rapports
de réponse et sensibilité
SolverFinish KeepFinal :=1, ReportArray := Array(1,3)
Le paramètre KeepFinal prend la valeur 1 si on garde les valeurs de résolution finale, 2 si l'on souhaite
récupérer les valeurs d'origine sans garder la solution.
ReportArray spécifie un tableau des rapports que l'on souhaite créer en fin de résolution (1 pour le rapport de
réponse, 2 pour le rapport de sensibilité, 3 pour le rapport de limites).
VII-e. SolverFinishDialog▲
La fonction SolverFinishDialog est identique à SolverFinish, elle affiche en pus la boîte de dialogue " Résultats
du Solveur ".
VII-f. SolverGet▲
Permet de récupérer les informations relatives aux paramètres du solveur sur une page en particulier. La valeur
du paramètre passé en premier (TypeNum) permet de préciser quelle information on souhaite récupérer.
TypeNum Retour
1 Référence de la cellule Cible, ou la valeur #N/A dans le cas où le solveur
n'est pas utilisé sur la page (active ou spécifiée en second paramètre)
Valeur de l'objectif à atteindre (1 pour Maximum, 2 pour Minimum, 3 pour
2
une Valeur)
3 Valeur cible (cas où l'objectif est une valeur fixée)
4 Référence de la cellule ou de la plage de cellules variable
5 Nombre de contraintes
Tableau des cellules sur lesquelles sont imposées des contraintes (sous forme
6
de texte)
Tableau des contraintes (1 pour <=, 2 pour =, 3 pour >=, 4 pour int et 5 pour
7
bin)
8 Tableaux des valeurs des contraintes (sous forme de texte)
13 Vrai si « Modèle supposé linéaire » est coché, Faux sinon
20 Vrai si « Supposé non négatif » est coché, Faux sinon
Exemple :
Sélectionnez
?SolverGet (3, "Solveur")
40
VII-g. SolverLoad▲
Il est possible de charger les données d'un problème dans une plage de cellules (voir SolverSave pour
l'enregistrement).
Sélectionnez
'charge les données du solveur depuis la plage de cellules G1 :G4
SolverLoad "Solveur !G1 :G4 "
VII-h. SolverOk▲
Cette fonction permet de préciser les objectifs de résolution du solveur.
Sélectionnez
'ligne générale :
' SetCell correspond à la cellule cible
' MaxMinVal donne l'objectif (Max = 1, Min = 2, Val = 3
' ValueOf est utilisé car MaxMinVal vaut 3
' ByChange précise les cellules variables
SolverOk SetCell:="$D$3", MaxMinVal:=3, ValueOf:="34", ByChange:="$B$2:$C$2"
VII-i. SolverOkDialog▲
Même fonction que SolverOk, mais affiche en plus la fenêtre solveur.
VII-j. SolverOptions▲
Fonction qui permet de définir les options du solveur pour la résolution.
Les paramètres sont :
Sélectionnez
'Les options du solveur restent inchangées, si ce n'est l'option "supposé non négatif"
SolverOptions AssumeNonNeg:=True
VII-k. SolverReset▲
La fonction permet de réinitialiser les conditions du solveur.
VII-l. SolverSave▲
La fonction permet de sauvegarder les éléments nécessaires au solveur pour effectuer sa résolution.
En première cellule il enregistrera l'objectif de résolution (dans notre exemple)
Sélectionnez
=$D$3=34
Dans la seconde cellule, la liste des cellules variables (contenues dans une fonction NB)
Sélectionnez
=NB($B$2 :$C$2)
Sélectionnez
=$D$2=10 'somme des animaux dans la basse cours
=$B$2:$C$2=ENT($B$2:$C$2) 'les cellules variables B2 et C2 prennent des valeurs entières
Sélectionnez
={100;100;0.000001;0.05;FAUX;FAUX;FAUX;1;1;1;0.0001;VRAI}
Paramètres dans le même ordre que la fonction SolverOptions.
VII-m. SolverSolve▲
La fonction SolverSolve résout le modèle en utilisant les paramètres que vous avez spécifié avec la fonction
SolverOK.
Les paramètres possibles de la fonction sont :
Sélectionnez
Sub Resolution()
'on réinitialise les conditions du Solveur
SolverReset
'ligne générale :
' SetCell correspond à la cellule cible
' MaxMinVal donne l'objectif (Max = 1, Min = 2, Val = 3
' ValueOf est utilisé car MaxMinVal vaut 3
' ByChange précise les cellules variables
SolverOk SetCell:="$D$3", MaxMinVal:=3, ValueOf:="34", ByChange:="$B$2:$C$2"
'on ajoute la contrainte sur le nombre d'animaux total
SolverAdd CellRef:="$D$2", Relation:=2, FormulaText:="10"
'puis celle sur les valeurs entières
SolverAdd CellRef:="$B$2:$C$2", Relation:=4, FormulaText:="entier"
'Les options du solveur restent inchangée, si ce n'est l'option "supposé non négatif"
SolverOptions AssumeNonNeg:=True
'on lance la résolution
SolverSolve UserFinish:=True
End Sub
Sélectionnez
Sub Optimisation_PTF()
Dim i As Integer
For i = 25 To 43
Worksheets("Optimisation").Activate
SolverReset
SolverOk SetCell:="$K$18", MaxMinVal:=1, ValueOf:=0, ByChange:="$J$15:$L$15", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverAdd CellRef:="$K$19", Relation:=2, FormulaText:="$I$" & i
SolverAdd CellRef:="$M$15", Relation:=2, FormulaText:="1"
SolverOptions AssumeNonNeg:=True
SolverSolve userfinish:=True
Range("J" & i).Value = Range("K19").Value
Range("K" & i).Value = Range("K18").Value
Next i
End Sub
X. Conclusion▲
L'outil solveur peut être d'un grand aide pour les personnes qui souhaitent résoudre des équations sans avoir à
effectuer un grand nombre de calculs manuellement ou par le code. On peut constater que parfois le solveur
n'apporte qu'une réponse approximative, mais qui peut convenir selon le degré d'exactitude visé par l'utilisateur.
XI. Webographie▲
http://support.microsoft.com/kb/843304/fr, page de support de Microsoft sur " Comment faire pour créer des
macros Visual Basic à l'aide du solveur Excel dans Excel 97 "
XII. Remerciements▲
Je tiens à remercier l'équipe de Developpez.com pour la qualité du site, à ceux qui ont participé à la relecture de
cet article, et de tous ceux qui contribuent à l'entraide autour du développement dans le cadre personnel et
professionnel.
Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : inPartager
Responsables bénévoles de la rubrique Excel : Pierre Fauconnier - Arkham46 - Contacter par email
Nous contacter
Participez
Hébergement
Informations légales
Partenaire : Hébergement Web