Automatiser les macros [Résolu]

Signaler
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014
-
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014
-
Bonjour,
j'ai fait plusieurs macros qui s'executent dans des feuilles differentes
sauf que les resultats dans certaines feuilles dependent das autre
alors il me faut faire une automatisation de mes macros dans un certain ordre

supposons que j'ai
dans la feuille ("synthese") 2 macros: macro1 et macro2
tel que macro1 doit sexecuter avant macro2
puis quand je sorts de cette feuille ,je me retrouve dans ma feuille ("feuil1")
celle ci ayant 3 macros macro_a,macro_b et macro_c
macro _a s'execute puis macro_b enfin macro_c
enfin j'ai ma feuille ("feuil2")
ayant une seule macro
macro_h

est-il paussible de creer une boite de dialogue qui me demande de cliquer sur des boutons
portants les noms de mes macros?

merci de m'aider

12 réponses

Messages postés
31604
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
344
Bon.. j'ai réussi à reproduire ton pb...
- Où se trouve tes Sub ? (dans un module, dans un objet worsheet ..)
- Où se trouve ta Sub principale (celle qui appelle les autres) ?

Le souci apparait lorsque tes sub (comme suprimeligne) sont placés dans un élément worsheet (ou FEUIL1..)

En fait, j'ai résolu le pb en déplaçant ton code suprimeligne() dans un module ..

Dis moi si en faisant comme ça c'est bon.





Cordialement,
Jordane,
Messages postés
31604
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
344
Bonjour,

sur ce site : http://www.vbaexpress.com/kb/archive.php/k-398.html' target='_blank'>VBAEXPRESStu as un script qui permet de lister les SUB de ton classeur.

Ensuite, pour ce qui est de la fenêtre..; tu créés un userform.

bon courage.

Cordialement,
Jordane,
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Pas besoin de boîte de dialogue.
Dans l'éditeur VB, tu vas modifier un tout petit peu toutes tes macros pour être tranquille. Par défaut, elles sont de la forme Sub Macro_a() ...

Tu mets Public devant pour obtenir
Public Sub Macro_a()

Ensuite, tu écris ta propre macro qui lancera les macros dans l'ordre que tu veux :

Public Sub MaMacro()

   Call Macro_1()
   Call Macro_2()
   Call Macro_a()
   Call Macro_b()
   Call Macro_c()

End sub


Tu n'auras plus qu'à lancer cette macro dans ton classeur et attendre que tout s'effectue.

Molenn
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014

voila ce que j'ai ecris :
Public Sub MaMacro()

Call macrosynthese 
Call suprimeligne   
Call marcotest 
Call Prixspot    


Call spreadDeCredit 

Call valo_annuel
Call valo_coupon_trimestriel    
Call valo_coupon_semestriels    
End Sub


mais je remarque une difference entre ce qu'a ecrit Molenn et moi dans les noms de mes macros je n'arrive pas a mettre "()" (les parentheses
et lorsque je la lance j'ai une erreur ici:
Call macrosynthese 

erreur de compilation Sub ou fonction non defini..

merci de votre aide
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
9
Bonjour,

Si macrosynthese, suprimeligne, etc... sont les noms de tes macros, il faut les lancer comme ceci:

DoCmd.RunMacro macrosynthese

DoCmd.RunMacro suprimeligne

etc...

Calade
Messages postés
31604
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
344
Bonjour,

1 - en effet, les parenthèses ne s'écrivent pas sauf si tu as indiqués des arguments (paramètres) à ton sub
exemple:
Sub Essai(ma_variable as string)
...
end sub

et quand tu l'appelles: call Essai(la_variable_a_passer)


2 - Pour ton souci : "Sub ou fonction non defini.. " c'est que tu as du faire une faute en recopiant le nom de ta macro. Vérifie son orthographe.



Cordialement,
Jordane,
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014

pas du tout d'erreur de nom je viens meme de faire un copier coller du nom mais j'ai toujours la meme erreur.!!
Messages postés
31604
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
344
hum ..
étrange...

- Tes macros se trouvent t'elles dans le même classeur ?
- Est-ce que tu peux lancer ta macro séparément ?
- Est-ce la seule qui bloque ou les autres aussi ? (mets celle la en commentaire et essayes de voir si les autres se lancent bien)/
- As-tu essayé de renomer cette sub.. (juste au cas ou.. on ne sait jamais ^^ )


Tiens nous au courant.


Cordialement,
Jordane,
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014

* oui mes macros sont dans le meme classeur
*mes macros se lance bien separement
*toutes les macros bloquent
j'ai pas renommé sub ...
j'ai passé macrosynthese en commentaire puis la macro suivante a bloqué et ainsi de suite..
Messages postés
31604
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 mars 2021
344
re,
je cherche dans tous les sens mais je n'arrive pas à reproduire ton problème.

Comment son déclaré tes SUB ?
Sub nomduSub()
'..
End sub


Est-ce que tu peux aussi essayer ce code ?
Sub test()
Run "macrosynthese "
End Sub


Eventuellement, peux tu nous mettre à disposition un exemple de ton code (avec tes sub) ?
(Tu peux mettre le fichier sur le site ci-joint.fr et coller l'URL ici)


Cordialement,
Jordane,
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014

oui mes macros sont ecris comme ci-dessous
Sub nomduSub()
'..
End sub

voici un de mes codes :
Public Sub suprimeligne()

Dim numero  As Long
Dim ws_mc    As Worksheet
Dim ws_sy    As Worksheet
Dim i_mc    As Long
Dim i_sy    As Long
Dim nblig_mc As Long
Dim nblig_sy As Long

Set ws_mc = Worksheets("MC")
Set ws_sy = Worksheets("Synthèse")

nblig_mc = ws_mc.Cells(Rows.Count, 7).End(xlUp).Row
nblig_sy = ws_sy.Cells(Rows.Count, 1).End(xlUp).Row

For i_sy = nblig_sy To 1 Step -1
    If ws_sy.Cells(i_sy, 3).Text Like "*EMTN*" Or _
      ws_sy.Cells(i_sy, 3).Text Like "*Oblig*" Then
        numero = ws_sy.Cells(i_sy, 1).Value
        For i_mc = 1 To nblig_mc
            If numero = ws_mc.Cells(i_mc, 7).Value Then
                If ws_mc.Cells(i_mc, 27).Text <> "TF- Post" Then
                
                          
                    ws_sy.Rows(i_sy).Delete
                End If
                Exit For
            End If
        Next
   End If
Next
End Sub
Messages postés
151
Date d'inscription
mardi 20 avril 2010
Statut
Membre
Dernière intervention
15 juin 2014

bonjour

voila j'ai fait un essai et ça fonctionne

merci encore vous etes mes sauveurs