Problème avec une macro qui appelle d'autres macros

cedric_1012

XLDnaute Nouveau
Bonjour à tous,
Voila mon problème : Sur une feuille excel j'ai mis un bouton GO qui doit exécuter la macro GO quand on le clique. Cette macro GO doit exécuter d'autres macros (macro 1, macro 2, etc.) en fonction de la valeur choisie dans une liste. Les macros 1, 2, etc marchent.

J'ai essayé de faire marcher GO avec "Case" :
Sub GO()
Select Case Range("B25")
Case "Return > Target Return"
Macro1
Case "Assets Weights Limits"
Macro2
End Select
End Sub

J'ai aussi essayé avec des conditions :
Sub GO()
If Range("B25").Value = "Return > Target Return" Then
Macro1
ElseIf Range("B25").Value = "Assets Weights Limits" Then
Macro2
EndIf
End Sub

J'ai essayé d'ajouter la fonction "Call" devant les noms des macros rien ne marche. J'ai toujours l'erreur suivante : "Erreur de compilation : Sub ou Function non définie" qui surligne en jaune Macro1 ou Macro2.

Ce que je ne comprends pas en plus de ça c'est que si je relance les macros 1, 2 après avoir eu cette erreur, elles ne marchent plus alors qu'elles marchaient avant...

Si quelqu'un peut m'aider, il est le bienvenu ! ;) Merci.
 

CB60

XLDnaute Barbatruc
Re : Problème avec une macro qui appelle d'autres macros

Re
Je pense qui faudrais voir l'ensemble de ton probléme

Voici un exemple avec CASE

Code:
Sub essai ()
 Select Case Range("b25").Value
 Case "Return > Target Return"
Macro1
 Case "Assets Weights Limits"
Macro2
 Case "toto"
Macro3
Case Else
'dernier choix<
 End Select
End Sub
 
Dernière édition:

cedric_1012

XLDnaute Nouveau
Re : Problème avec une macro qui appelle d'autres macros

Ok alors voila l'ensemble du problème : J'ai une cellule (B25, même si ça importe peu;)) qui peut prendre 6 valeurs différentes d'une liste créée avec Données->Validation.
Ces valeurs représentent des paramètres d'optimisation utilisés par des macros qui utilisent le solveur.
Concrètement :
- si B25 = "Return > Target Return" alors la macro utilisée devra être Max_Return1
- si B25 = "Return > Target Return & Assets weights limits" alors la macro utilisée devra être Max_Return2.
- si B25 = "Assets weights limits Return" alors la macro utilisée devra être Max_Return3.
- si B25 = "Vol < Target Vol" alors la macro utilisée devra être Min_Vol1
- si B25 = "Vol < Target Vol & Assets weights limits" alors la macro utilisée devra être Min_Vol2
- si B25 = "Assets weights limits Vol" alors la macro utilisée devra être Min_Vol3.

Pour ne pas avoir plusieurs boutons je souhaite que tout soit fait en cliquant uniquement sur le bouton GO.

Toutes ces macros fonctionnent si je les utilise une par une mais je n'arrive pas à tout regrouper dans la meme macro GO.

Est ce que c'est plus clair maintenant ?

Edit : Je vais essayer avec ce que tu proposes CB60, je vous tiens au courant. En tout cas, merci pour la réactivité et les réponses !
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : Problème avec une macro qui appelle d'autres macros

Bonjour à tous

