XL 2019 Lancer macro etape par etape

Rabeto

XLDnaute Occasionnel
Bonsoir,

J'ai 3 macro dans mon fichier et je les ai fusionné dans une module

Sub All ()
Call macro1
Call macro 2
Call macro3
End sub

Les 3 macros se lancent en même temps quand j'execute All,
Seulement, j'aimerai que seulement à la fin de l'execution de la macro 1 que la macro 2 se lance, et à la fin de la macro 2 que macro 3 se lance.
Je veux les garder dans une module, pour éviter de lancer 3 macros différents, et séparément.

Que dois je rajouter dans ce code pour cela svp ?

Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Rabeto,
Les 3 macros se lancent en même temps quand j'execute All,
Ca, ce n'est pas possible en VBA.
Macro1 s'exécute, à la fin Macro2 s'exécute et à la fin c'est au tour de Macro3.
Par contre, ce qui peut arriver c'est que dans une macro vous fassiez appel à une API Windows qui elle peut rendre la main à votre macro avant d'avoir terminé.
Donc tout dépend de votre code.
Si vous pouviez le partager ...
 

laurent950

XLDnaute Barbatruc
Bonsoir @Rabeto

Code:
```vba
Sub All()
    Call macro1
End Sub

Sub macro1()
    ' Votre code pour la macro 1 ici
    ' ...
    
    ' Appeler la macro 2 à la fin de la macro 1
    Application.OnTime Now + TimeValue("00:00:01"), "macro2" ' Attendez 1 seconde avant d'appeler macro2 (ajustez le délai si nécessaire)
End Sub

Sub macro2()
    ' Votre code pour la macro 2 ici
    ' ...
    
    ' Appeler la macro 3 à la fin de la macro 2
    Application.OnTime Now + TimeValue("00:00:01"), "macro3" ' Attendez 1 seconde avant d'appeler macro3 (ajustez le délai si nécessaire)
End Sub

Sub macro3()
    ' Votre code pour la macro 3 ici
    ' ...
End Sub

' Etc......
 

Rabeto

XLDnaute Occasionnel
Bonsoir laurent950, sylvanu

Merci pour vos réponses,
Le code de laurent950, est ce que le timing veut dire, 1sec à la fin de l'execution de la macro1 ou attendre 1s apres que le premier macro se lance ?

Sylvanu, les codes de ma macro sont assez simple,, c'est juste des actualisations de requete power query, rien de compliquer.
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Dans ce cas, il faut (le plus simple) configurer PQ pour que les requêtes ne s'actualisent pas en arrière-plan :

1695974615754.png

Ici, elles s'actualisent en arrière-plan
Il suffit de décocher
Sinon, dans le code demandant le "Refresh", rajouter "False" en bout de ligne :

VB:
Sub Macro1()
    Range("Tableau1_2").ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub
Bonne journée
 

Rabeto

XLDnaute Occasionnel
Bonsoir,

En fusionnant vos proposition j'ai trouvé un code de ce genre.

Sub Test()

Dim Test As Worksheet
Dim Nom As String
Call Macro1

Set Test = Worksheets("XXXXX")
Nom = Test.Range("A1").Value

If Nom = "XXXXX" Then
Call Macro2
Else
Call Macro3
End If
Call Macro4
MsgBox ("Complet")

End Sub
 

Discussions similaires

Réponses
12
Affichages
347

Statistiques des forums

Discussions
313 274
Messages
2 096 750
Membres
106 737
dernier inscrit
zaka