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

Temps de pause

Mers

XLDnaute Junior
Bonjour le forum,

J'ai essayé de trouver sur le forum une solution pour faire une pause de 10 secondes dans une macro mais sans succès. Tout ce que j'ai trouvé me semble beaucoup plus complexe que ce dont j'ai besoin.

C'est que ma macro commence par mettre à jour un lien que j'ai avec une table SQL et effectue des oppérations par la suite. Mon problème est qu'une fois que j'ai lancé la mise à jour de ma table, ma macro commence à effectuer les autres opérations sans que la mise à jour soit complétée. J'aimerais donc forcer une pause avant de continuer les autres opérations.

Merci d'avance pour votre aide.

Mers
 

tototiti2008

XLDnaute Barbatruc
Re : Temps de pause

Bonjour Mers,

Il doit être possible d'attendre que ta mise à jour soit terminée pour exécuter la suite du code, mais ça dépend pas mal de la façon dont tu fais la mise à jour
En plus, c'est mieux que d'attendre 10 secondes, dès fois qu'un jour le serveur soit un peu lent à répondre
Peux-tu nous poster le code qui fait la mise à jour pour avoir une idée de la méthode employée ?
 

Mers

XLDnaute Junior
Re : Temps de pause

Voici le début de ma macro:

Code:
Sub Macro1()
'
' Macro1 Macro
'

    Sheets("Data").Visible = True
    
    Sheets("Data").Select
    ActiveWorkbook.RefreshAll
    Sheets("Analyse").Select
    ...
 

JCGL

XLDnaute Barbatruc
Re : Temps de pause

Bonjour à tous,
Salut Marc

Tiré de l'aide accessible par F1 dans VBE :

VB:
'Cet exemple montre comment suspendre l'exécution d'une macro pendant environ 10 secondes.
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 10
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime

A + à tous
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Temps de pause

Bonjour Jean-Claude ,
Re,

RefreshAll rafraichit toutes les plages de données externes et les tableaux croisés dynamiques du classeur
Si tu veux qu'il attende d'avoir fini le rafraichissement des données, il faut que chaque élément (données externes et TCD) ne s'actualise pas en arrière-plan
Soit tu le fait manuellement en passant en revue chaque élément, soit tu peux le faire dans la macro

Code:
Dim Ws As Worksheet, Qt As QueryTable, Pt As PivotTable
    For Each Ws In ThisWorkbook.Worksheets
        For Each Qt In Ws.QueryTables
            Qt.BackgroundQuery = False
        Next Qt
        For Each Pt In Ws.PivotTables
            Pt.PivotCache.BackgroundQuery = False
        Next Pt
    Next
    ThisWorkbook.RefreshAll

Mais attention, après ça ils ne s'actualiseront plus en arrière-plan (ce qui à mon avis n'est pas forcément un mal, mais bon...)
Sinon il y a sans doute moyen de garder leurs paramètres et de les mettre à jour "exceptionnellement pas en arrière-plan", dis-nous ce que tu en penses
 

Roland_M

XLDnaute Barbatruc
Re : Temps de pause

bonjour à tous,

pour une pause j'utilise tout simplement ceci !
T! = Timer: While Abs(Timer - T!) < 10: Wend: DoEvents

pour une pause assez longue mettre DoEvents à l'intérieur !
T! = Timer: While Abs(Timer - T!) < 100: DoEvents : Wend

Abs() car la pause qui part à minuit moins qq secondes et c'est la boucle pour 24 h !
 
Dernière édition:

Mers

XLDnaute Junior
Re : Temps de pause

(Désolé pour le délais de réponse. J'ai été appelé sur autre chose...)

C'est étrange mais les deux solutions ne semblent pas fonctionner.

J'ai fait:
Code:
    Sheets("Data").Visible = True
    
    Sheets("Data").Select
    ActiveWorkbook.RefreshAll
    
    newHour = Hour(Now())
    newMinute = Minute(Now())
    newSecond = Second(Now()) + 10
    waitTime = TimeSerial(newHour, newMinute, newSecond)
    Application.Wait waitTime

    
    Sheets("Analyse").Select
    ...
et ça ne semble pas fonctionner. C'est comme si la mise à jour tombait sur pause durant le waitTime plutôt que de continuer en arrière plan.

J'ai aussi fait:
Code:
    Sheets("Data").Visible = True
    
    Sheets("Data").Select

Dim Ws As Worksheet, Qt As QueryTable, Pt As PivotTable
    For Each Ws In ThisWorkbook.Worksheets
        For Each Qt In Ws.QueryTables
            Qt.BackgroundQuery = False
        Next Qt
        For Each Pt In Ws.PivotTables
            Pt.PivotCache.BackgroundQuery = False
        Next Pt
    Next
    ThisWorkbook.RefreshAll

    
    Sheets("Analyse").Select
    ...
et ça ne donne rien...

D'autres suggestions?
 

tototiti2008

XLDnaute Barbatruc
Re : Temps de pause

Bonjour Mers, Bonjour JC , Bonjour Roland ,

Sur la question "Pause" on peut aussi envisager de passer par Ontime en coupant la procédure en 2
Mais je me demande pourquoi "ça ne donne rien", ne serait-ce pas un peu vague ?
Les données à mettre à jour, c'est quoi exactement ? c'est fait comment ?
Des données externes, des TCD, autre chose ?
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…