solver dans macro
#1
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 10-07-2008 16h55
Bonjour Didier, bonjour le forum!

J'ai une question à vous poser.

Mon souhait est d'intégrer le solver dans une macro pour que lorsque je clique sur un bouton le solver se lance automatiquement.
J'ai dons fixer manuellement mes paramètres dans le solver par enregistrement pour avoir le code puis j'ai créé un bouton.

Cependant lorsque je clique sur le bouton, le solver ne tourne pas et bute sur les premiers mots du code "solverok".

Il apparait alors une fenêtre "erreur de compilation Sub ou fonction non définie"

Le code est le suivant :

Sub Macro1()
'

    SolverOk SetCell:="$C$17", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$9:$C$16"
    SolverAdd CellRef:="$C$9:$C$16", Relation:=3, FormulaText:="0"
    SolverAdd CellRef:="$G$9:$G$14", Relation:=3, FormulaText:="$H$9:$H$14"
    SolverOk SetCell:="$C$17", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$9:$C$16"
    SolverOptions MaxTime:=100, Iterations:=100, Precision:=0.000001, AssumeLinear _
        :=True, StepThru:=False, Estimates:=1, Derivatives:=1, SearchOption:=1, _
        IntTolerance:=5, Scaling:=False, Convergence:=0.0001, AssumeNonNeg:=False
    SolverOk SetCell:="$C$17", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$9:$C$16"
    SolverSolve

End Sub

Si vous souhaitez plus de renseignements, je joints mon fichier!

J'ai cherché pas mal de temps sans trouvé...Si quelqu'un à la réponse ce serait cool!

Merci d'avance à tous


Pièce jointe:
xls Solver.xls   [ Taille: 24.00 Ko - Téléchargements: 576 ]
Hors Ligne
Rapport   Haut 

Re: solver dans macro
#2
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 10-07-2008 18h44
Bonjour à tous!

Bon, j'ai résolu mon problème précédent. En fait il fallait que j'active le fichier SOLVER.XLA

Le solveur fonctionne donc automatiquement quand j'appuie sur le bouton.
Par contre, j'ai un autre problème.

En fait le fichier va etre modifié et des données vont etre ajoutées. Il faut donc que je fasse en sorte que le solveur tourne même si on rajoute des données.

Pour ce faire j'ai écrit ce code :

Sub Macro2()
'
i1 = 9 'minimum du compteur de ligne de la colonne B
imax1 = Range("B65536").End(xlUp).Row
i2 = 9 'maximum du compteur de ligne de la colonne F
imax2 = Range("F65536").End(xlUp).Row

    SolverReset
    SolverOk SetCell:=Range("C" & imax1 + 1), MaxMinVal:=2, ValueOf:="0", ByChange:=Range("C9:C" & imax1)
    SolverAdd CellRef:=Range("C9:C" & imax1), Relation:=3, FormulaText:="0"
    SolverAdd CellRef:=Range("G9:G" & imax2), Relation:=3, FormulaText:=Range("H9:H" & imax2)
    SolverOk SetCell:=Range("C" & imax1 + 1), MaxMinVal:=2, ValueOf:="0", ByChange:=Range("C9:C" & imax1)
    SolverOptions MaxTime:=100, Iterations:=100, Precision:=0.000001, AssumeLinear _
        :=True, StepThru:=False, Estimates:=1, Derivatives:=1, SearchOption:=1, _
        IntTolerance:=5, Scaling:=False, Convergence:=0.0001, AssumeNonNeg:=False
    SolverOk SetCell:=Range("C" & imax1 + 1), MaxMinVal:=2, ValueOf:="0", ByChange:=Range("C9:C" & imax1)
    SolverSolve userFinish:=True

End Sub

Or la macro plante quand elle arrive à la ligne " SolverAdd CellRef:=Range("G9:G" & imax2), Relation:=3, FormulaText:=Range("H9:H" & imax2)"
Le message suivant apparaît : "Solver : an unexpected internal error, or available memory was exhausted"

Savez vous pourquoi j'ai ce message? Y a t'il une erreur dans le code que j'ai écrit? Comment faire en sorte que macro tourne?

Merci à vous tous!

Hors Ligne
Rapport   Haut 

