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
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Le Complément Solveur étant activé coté Excel, essayez en cochant la référence Solver coté VBA.
 

Dranreb

XLDnaute Barbatruc
Bonjour Job75.
Chez moi aussi. Encore faut-il qu'il soit ouvert pour qu'elle soit disponible. Chez moi, du coté Excel il s'appele "Complément Solveur".
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui, pourquoi ne le serait-ce pas ? Je ne connais pas de cas où des arguments de procédures ou de méthodes doivent obligatoirement être des constantes.
 

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:

Dranreb

XLDnaute Barbatruc
Eh bien c'est pareil comme partout … MaxMinVal:=ActiveSheet.[K2].Value
Généralisez donc un peu dans votre esprit la notion d'expression, bon sang !
 

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
 

Fichiers joints

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 …
 

mécano41

XLDnaute Accro
Tout à fait d'accord. C'est pour cela que dans l'exemple donné j'ai choisi une fonction dont on ne sait pas trouver la réciproque...C'est pareil dans le problème de la chêvre attachée à un point d'un cercle par une corde (de longueur L à trouver) et qui doit brouter la moitié de l'aire du cercle...

Cordialement
 

DJARNAUD

XLDnaute Occasionnel
Bonjour Dranreb, Bonjour mécano41,

Merci pour cette pièce jointe!
J'ai lu le code Vba, mais je ne comprends pas tout.
Quelle est l'utilité de cette ligne?Ou plutot, comment le lien se fait-il avec le solveur?

VB:
SolverAdd Cellref:=Range("Rayon"), Relation:=3, Formulatext:=0.0000001
D'avance merci pour votre aide.
 

mécano41

XLDnaute Accro
Bonjour,

Dans la feuille, tu fais : Données puis solveur et tu regardes les différents éléments pour voir à quoi cela correspond. C'est dans la zone Contraintes

Cordialement
 

DJARNAUD

XLDnaute Occasionnel
J'ai bien tenté de reproduire votre macro mais il y a quelque chose qui ne tourne pas.
J'ai voulu en faire une macro événementielle, dés que le taux de progressivité change, je voudrai que le tableau d'amortissement se recalcule automatiquement.


D'avance merci
 

Fichiers joints

Discussions similaires


Haut Bas