IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment faire boucler un solveur en fonction de son résultat


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Comment faire boucler un solveur en fonction de son résultat
    Bonjour,

    J'ai crée un solveur avec 3 variables.
    Chaque variable à 3 valeurs distinctes.

    J'aimerais que le solveur calcule pour chaque combinaison des variables l'optimum. (pour i,j,k de 1 à 3; next k,j,i)
    Et qu'il ne garde que le meilleur optimum.

    Je pensais faire boucler le solveur et si la solution trouvée est moins bonne que la précédente il ne garde pas la nouvelle solution (annuler) et dans le cas contraire il garde cette solution.

    Cependant je n'arrive pas à inclure cette condition. (Comment référencer la valeur optimum n-1 pour la comparer avec n?)

    Auriez-vous une idée pour me sortir de cette impasse?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    J'ai réussis à faire fonctionner la boucle.
    Cependant la condition if à la fin ne donne rien.
    La macro calcule toutes les possibilités les une âpres les autres sans se soucier de garder la meilleure.

    Comment faire pour que si il la nouvelles solution est > à la précédente elle ne soit pas prise en compte? (SolverFinish (2), n'a pas l'air de suffire)

    bien-à-vous


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Dim Optimum As Long
    Optimum = 600000
     
     
    For i = 2 To 4
        For j = 2 To 4
            For k = 2 To 4
                Sheets("Données Projet").Cells(28, 3) = Sheets("Toit").Cells(i, 14)
                Sheets("Données Projet").Cells(31, 3) = Sheets("Toit").Cells(i, 20)
                Sheets("Données Projet").Cells(32, 3) = Sheets("Toit").Cells(i, 18)
     
                Sheets("Données Projet").Cells(28, 4) = Sheets("Mur").Cells(j, 14)
                Sheets("Données Projet").Cells(31, 4) = Sheets("Mur").Cells(j, 20)
                Sheets("Données Projet").Cells(32, 4) = Sheets("Mur").Cells(j, 18)
     
                Sheets("Données Projet").Cells(28, 5) = Sheets("Sol").Cells(k, 14)
                Sheets("Données Projet").Cells(31, 5) = Sheets("Sol").Cells(k, 20)
                Sheets("Données Projet").Cells(32, 5) = Sheets("Sol").Cells(k, 18)
     
                SolverReset
                SolverOk SetCell:="$F$42", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$36:$E$36"
                SolverAdd CellRef:="$F$45:$F$47", Relation:=3, FormulaText:="$H$45:$H$47"
                SolverAdd CellRef:="$F$48", Relation:=1, FormulaText:="$H$48"
                SolverAdd CellRef:="$F$49:$F$51", Relation:=3, FormulaText:="$H$49:$H$51"
                SolverOk SetCell:="$F$42", MaxMinVal:=2, ValueOf:="0", ByChange:="$C$36:$E$36"
     
     
                If Sheets("données Projet").Cells(42, 6) < Optimum Then
                SolverFinish (1)
                Optimum = Sheets("données Projet").Cells(42, 6)
                Else
                SolverFinish (2)
     
                End If
            Next k
        Next j
    Next i

Discussions similaires

  1. comment faire un offset dans une fonction ?
    Par tempo-lyon dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2007, 11h15
  2. Comment faire boucler correctement
    Par kamikazbe dans le forum JDBC
    Réponses: 1
    Dernier message: 08/06/2007, 17h39
  3. Comment faire boucler une vidéo flash
    Par missmegu dans le forum Flash
    Réponses: 4
    Dernier message: 24/04/2007, 17h00
  4. Réponses: 3
    Dernier message: 04/03/2007, 19h00
  5. Réponses: 1
    Dernier message: 18/07/2006, 23h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo