Boucle VBA pour Solveur (ex simple cijoint)
Résolu/Fermé
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
-
2 déc. 2012 à 22:23
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 3 déc. 2012 à 18:47
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 3 déc. 2012 à 18:47
7 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 déc. 2012 à 00:25
3 déc. 2012 à 00:25
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
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
3 déc. 2012 à 02:55
3 déc. 2012 à 02:55
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 déc. 2012 à 10:52
3 déc. 2012 à 10:52
Bonjour,
au lieu de Range("11" & K) utilises Cells(ligne,colonne)
eric
au lieu de Range("11" & K) utilises Cells(ligne,colonne)
eric
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
3 déc. 2012 à 11:12
3 déc. 2012 à 11:12
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 déc. 2012 à 11:46
3 déc. 2012 à 11:46
non, K est le n° de la colonne
col G = 7
col G = 7
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
3 déc. 2012 à 11:56
3 déc. 2012 à 11:56
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 déc. 2012 à 12:50
3 déc. 2012 à 12:50
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
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
Modifié par Valoche01 le 3/12/2012 à 13:11
Modifié par Valoche01 le 3/12/2012 à 13:11
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
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
Modifié par Valoche01 le 3/12/2012 à 16:20
Modifié par Valoche01 le 3/12/2012 à 16:20
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
Valoche01
Messages postés
43
Date d'inscription
jeudi 29 novembre 2012
Statut
Membre
Dernière intervention
22 août 2017
3 déc. 2012 à 16:39
3 déc. 2012 à 16:39
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 248
3 déc. 2012 à 18:47
3 déc. 2012 à 18:47
Bien vu ;-)
3 déc. 2012 à 00:41
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
3 déc. 2012 à 00:57
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