Automatiser les macros
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
Bonsoir,
Ne te prends pas la tête avec une boite de dialogue, tu te fais un seul bouton auquel tu affecte macro 1 par exemple.
A la fin de ta macro1 tu mets call macro2. A la fin de la macro 2, tu marque call macro_a etc ...
Le call te permet d'appeler la macro suivante, ainsi tu as un ordre chronologique dans tes macros.
Cependant, en utilisant cette méthode, fais bien attention d'avoir nommé tes feuilles dans ta macro, car dans le cas contraire, toutes tes macros risques de s'aapliquer à ta feuille en cour !
Cordialement,
James
bonjour voici ce que j'ai apres mes recherches :
Option Explicit
Sub Lance()
Worksheets("Syntèse").Activate
Call macrosynthese 'code qui recupère les oblig de la nvll dispo vers la feuille synthese(1)
Call suprimeligne 'code qui retranche toutes les obligations qui n'ont pas un taux fixe(2)
Worksheets("Feuil1").Activate
Call marcotest 'copie de toutes les oblig a taux fixe de la feuille synthese vers feuil1(3)
Call Prixspot 'calcul du prix spot aujourd'hui(4)
Worksheets("Risque Crédit").Activate
Call spreadDeCredit 'ecart entre le prix spot aujourd'hui et celui a l'emission(5)
Worksheets("Feuil1").Activate
Call valorisation_coupon_Annuel 'code sur la valorisation d'oblig à coupons annuels
Call valo_coupon_trimestriel 'code sur la valorisation d'oblig a coupons trimestriels
Call valo_coupon_semestriels 'code sur la valorisation d'oblig a coupons semestriels
End Submais je me pose une question : je peu ecrire ce code dans nimporte quelle feuille active ??
merci de votre aide
- Messages
- 9'245
- Excel
- Vista Office 2007FR
- Inscrit
- 08/12/2007
- Emploi
- retraité Sce.Méthodes
Bonjour,
je peu ecrire ce code dans nimporte quelle feuille active ??
Non, ce code doit être dans un module du classeur actif
Amicalement
Claude
bonjour,
mais je me pose une question : je peu ecrire ce code dans nimporte quelle feuille active ??
Non, ton code doit se trouver dans un module.
Tu n'as pas besoin d'activer des feuilles en principe sauf si par exemple tu dois faire un tri.
Par contre, dans ta macrosynthese, il faut faire référence à ta feuille Synthèse.
Le mieux serait que tu mettes le code macrosynthese par exemple. De là on peut te conseiller
Amicalement
voici le code de ma macro macrosynthese:
Sub macrosynthese()
'copie puis tri des obligs
Worksheets("Nlle Dispo").Range("A1:I451").Copy Worksheets("Synthèse").Range("A5")
Range("A5:I455").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="=Oblig", Operator:=xlOr, _
Criteria2:="=EMTN"
ActiveWindow.SmallScroll Down:=216
'..suprimer les lignes de dated'echéance anterieures a la date d'aujourd'hui
Dim i%
For i = Range("d65536").End(xlUp).Row To 2 Step -1
If Cells(i, 8) < Range("a2") And Cells(i, 8) <> "" Then Rows(i).EntireRow.Delete
Next i
'efface la la phrase unitile "portefeuille compte proprr" de la cellule H5
Range("H5").Select
ActiveCell.FormulaR1C1 = ""
Range("H51").Select
Worksheets("Nlle Dispo").Range("A185:I185").Copy Worksheets("Synthèse").Range("A5")
End Subvoila j'attends vos conseils aussi j'ai pas bien compris ce que Dan essai de me dire :
Par contre, dans ta macrosynthese, il faut faire référence à ta feuille Synthèse.
Le mieux serait que tu mettes le code macrosynthese par exemple. De là on peut te conseillermerci encore
RE,
Essaie comme ceci :
Sub macrosynthese()
Dim i As Integer
'copie puis tri des obligs
With Worksheets("Synthèse")
Worksheets("Nlle Dispo").Range("A1:I451").Copy .Range("A5")
.Activate
.Range("A5:I5").AutoFilter
.Range("C5").AutoFilter Field:=3, Criteria1:="=Oblig", Operator:=xlOr, _
Criteria2:="=EMTN"
'..suprimer les lignes de dated'echéance anterieures a la date d'aujourd'hui
For i = .Range("d65536").End(xlUp).Row To 2 Step -1
If .Cells(i, 8) < .Range("a2") And Cells(i, 8) <> "" Then Rows(i).EntireRow.Delete
Next i
'efface la la phrase unutile "portefeuille compte proprr" de la cellule H5
.Range("H5").FormulaR1C1 = ""
Worksheets("Nlle Dispo").Range("A185:I185").Copy .Range("A5")
End With
End SubPAr contre, je ne vois pourquoi tu refais une copie des cellules A185:I185 vers la cellule A5 de la feuille synthèse... (instruction en fin de macro)
Amicalement
je refais cette copie car lorsque je lance le filtre de mes Oblig et EMTN j'ai pas le differents titres qui sont a cette ligne du coup je les recopies..
sauf que la tu a sans doute amélioré ma macro synthese mais je sais pas comment comprendre ce qui me reste a faire pour ma macro
Lancemerci
re,
Le but est de supprimer toutes les instructions ACTIVATE dans ta sub LANCE()
Fais un essai pour voir si tes codes fonctionnent correctement.
A te relire
bonjour , de ce qui est de ma macro lance , j'ai
mis la macro lance dans le module 1
et toutes les autres macros dans les modules egalement (j'ai mi une macro par module)
lorsque je lance chacune des macros tout va bien mais lorsque je lance la macro "lance" rien ne va ça commence a tourner et ça s'arrete m'indiquant des erreurs
voici ma macro lance :
Public lance()
Call temps 'se trouve dans le module 2
'Call interpolation 'se trouve dans le module 3
Call forwards 'se trouve dans le module 4
Call macrosynthese 'se trouve dans le module 5
Call suprimeligne 'se trouve dans le module 6
Call copier_synthese_vers_feuil_1 'se trouve dans le module 7
Call rating_note 'se trouve dans le module 8
Call Prixspot 'se trouve dans le module 9
Call calcul_des_spread 'se trouve dans le module 10
Call calcul_des_spread_2 'se trouve dans le module 10
Call calcul_spread_trim_2 'se trouve dans le module 10
Call calcul_des_spreads_sem_1 'se trouve dans le module 10
Call calcul_des_spreads_sem 'se trouve dans le module 10
Call calcul_des_spread_1 'se trouve dans le module 10
Call Prixspot_avec_alpha 'se trouve dans le module 11
Call valo_coupon_semestriels 'se trouve dans le module 12
Call valo_coupon_trimestriel 'se trouve dans le module 12
Call valorisation_coupon_Annuel 'se trouve dans le module 12
Call calcul_spread_moyen 'se trouve dans le module 13
Call spread_moyen_par_type 'se trouve dans le module 13
End Subde ce qui est de ma macro synthèse je l'ai modifier elle devient :
Public Sub macrosynthese()
Dim k As Long, j As Long, lastrow As Long
Dim ws_nd As Worksheet
Dim ws_S As Worksheet
Set ws_nd = Worksheets("Nlle Dispo")
Set ws_S = Worksheets("Synthèse")
lastrow = ws_nd.Cells(Rows.Count, 3).End(xlUp).Row
j = 0
For k = 0 To lastrow
If ws_nd.Cells(k + 3, "C").Text = "Oblig" _
Or ws_nd.Cells(k + 3, "C").Text = "EMTN" Then
ws_nd.Range("A" & k + 3 & ":I" & k + 3).Copy ws_S.Range("A" & j + 6)
j = j + 1
End If
Next
'..suprimer les lignes de dated'echéance anterieures a la date d'aujourd'hui
Dim i%
For i = Range("d65536").End(xlUp).Row To 2 Step -1
If Worksheets("Synthèse").Cells(i, 8) < Worksheets("Synthèse").Range("a2") And _
Worksheets("Synthèse").Cells(i, 8) <> "" Then Worksheets("Synthèse").Rows(i).EntireRow.Delete
Next i
End Subpouvez vous me dire pourquoi ma macro lance plante??
merci
re,
tu commences mal là...
Cela doit être
Public SUB lance()
et pas
Public lance()
(j'ai mi une macro par module)
Pas besoin, tu peux mettre toutes tes macros dans un seul module.
Amicalement
bonjour ,
j'ai rctifié l'erreur
public sub lance et non public lance mais lorsque je lance la macro "lance " les macro ci dessous s'executent :
Call temps
Call forwards
Call macrosynthese
Call suprimeligne
Call copier_synthese_vers_feuil_1
Call rating_note puis tout s'arrete je n'arrive pas à comprendre pourquoi
merci de votre secours
re,
puis tout s'arrete
Que veux-tu dire ? Tu as une erreur ??
Ce ne serait pas plus simple de mettre ton fichier en ligne ??