Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Lancement de 34 macros en une fois

de_hanstrapp

XLDnaute Occasionnel
Bonjour le forum,

J'ai dans un module unique 34 macros que je souhaite lancer individuellement, mais j'aimerais également besoin de pouvoir les lancer en une fois...

J'ai écris le code suivant mais je le trouve lent :

Sub Intégration_globale()
Call Intégration_1
Call Intégration_2
Call Intégration_3
Call Intégration_4
Call Intégration_5
Call Intégration_6
Call Intégration_7
Call Intégration_8
Call Intégration_9
Call Intégration_10
Call Intégration_11
Call Intégration_12
Call Intégration_13
Call Intégration_14
Call Intégration_15
Call Intégration_16
Call Intégration_17
Call Intégration_18
Call Intégration_19
Call Intégration_20
Call Intégration_21
Call Intégration_22
Call Intégration_23
Call Intégration_24
Call Intégration_25
Call Intégration_26
Call Intégration_27
Call Intégration_28
Call Intégration_29
Call Intégration_30
Call Intégration_31
Call Intégration_32
Call Intégration_33
Call Intégration_34
End Sub

Est-il possible d'utiliser une autre formulation pour que la macro s’exécute plus vite ? Via le module ?

Merci pour votre aide.

de_hanstrapp
 

de_hanstrapp

XLDnaute Occasionnel
Bonjour,

Le code est le suivant :

Sub Export1()
Sheets("1").Activate
Range("A10", Cells(Cells.Rows.Count, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Clear
With Sheets("MATRICE").[A10].CurrentRegion
.AutoFilter Field:=8, Criteria1:="1 - Athènes"
.SpecialCells(xlCellTypeVisible).Copy [A10]
.AutoFilter
End With
End Sub

Sub Export2()
Sheets("2").Activate
Range("A10", Cells(Cells.Rows.Count, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Clear
With Sheets("MATRICE").[A10].CurrentRegion
.AutoFilter Field:=8, Criteria1:="2 - Paris"
.SpecialCells(xlCellTypeVisible).Copy [A10]
.AutoFilter
End With
End Sub

Sub Export3()
Sheets("3").Activate
Range("A10", Cells(Cells.Rows.Count, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Clear
With Sheets("MATRICE").[A10].CurrentRegion
.AutoFilter Field:=8, Criteria1:="3 - Londres"
.SpecialCells(xlCellTypeVisible).Copy [A10]
.AutoFilter
End With
End Sub

etc...

Les données en rouge changent pour chaque macro.
Est-il possible de les rassembler dans une seule Sub ?

de_hanstrap
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @de_hanstrapp ,
Est-il possible de les rassembler dans une seule Sub ?
Oui, il est possible.

On pourrait utiliser une procédure Export avec deux paramètres : la ville et son numéro.
La procédure principale Main utilise une boucle pour lancer successivement la procédure Export avec le nom de la ville et son numéro.
Dans la constante Villes, les villes doivent apparaitre dans l'ordre de leur indice.

Un plus aurait été d'avoir un petit fichier représentatif car on doit pouvoir automatiser à partir des données la liste des villes. Cela éviterait de mettre les villes dans le code (constante Villes) et permettrait de s'adapter automatiquement aux changements ultérieurs (ajout, suppression) des villes dans les données sources.

Il est bien sûr illusoire de penser que ce code soit plus rapide que le votre. Il ne fait que diminuer la taille de votre code. Il nous faut un fichier représentatif et une explication claire de ce que vous désirez faire.


edit : bonjour @Dranreb .

Le code (pas testé puisque pas de classeur joint à la demande) :
VB:
Sub Main()
' Villes est la constante des villes à traiter, dans l'ordre de leur indice et séparées par des points-virgules
Dim x, n As Integer
Const Villes = "Athènes;Paris;Londres"
   For Each x In Split(Villes, ";")
      n = n + 1
      Export x, n
   Next x
End Sub

Sub Export(ByVal xVille As String, ByVal xn As Integer)
   xVille = xn & " - " & xVille
   Sheets(CStr(xn)).Activate
   Range("A10", Cells(Cells.Rows.Count, Cells.Find("*", , , , xlByColumns, xlPrevious).Column)).Clear
   With Sheets("MATRICE").[A10].CurrentRegion
      .AutoFilter Field:=8, Criteria1:=xVille
      .SpecialCells(xlCellTypeVisible).Copy [A10]
      .AutoFilter
   End With
End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Est-il possible d'utiliser une autre formulation pour que la macro s’exécute plus vite ?

1- Pour que chacune de tes macros soit un peu moins lente, tu peux essayer de les faire débuter par
VB:
Application.ScreenUpdating=FALSE

2- D'autre part, peut-être que l'activation de chaque feuille n'est pas nécessaire ??

3- Voir si un .ClearContent est suffisant, voir s'il est moins lent qu'un .Clear.

4- Tester aussi si le SpecialCells est indispensable.
S'il ne l'est pas, voir si la copie est moins lente sans le SpecialCells.

5- Range("A10") est peut-être moins lent que [A10].
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonjour à tous
@ de_hanstrapp
Il serait sage que tu répondes aux propositions qui te sont faites au message précèdent.
Même le hanstrapp le fait
 

de_hanstrapp

XLDnaute Occasionnel
Bonjour à tous
@ de_hanstrapp
Il serait sage que tu répondes aux propositions qui te sont faites au message précèdent.
Même le hanstrapp le fait
Bonjour Jacky67,
Désolé le hanstrapp n'était pas derrière son PC mais au travail
Merci à BrunoM45, maponne, Dranreb et TooFatBoy pour vos propositions.
Après plusieurs tests et même si je doit l'avouer je ne comprends pas grand chose au code de Danred, c'est la solution que je vais garder.
Bonne soirée.
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…