Une macro lance une autre macro

Résolu
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009 - 2 févr. 2008 à 10:35
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 3 févr. 2008 à 11:12
Bonjour,

Voila! J'aimerai qu'une macro dont le code est enregistrée dans un objet "UserForm" me commande une macro qui se trouve dans "Module1"

Help, je n'y parviens pas...

Merci d'avance

J-Louis

21 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 févr. 2008 à 20:57
Comme Pile_Poil le suggère, appelle ta macro avec seulement son nom, si cette macro est dans un Module et n'est pas délarée Private.

Exemple:
Tu mets un bouton sur ton UserForm et dans le code Click de ce bouton, tu écris
Private Sub CommandButton1_Click()
    Macro1
    Macro2
    Macro3
End sub

Ça exécutera les 3 macros une après l'autre

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
3 févr. 2008 à 10:10
lol!
un check box quand tu cliques dessus c'est un "sub checkbox_click() "
et la tu commence à tester la valeur de ce check box anvant de lancer ta macro si la valeur est la bonne

tu as un moyen simple de savoir la syntaxe d'un sub pour un objet
quand en creation tu double cliques sur l'objet cela ouvre la page de code dans la procédure sub par défaut pour cet objet
 donc tu n'aurais jamais du avoir un "Sub CheckBox1()" qui ne veut rien dire
3
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
3 févr. 2008 à 10:57
lol c'est donc bien dans l'évenement clic du bouton exécuter qu'il faut mettre ta commande de macro
sous la forme
If checkbox.value = True Then mamacro1 else mamacro2
ainsi tu as une macro exécuté si c'est vrai et une autre si c'est faux
maintenant si tu n'envisage pas de faire quoi que ce soit  tu suprime le "Else" et tout ce qui suit
si tu as plusieurs actions soumises à la condition cela s'écrirait
If checkbox.value = True Then
    mamacro1
    action1
    action2
else
    mamacro2
    action3
    etc...
end if
genre le truc sur lequel je suis en train de bosser ou je cascade à loisir des test conditionels à l'intérieurs de boucles
pour remplir un tableau d'infos contenues dans un dessin

    For Each ACADobj In toto 'liste les appareils existants dans le dessin
        If StrComp(ACADobj.EntityName, "AcDbBlockReference", 1) = 0 Then
            If ACADobj.Name = "appareil" Then
                ObjData = ACADobj.GetAttributes
                For I = 0 To UBound(ObjData)
                    ExistTab(I, UBound(ExistTab, 2)) = ObjData(I).TextString
                Next I
                ReDim Preserve ExistTab(10, UBound(ExistTab, 2) + 1)
            End If
        End If
    Next
    ReDim Preserve ExistTab(10, UBound(ExistTab, 2) - 1)
 
    important : quand tu as des action imbriquées comme dans mon exemple n'oublie pas de te servir de la touche tab comme je l'ai fait sinon tu vas vite ne plus rien comprendre à ce que tu écris
3
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
2 févr. 2008 à 15:20
si dans module1 ta macro s'apelle: sub mamacro( )
il te suffit dans ton userform d'écrire:  mamacro
par contre si c'est l'iverse il faut ecrire userform.mamacro

tu peux aussi utiliser l'instruction call mais va regarder dans l'aide la syntaxe exacte !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
2 févr. 2008 à 16:09
VB6 vers VBA !!
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
2 févr. 2008 à 16:15
PCPT
en l'occurence que ce soit du VBA ou du VB6 le fonctionnement est exactement le meme
par contre si il veut  piloter du VBA depuis du VB6 il faut un peut plus d'infos pour connaitre la méthode à utiliser car là ça devient de l'automation
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
2 févr. 2008 à 16:53
Bonjour Pile_Poil,

Je pense que tu as raison, c'est là le problème car ça ne marche toujours pas...

J-Louis
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
2 févr. 2008 à 17:01
precises ce qui du VB6 et du VBA   sinon tu ne t'en sortira jamais
car pour le moment tu nous à dit  j'ai un animal qui ne veut pas manger la soupe
sans nous dire quel genre d'animal ni quel genre de soupe !
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
2 févr. 2008 à 19:24
Salut,
USERFOR et MODULE1 ça sent bien VBA donc les explications de Pile-Poil sont bonnes

Cordialement, Jean-Paul  
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
2 févr. 2008 à 21:07
MPi c'est clair que c'est sa solution si il est bien dans du VBA mais je crains qu'il soit dans du VBA pour une partie et du VB6 pour l'autre

a propos à mon probleme de vitesse j'ai trouvé la solution !!!!
plus qu'une seule ligne et du coup ça fonce !!!!
feuille.Range(feuille.Cells(1, 1), feuille.Cells(UBound(extrtab2, 1) + 1, UBound(extrtab2, 2) + 1)) = extrtab2()
cette ligne à la place de ma double boucle ça faint moins de ligne et plus de vitesse
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 févr. 2008 à 21:20
Super !

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 09:28
Yes!!!
Merci beaucoup MPi, Pile-Poil et les autres...
ça marche.
J'ai fait exactement ce que tu as décris plus haut,
Private Sub CommandButton1_Click()
    Macro1
    Macro2
    Macro3
End sub
Et tout à fonctionné
A +

J-Louis
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 10:04
Mais si je veux faire démarrer ma macro à partir d'un "CheckBox" faisant partie d'une série de choix sur mon"UserForm"?
Ce qui suit ne fonctionne pas....?

Sub CheckBox1()
If  Macro1 = True Then
Macro2
End If
End Sub

J-Louis
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
3 févr. 2008 à 10:17
par contre je te déconseille de transformer un checkbox qui est un objet de selection d'option  en un organe de commande pour lancer ta macro ce n'est pas logique
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 10:21
Ouf!
C'est un peu laborieux le dimanche matin, mais merci quand-même.
Ca marche!

J-Louis
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 10:39
Finallement ce n'est pas encore ça.

Je ne veux justement pas que le checkbox commande la macro mais que suivant la condition "True Ten" du checkbox lorsque je clic sur un bouton "Executer" la macro se lance.

J-Louis
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 10:53
J'ai essayé un truc comme ça mais ça ne va pas.
Mon userform contient un bouton Execute_Click pour l'opération suivante.
Sub Execute_Click ()
If mamacro1 = True Then (chois de mon checkbox)
Mamacro2
End If
End Sub
J-Louis
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
3 févr. 2008 à 10:59
mets ton vrai code et pas une transcription
c'est le seul moyen de voir les erreurs
0
JLR59 Messages postés 21 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 2 avril 2009
3 févr. 2008 à 11:02
Alors là merci beaucoup pour le détail.
Tout deviens tellement plus facile (hum)

A bientôt certainement, bon dimanche.
J-Louis
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
3 févr. 2008 à 11:11
quand tu as un doute sur la façon d'écrire une ligne de code cliques sur le mot et fait F1 l'aide s'ouvrira à la page qui va bien si tu as cliqué sur un mot clé connu et te donneras des exemples !
0
Rejoignez-nous