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 :

Solver VBA_Macro si convergence


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Par défaut Solver VBA_Macro si convergence
    Bonsoir,

    Je sollicite une aide s'il-vous plait pour savoir juste si il était possible de définir une action selon le résultat d'une fenêtre Solver. Je veux dire que si le Solver trouve une solution alors VBA exécute une macro juste derrière, si il ne converge pas alors une autre macro... J'ai bien essayé d'appliquer des mises en forme avec un V à côté des cellules étant dans les conditions du Solver (si conditions validées), un X si conditions non validées et ensuite de dire que si il n'y a que des V dans les cases alors on fait la macro suivante mais c'est pas très pro et en plus certaines des cellules appelées dans le solveur sont cachées pour pas qu'on voit les étapes de calcul .

    J'aimerais donc trouver un moyen de dire à Excel que si la fenêtre "Le solveur n'a pas trouvé de solution..." apparaît alors macro1, si la fenêtre "Le solveur a trouvé..." alors macro2.
    J'ai rien trouvé la dessus sauf la commande UserFinish mais qui elle me permet uniquement de valider la fenêtre.

    Merci d'avance pour toute réponse éventuelle.

    Bonne soirée,
    Cdlt.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Bonjour,

    Peux-tu me dire ce que te renvois le solver quand "il ne trouve pas se solution".

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Par défaut
    Alors si il ne converge pas il renvoie

    Nom : Capture.PNG
Affichages : 981
Taille : 26,5 Ko

    Si il converge il renvoie

    Nom : Capture2.PNG
Affichages : 961
Taille : 29,0 Ko

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Regardes ce liens,

    http://msdn.microsoft.com/fr-fr/libr...ffice.15).aspx

    Si tu affiches le résultat dans une cellule tu as un #N/A dans le cas où il n'y a pas de solution?

    Regardes le code que te renvois l'enregistreur de macro en cas de solution non trouvée.

    Si il te renvois une référence, tu peux l'utiliser dans un if.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Par défaut
    Tout d'abord merci pour les réponses.

    Je vois où tu veux en venir mais je ne sais pas trop comment faire pour renvoyer la réponse du solveur en fait. Sur le lien que tu m'as donné il y a un truc super interressant (exactement ce que je cherche), c'est le renvoi du chiffre entre 0 et 20.

    Je souhaiterais en fait executer une maccro si le chiffre renvoyé est 5 "Le Solveur ne peut pas trouver de solution réalisable." ou si c'est 0 "Le solveur a trouvé une solution.Tous les contraintes et les conditions d'optimalité sont respectées." ou 1 "Le solveur a convergé à la solution actuelle.Tous les contraintes sont satisfaites."

    Mais comment accéder à ce chiffre ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Mais comment accéder à ce chiffre ?
    Pour moi le plus simple c'est l'enregistreur de macro.

    Tu fais ta procédures "à la main" pour un cas où tu es certains de ne pas avoir de solution. Après tu regardes dans ta macro ce que ça donne et tu récupères la partie qui t'intéresse.

    Sinon poste le code complet et je regarderai.

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    je te recommande un peu de lecture
    http://jpcheck.developpez.com/tutori...ur-sous-excel/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Par défaut
    Citation Envoyé par had4789 Voir le message
    Pour moi le plus simple c'est l'enregistreur de macro.

    Tu fais ta procédures "à la main" pour un cas où tu es certains de ne pas avoir de solution. Après tu regardes dans ta macro ce que ça donne et tu récupères la partie qui t'intéresse.

    Sinon poste le code complet et je regarderai.
    Alors voilà j'ai fais un petit code très basique et rapide juste pour illustrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
     
        SolverReset
     
        SolverOk SetCell:="$D$4", MaxMinVal:=2, ValueOf:=0, ByChange:="$D$4", Engine:=1 _
            , EngineDesc:="GRG Nonlinear"
     
        SolverAdd CellRef:="$D$4", Relation:=3, FormulaText:="$D$5"
        SolverAdd CellRef:="$D$4", Relation:=1, FormulaText:="$D$6"
        SolverAdd CellRef:="$D$7", Relation:=1, FormulaText:="$D$6"
     
        SolverSolve
     
    End Sub
    En gros, trouver D4 min tel que D4>= D5, D4<=D6 et D7<=D6. Donc ça marche si D6>2*D4 sinon ça marche pas.

    Comme j'ai en réalité beaucoup de conditions avec des solvers qui se succèdent, j'aimerais dire que si le solver ne trouve pas de solution alors on sort de la macro et on met par exemple une MsgBox où un truc du genre quoi.

    Ci-joint le fichier:

    Solver.rar

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C] Solver Sudoku
    Par AuraHxC dans le forum C
    Réponses: 1
    Dernier message: 03/01/2007, 15h28
  2. Réponses: 54
    Dernier message: 18/10/2006, 19h08
  3. Réponses: 5
    Dernier message: 30/11/2005, 11h54
  4. Convergence d'une série
    Par j.p.mignot dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 24/11/2005, 19h27
  5. [VB6] Utiliser le solver d'Excel
    Par Peltchag dans le forum VB 6 et antérieur
    Réponses: 30
    Dernier message: 04/11/2005, 17h24

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