Boucle VBA pour Solveur (ex simple cijoint)
Résolu
Valoche01
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir ,
J'ai un petit soucis en VBA pour implémenter le solveur sur un exemple simple.
Lorsque je ne mets pas la contrainte, le code fonctionne, mais lorsque je la mets, il ne fonctionne plus. Savez-vous ce qui ne va pas?
Voici le fichier excel sans la macro (dsl je n'ai pas réussi à enregistrer le fichier avec la macro...) : http://cjoint.com/12dc/BLcvHj4Vo0l.htm
Voici ma macro que je place dans thisworkbook après avoir activé la fonction solver dans outils/références:
Merci pour votre aide!
J'ai un petit soucis en VBA pour implémenter le solveur sur un exemple simple.
Lorsque je ne mets pas la contrainte, le code fonctionne, mais lorsque je la mets, il ne fonctionne plus. Savez-vous ce qui ne va pas?
Voici le fichier excel sans la macro (dsl je n'ai pas réussi à enregistrer le fichier avec la macro...) : http://cjoint.com/12dc/BLcvHj4Vo0l.htm
Voici ma macro que je place dans thisworkbook après avoir activé la fonction solver dans outils/références:
Sub solveurauto() Dim K As Integer For K = 2 To 4 SolverOk SetCell:="I" & K, MaxMinVal:=2, ByChange:="G" & K SolverAdd CellRef:=Range("H") & K, Relation:=2, FormulaText:="20" & K SolverSolve Userfinish:=True Next End Sub
Merci pour votre aide!
7 réponses
Bonsoir,
peut-être ça :
Regarde de plus près FormulaText, je ne sais pas si tu veux 20 ou 20+K vu que tu avais mis : "20" & K
Une aide : https://support.microsoft.com/en-us/help/843304
eric
peut-être ça :
Sub solveurauto() Dim K As Integer For K = 2 To 4 SolverOk SetCell:=Range("I" & K), MaxMinVal:=2, ByChange:=Range("G" & K) SolverAdd CellRef:=Range("H" & K), Relation:=2, FormulaText:="20" SolverSolve Userfinish:=True Next End Sub
Regarde de plus près FormulaText, je ne sais pas si tu veux 20 ou 20+K vu que tu avais mis : "20" & K
Une aide : https://support.microsoft.com/en-us/help/843304
eric
Merci pour ton aide eriiic, j'ai encore un petite question pour que tout soit propre !
Comment incrémenter les colonnes et non les lignes si je place mon tableau avec mon solveur dans l'autre sens? J'ai cherché un peu partout mais pas trouvé...
Je remets un fichier avec le tableau dans le sens définitif : http://www.cjoint.com/confirm.php?cjoint=BLdcLwOlFuk
Je sais que ma macro est fausse mais comment faire? (Sinon dans le pire des cas je peux mettre les chiffres en lignes et les lettres en colonne, je pense que ça marcherait mais je préfère garder l'agencement tel quel... )
Merci bien
Comment incrémenter les colonnes et non les lignes si je place mon tableau avec mon solveur dans l'autre sens? J'ai cherché un peu partout mais pas trouvé...
Je remets un fichier avec le tableau dans le sens définitif : http://www.cjoint.com/confirm.php?cjoint=BLdcLwOlFuk
Je sais que ma macro est fausse mais comment faire? (Sinon dans le pire des cas je peux mettre les chiffres en lignes et les lettres en colonne, je pense que ça marcherait mais je préfère garder l'agencement tel quel... )
Sub solveur() Dim K As Integer For K = G To H SolverOk SetCell:=Range("11" & K), MaxMinVal:=2, ByChange:=Range("9" & K) SolverAdd CellRef:=Range("10" & K), Relation:=2, FormulaText:="20" SolverSolve Userfinish:=True Next End Sub
Merci bien
Merci pour ta réponse, j'ai essayé mais je n'y arrive pas...
On peut vraiment incrémenter des lettres?
Sub solveur() Dim K As Integer For K = G To H SolverOk SetCell:=Cells(11, K), MaxMinVal:=2, ByChange:=Cells(9, K) SolverAdd CellRef:=Cells(10, K), Relation:=2, FormulaText:="20" SolverSolve Userfinish:=True Next End Sub
On peut vraiment incrémenter des lettres?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Suis-je bête ! Merci pour l'info ! J'y suis presque mais ça ne marche toujours pas, le solveur avance bien en colonne mais ne résoud rien, c'est bizarre
Sub solveur() Dim K As Integer For K = 0 To 4 SolverOk SetCell:=Cells(11, 7 + K), MaxMinVal:=2, ByChange:=Cells(9, 7 + K) SolverAdd CellRef:=Cells(10, 7 + K), Relation:=2, FormulaText:="20" SolverSolve Userfinish:=True Next End Sub
Tu ne t'es pas trompé entre surface et périmètre ?
De plus pourquoi avoir une ligne périmètre puisque tu ne te sers pas de la cellule vu que tu as mis en dur dans le code =20 ?
eric
De plus pourquoi avoir une ligne périmètre puisque tu ne te sers pas de la cellule vu que tu as mis en dur dans le code =20 ?
eric
Oui en fait je voulais prendre un exemple très simple avec une seule contrainte pour qu'on se comprenne mieux, mais du coup le périmètre n'est pas "minimisé" vu que j'ai bloqué la surface et une longueur... Enfin l'idée est là et ça fonctionne quand j'incrémente en ligne, mais en colonne je n'y arrive pas
voilà le fichier qui fonctionne en incrémentant en ligne : http://www.cjoint.com/confirm.php?cjoint=BLdnh0agRwZ
Et celui que tu as (avec la mise à jour de tes modifs), qui ne marche pas en colonne : http://www.cjoint.com/confirm.php?cjoint=BLdnjvKuZD5
Merci pour le temps que tu m'accordes, j'apprecie beaucoup
voilà le fichier qui fonctionne en incrémentant en ligne : http://www.cjoint.com/confirm.php?cjoint=BLdnh0agRwZ
Et celui que tu as (avec la mise à jour de tes modifs), qui ne marche pas en colonne : http://www.cjoint.com/confirm.php?cjoint=BLdnjvKuZD5
Merci pour le temps que tu m'accordes, j'apprecie beaucoup
J'ai réussi ! Merci énormément à toi eriiic
J'ai repris un exemple simple et plus adéquat avant de l'appliquer à mon gros solveur.
Voici un exemple de boucle de solveur avec une macro solveur ligne et une macro solveur colonne pour ceux que ça intéresse.
http://www.cjoint.com/confirm.php?cjoint=BLdqlrgsSwT
Il me reste à comprendre pourquoi lorsque l'on met des contraintes en vba, que l'on compile plusieurs fois, parfois ça ne marche plus et quand on ouvre le solveur sans Visual Basic, on se rend compte qu'on a plein de contraintes en double etc. Il suffit de faire rétablir tout, et ça remarche à nouveau sous VBA... Si quelqu'un à la réponse?
J'ai exactement le même problème qu'ici : https://forums.commentcamarche.net/forum/affich-12459437-contraintes-de-solver-dans-macro-vba-excel
J'ai repris un exemple simple et plus adéquat avant de l'appliquer à mon gros solveur.
Voici un exemple de boucle de solveur avec une macro solveur ligne et une macro solveur colonne pour ceux que ça intéresse.
http://www.cjoint.com/confirm.php?cjoint=BLdqlrgsSwT
Il me reste à comprendre pourquoi lorsque l'on met des contraintes en vba, que l'on compile plusieurs fois, parfois ça ne marche plus et quand on ouvre le solveur sans Visual Basic, on se rend compte qu'on a plein de contraintes en double etc. Il suffit de faire rétablir tout, et ça remarche à nouveau sous VBA... Si quelqu'un à la réponse?
J'ai exactement le même problème qu'ici : https://forums.commentcamarche.net/forum/affich-12459437-contraintes-de-solver-dans-macro-vba-excel
Je suis vraiment trop nul lol bon j'ai trouvé la réponse, il faut mettre un solverdelete après le solveradd et avant le solversolve, comme celui-ci pour mon incrémentation en colonne : SolverDelete CellRef:=Cells(2, 2 + K), Relation:=1, FormulaText:="50"
ça supprimera toutes les contraintes qui se seront ajouté dans le solveur.
Valentin.
ça supprimera toutes les contraintes qui se seront ajouté dans le solveur.
Valentin.
Ecoute c'est nickel, c'était un problème de parenthèses bien vu !
Pour le FormulaText, je voulais faire 20 & K pour ne pas avoir a tirer la formule dans le tableau et que la contrainte se mette automatiquement mais en fait ça ne marche pas. Pas grave.
Merci beaucoup
et de Range...
je voulais faire 20 & K
&, tu es sûr ? Et pas 20+K ?
remplace par : "20" & CStr(k)
Si c'est 20 + K que tu veux alors :
CStr(20 + k)
eric