Une macro lance une autre macro

Résolu
Signaler
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009
-
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
-
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

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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 !
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
VB6 vers VBA !!
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

Bonjour Pile_Poil,

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

J-Louis
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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 !
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
4
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é
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Super !

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

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
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

Ouf!
C'est un peu laborieux le dimanche matin, mais merci quand-même.
Ca marche!

J-Louis
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

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
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

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
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
mets ton vrai code et pas une transcription
c'est le seul moyen de voir les erreurs
Messages postés
21
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
2 avril 2009

Alors là merci beaucoup pour le détail.
Tout deviens tellement plus facile (hum)

A bientôt certainement, bon dimanche.
J-Louis
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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 !