mutualisation de macro par un seul raccourci

Tene

XLDnaute Nouveau
Bonsoir tout le monde

J'espere que vous passez une bonne soiree

Quelqu'un pourrait-il m'aider a resoudre le point suivant

J'ai 9 feuilles de calcul identiques reparties dans trois classeurs (3 feuilles par classeur)

j'ai cree une macro par feuille de calcul (9 macros a executer en fin de journee)

Comment mutualiser leur execution avec une seule commande; a l'aide d'un raccourci par exemple.

Est-il possible de le faire et comment?

Vos conseils pourront bien m'aider pendant que je cherche un lien ou dans les archives

Merci d'avance a tous
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Tene, le Forum

Sans voir de code, il me semble qu'un concept de routine avec 9 macros qui font un traitement similaire sur 9 Feuilles identiques est déjà un peu irrationnel dans la programmation... Mais sait-on jamais...

Une astuce basic : passer des arguments (sous réserves que la structure de tes fichiers le permettent)

Const ThePath As String = 'C:\Documents and Settings\Thierry\Mes documents\'

Sub TheRunner()
Dim WBItem As Variant
Dim WSItem As Variant

   
For Each WBItem In Array('Workbook1.xls', 'Workbook2.xls', 'Workbook3.xls')
        TheOpener CStr(WBItem)
           
For Each WSItem In Array('Feuil1', 'Feuil2', 'Feuil3')
                TheBigProcedureForNineWorkBooks CStr(WBItem), CStr(WSItem)
           
Next WSItem
        TheCloser CStr(WBItem)
   
Next WBItem
End Sub

Sub TheOpener(WBName As String)
      Workbooks.Open ThePath & WBName
End Sub

Sub TheBigProcedureForNineWorkBooks(WBName As String, WSName As String)
Dim WB As Workbook
Dim WS As Worksheet

Set WB = Workbooks(WBName)
Set WS = WB.Worksheets(WSName)

   
With WS
        .Range('A1') =
Date
   
End With
End Sub

Sub TheCloser(WBName As String)
    Workbooks(WBName).Close
True
End Sub


Si tu testes ce codes, il te suffit d'adapter la constante et d'avoir trois classeurs dans le Chemin indiqué qui se nommeront comme dans les deux Arrays successives (les trois feuilles aussi of course)


Sinon l'archi-basic serait de faire un Runner comme ceci :

Option Explicit

Sub TheRunner()
Dim TheTimerOfMacro As String

Macro1
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 1 Passée à ' & Now & vbCrLf
Macro2
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 2 Passée à ' & Now & vbCrLf
Macro3
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 3 Passée à ' & Now & vbCrLf
Macro4
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 4 Passée à ' & Now & vbCrLf
Macro5
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 5 Passée à ' & Now & vbCrLf
Macro6
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 6 Passée à ' & Now & vbCrLf
Macro7
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 7 Passée à ' & Now & vbCrLf
Macro8
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 8 Passée à ' & Now & vbCrLf
Macro9
    TheTimerOfMacro = TheTimerOfMacro & 'Macro 9 Passée à ' & Now & vbCrLf

MsgBox 'Les Neufs Macros Ont Roulées ' & vbCrLf & TheTimerOfMacro

End Sub


Sub Macro1()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro2()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro3()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro4()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro5()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro6()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro7()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro8()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub

Sub Macro9()
Dim i As Integer
   
For i = 1 To 500
        Range('A' & i) = 'TOTO'
   
Next
End Sub


Bonne Soirée
[ol]@+Thierry[/ol]
 

Discussions similaires

Statistiques des forums

Discussions
312 099
Messages
2 085 285
Membres
102 850
dernier inscrit
iqi