Cédric, le solveur, cela peut intéresser des gens comme moi (en effet je ne l'ai jamais utilisé mais bon je sais que cela existe.
Tu ne pourrais pas mettre un exemple de ton fichier par rappoprt à ta problèmatique sans données confidentielles.

En plus ce serait plus simple pour t'aider et on apprendrai quelque chose.
 

CB60

XLDnaute Barbatruc
Re : Problème avec une macro qui appelle d'autres macros

re
Voici ton exemple
je n'ai pas réussi avec tes noms composés, je suis passé par un equivalent.
 

Pièces jointes

  • select case.xls
    24 KB · Affichages: 74
  • select case.xls
    24 KB · Affichages: 78
  • select case.xls
    24 KB · Affichages: 78

cedric_1012

XLDnaute Nouveau
Re : Problème avec une macro qui appelle d'autres macros

Merci CB60. J'ai essayé mais ca ne marche toujours pas. Peut etre que mes "sous macros" ne sont pas correctes. J'en mets une pour vous montrer :
Sub MaxRet1()
SolverReset
SolverOk SetCell:="$C$28", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$12:$K$12"
SolverAdd CellRef:="$B$13", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$C$29", Relation:=1, FormulaText:="Target_Volatility"
SolverAdd CellRef:="$B$12:$K$12", Relation:=1, FormulaText:="1"
SolverAdd CellRef:="$B$12:$K$12", Relation:=3, FormulaText:="0"
SolverOk SetCell:="$C$28", MaxMinVal:=1, ValueOf:="0", ByChange:="$B$12:$K$12"
SolverSolve
End Sub

J'ai toujours ce message "Erreur de compilation : Sub ou Function non définie" qui vient surligner MaxRet1...

@job75 : J'ai essayé avec la macro suivante, fournie par CB60 :
Sub essai()
Select Case Range("g25").Value
Case Is = 4
MinVol1
Case Is = 5
MinVol2
Case Is = 6
MinVol3
Case Is = 1
MaxRet1
Case Is = 2
MaxRet2
Case Is = 3
MaxRet3
End Select
End Sub

@MJ13 : pour l'instant je n'ai que mon fichier avec des données confidentielles. Je ferai un petit exemple d'utilisation du solveur si ca t'interesse, mais dans quelques temps seulement.

Merci
 

CB60

XLDnaute Barbatruc
Re : Problème avec une macro qui appelle d'autres macros

Bonjour
L'essai que je t'ai proposé, tu arrive à le faire fonctionner??
SI oui, commence par l'adapter pour ton premier choix, et tant que celui ci ne fonctionne pas ne vas pas plus loin, après on ne sais plus ou on vas!!
 

cedric_1012

XLDnaute Nouveau
Re : Problème avec une macro qui appelle d'autres macros

Bonjour,
J'arrive à faire fonctionner l'essai que tu m'as envoyé avec des macros qui copient et/ou collent des cellules ou des fonctions de ce genre. Par contre dès que j'introduit une macro qui fait appel au solveur ça plante. Voila le code de ce que j'ai essayé sur la base de ton fichier. Macro2 fait un copié/collé tout bête et Macro1 fait appel au solveur pour chercher le minimum d'une fonction mathématique simple sur un intervalle donné :
Sub Macro2()
Rows("14:15").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=12
Range("A35").Select
ActiveSheet.Paste
End Sub

Sub Macro1()
SolverReset
SolverOk SetCell:="$E$3", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$2"
SolverAdd CellRef:="$D$2", Relation:=1, FormulaText:="10"
SolverAdd CellRef:="$D$2", Relation:=3, FormulaText:="-10"
SolverOk SetCell:="$E$3", MaxMinVal:=2, ValueOf:="0", ByChange:="$D$2"
SolverSolve
End Sub

Tout ça dans le code que tu m'as fourni:
Sub essai()
Select Case Range("c2").Value
Case Is = 1
Macro1
Case Is = 2
Macro2
End Select
End Sub

Si la valeur de c2 est 2 (appel à la macro 2) pas de problème, si c'est 1 ça plante en affichant toujours le meme message d'erreur.

Encore merci pour ta patience, je crois que je vais finir par m'arracher les cheveux.
 
Dernière édition:

CB60

XLDnaute Barbatruc
Re : Problème avec une macro qui appelle d'autres macros

re
Je ne sais pas si je vais pouvoir t'aider, car le solveur, j'ai dejà essayé de l'utiliser, mais sans trop de succés, tu n'aurais pas un probléme de remise à zéro de ce solveur??
Essai peut être de chercher sur le site une macro qui utilise le solveur pour voir la structure de celle ci

Edit
j'ai trouvé cela sur google:
Cocher la référence solveur.xls dans outil-références de l'éditeur VBA.
et aussi
remplacer
solverOK par solvOK
solveradd par solvadd
à tester!!!
 
Dernière édition:

cedric_1012

XLDnaute Nouveau
Re : Problème avec une macro qui appelle d'autres macros

Ca y est ça marche !!!!

J'ai fait ce que tu as dis (cocher la case solveur dans l'editeur VBA) et aussi changer toutes les lignes SolverXXX par SolvXXX.

Un grand merci pour ton aide !

Je mettrai dans quelques temps un exemple d'utilisation du solveur avec des macros mais surtout des données non confidentielles ;)
 

Discussions similaires

Réponses
3
Affichages
101

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet