Probléme macro et solver

DJARNAUD

XLDnaute Occasionnel
bonjour,

Je viens d'utiliser l'enregistreur de macro afin d'intégrer le solver à ma macro.
voici le code
VB:
Sub Macro3()
'
' Macro3 Macro
'

'
    SolverOk SetCell:="$V$4", MaxMinVal:=3, ValueOf:=1.1, ByChange:="$B$18", Engine _
        :=1, EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:="$V$4", MaxMinVal:=3, ValueOf:=1.1, ByChange:="$B$18", Engine _
        :=1, EngineDesc:="GRG Nonlinear"
    SolverSolve
End Sub

Toutefois, j'ai un message d'erreur : erreur de compilation, sub ou function non définie
Pourriez vous m'aider?

D'avance merci
 

mécano41

XLDnaute Accro
Bonjour,

J'ai fais fait ce pense-bête il y a longtemps...voir s'il est toujours d'actualité.

Si c'est déjà coché, essaye aussi en remplaçant ta dernière ligne par : SolverSolve userfinish:=True

Cordialement
 

Pièces jointes

  • Utilisation du solveur par VBA XL2010 .xlsx
    10 KB · Affichages: 14

DJARNAUD

XLDnaute Occasionnel
Bonjour,

Je me suis mal exprimé.

En fait, je voudrai que, dans la fenêtre ci-dessous, la valeur à renseigner soit une valeur contenue dans une cellule.

Merci

1031211
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pas clair: C'est toujours l'adresse d'une cellule cible qu'il faut spécifier au solveur.
Ça change quoi à ma réponse ?
Si c'est une cellule définie en variable Target As Range, vous pouvez mettre SolverOk SetCell:=Target.Address par exemple.
 
Dernière édition:

DJARNAUD

XLDnaute Occasionnel
Re bonjour,

je reviens vers vous car j'ai une erreur dans mon macro.
j'ai bien réussi à faire référence à une cellule pour la valeur. Par contre pour le setcell et le bychange, je pense qu'il y a une erreur de syntaxe mais je ne trouve pas laquelle.
merci d'avance pour votre aide
VB:
Private Sub Macro7_Click()
'
    Range("F4").Select
    Selection.ClearContents
    SolverOk SetCell:=Worksheets("test").Range("$C$2"), MaxMinVal:=3, ValueOf:=Worksheets("test").Range("H1").Value, ByChange:=Worksheets("test").Range("$F$4"), _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverOk SetCell:=Worksheets("test").Range("$C$2"), MaxMinVal:=3, ValueOf:=Worksheets("test").Range("H1").Value, ByChange:=Worksheets("test").Range("$F$4"), _
        Engine:=1, EngineDesc:="GRG Nonlinear"
    SolverSolve
End Sub
 

Dranreb

XLDnaute Barbatruc
Les paramètres SetCell et ByChange sont des String valant obligatoirement des références de cellules ou de plages.
Ça a l'air fixe dans votre cas. Mais si c'était des expressions Range pouvant varier vous pourriez y mettre derrière .Address(External:=True) par exemple. Si c'est fixe ne pas oublier de préciser la feuille si ce n'est pas la feuille active SetCell:="test!$C$2" par exemple.
À moins, bien sûr que vos cellules C2 et F4 contiennent des références de cellule et de plage …
Vous pouvez aussi chercher de l'aide sur le solveur, parce que je peux me tromper, vu que je n'ai jamais eu à écrire de macro le pilotant.
Il se pourrait par exemple au contraire que des expressions Range soit acceptées, mais alors si vous vouliez qu'il en prenne les valeurs comme adresses de cellules, vous avez oublié de préciser .Value derrière pour qu'il puisse comprendre que ce n'est pas l'objet Range qui est à considérer.
 
Dernière édition:

mécano41

XLDnaute Accro
Bonjour,

Je ne sais pas si cela peut t'aider mais voici un exemple d'utilisation du solveur sous VBA. A noter que les cellules "intéressantes" de la feuille sont nommées et que ces noms (chaînes) sont utilisés tels quel dans le VBA. Si les noms sont déclarés au niveau Classeur, il n'est pas nécessaire de spécifier la feuille...

Cordialement
 

Pièces jointes

  • EssaiSolveur.xlsm
    19 KB · Affichages: 19

mécano41

XLDnaute Accro
Précision : ma phrase "Si les noms sont déclarés au niveau Classeur, il n'est pas nécessaire de spécifier la feuille" est superflue car, si par ex., dans le Worksheet_Change, on met seulement un Call Solveur et que ce Sub Solveur (qui est dans un module hors feuille) contient les huit lignes relatives au solveur, cela fonctionne même si les noms dans la feuille ont été déclarés au niveau Feuil1 et non Classeur.

Cordialement
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Remarque: lorsqu'il n'y a qu'une cellule à changer, on utilise plutôt Valeur cible que le solveur.
… après s'être un tout petit peu décarcassé pour vérifier si on en avait bien besoin, les fonctions inverses étant souvent plus faciles à trouver qu'on ne le croit généralement …