Re: solver dans macro
#3
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-07-2008 19h56
Bonsoir lannou, le Forum,

Dans la ligne suivante par exemple :
SolverOk SetCell:="$C$17", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$9:$C$16"
les arguments SetCell et ByChange attendent une valeur de type String (chaine de caractères) correspondant à l'adresse d'une cellule ou d'une plage et non une référence directe à la cellule ou à la plage en question.
Pour ta nouvelle procédure, il convient donc d'écrire sous cette forme :
SolverOk SetCell:=Range("C" & imax1 + 1).Address, MaxMinVal:=2, ValueOf:="0", ByChange:=Range("C9:C" & imax1).Address
Le simple ajout de la propriété Address te permet d'obtenir la chaine de caractères souhaitée et supprime l'erreur que tu rencontrais. Il convient bien évidemment de faire de même sur les autres lignes et également pour la fonction SolverAdd...

Ensuite, un conseil qu'il convient d'appliquer si tu souhaites progresser en VBA : toujours déclarer tes variables (lire l'article VBA et les variables).

Par ailleurs lannou, je te remercie d'utiliser le bouton prévu pour l'insertion du code VBA dans les posts du Forum :



Cordialement

PS: ta BAL est encore pleine...



Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: solver dans macro
#4
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 11-07-2008 10h34
Bonjour Didier, bonjour le forum!

Merci pour ta réponse ... et... ca marche!!!!

Par contre, malgré ton explication je n'ai pas compris pourquoi il fallait rajouter ".adress". Tu dits que les arguments Cetsell et ByChange attendent une chaine de caractère. Mais en fait non ces cellules attendent un nombre!
J'étais donc septique mais j'ai quand même faits les modifs et ca marche... Peux tu m'éclairer un peu plus s'il te plaît pour que la prochaine fois j'évite de faire la même erreur?

Merci pour ton conseil pour déclarer les variables. J'essaierai de le faire même si j'ai l'impression que les déclarer n'influe pas trop sur le programme...

J'ai refaits le ménage dans ma boite mail!

Pour l'insertion de code, je ne savais pas que l'on pouvait faire comme ca, la prochaine fois je l'insererai correctement!

Merci pour ton aide!

++

Lannou
Hors Ligne
Rapport   Haut 

Re: solver dans macro
#5
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 11-07-2008 23h46
Bonsoir lannou, le Forum,

Aucun problème pour tenter de te donner les explications. C'est, pour moi, l'objectif premier d'un forum de discussions...

En fait, tout est question de vocabulaire et notamment de vocabulaire propre au langage VBA.

Quand tu écris :
Range("C" & imax1 + 1)
... tu fais directement référence à l'objet Range (la cellule elle-même). Là, on ne fait pas référence à son adresse, ni à sa valeur, mais on fait directement référence à l'objet lui-même.

Quand tu écris :
"$C$17"
... tu écris une simple chaine de caractères. Certe, cette chaine représente l'adresse d'une cellule, mais il ne s'agit rien d'autre que d'une banale chaine de caractères.

Dans ta première macro, on voit la fonction suivante :
SolverOk SetCell:="$C$17", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$9:$C$16"
Cette fonction reçoit quatre arguments dont deux sont nommés : SetCell et ByChange. Ces deux arguments attendent chacun, non pas une référence aux objets Range, mais une simple chaine de caractères représentant l'adresse de ces objets ("$C$17" et "$C$9:$C$16"). Il y a là une nuance qui a beaucoup d'importance.

Au final, je pense que tu as compris que la propriété Address d'un objet Range, fournit la chaine de caractères souhaitée.

Concernant les variables, je te confirme que la déclaration n'est pas obligatoire dans VBA. Tu peux très bien faire une application complète sans déclarer la moindre variable. Cela dit, par expérience, je peux t'affirmer que prendre l'habitude de le faire t'évitera bien des situations inattendues plus tard et t'apprendra à maitriser tes développements.

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: solver dans macro
#6
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 12-07-2008 17h52
Bonjour tout le monde!

Ok je pige mieux! Merci pour ces explications!!!

Ca marche je vais essayer de m'habituer à déclarer mes variables correctement!

En tout cas mon problème est résolu donc je met le sujet en "résolu"! Merciiiiiiiiiiiii!!

Bon week end à tous

++
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes