Exécuter une macro à la fin du chargement d'une requete

Bonjour,

J'effectue une requête grâce à PowerQuery me permettant de récupérer un tableau avec cette commande:

ActiveWorkbook.RefreshAll

Cela lance donc la requête en arrière-plan.

requete arriere pla

Une fois la requête terminée je souhaite lance automatiquement une macro de mise en forme du tableau.

Mon objectif est donc de détecter le fin de la requête pour lancer une macro.

J'ai découvert qu'on pouvez utiliser:

QueryTable.AfterRefresh

mais je n'arrive pas à mettre en place l'exemple donné:

Private Sub QueryTable_AfterRefresh(Success As Boolean) 
 If Success Then 
 ' Query completed successfully 
 Else 
 ' Query failed or was cancelled 
 End If 
End Sub

Pourriez vous m'aider sur ce problème ?

Merci beaucoup d'avance.

Fabien

Bonjour,

J'imagine qu'il faut coller ce code dans le module de la feuille contenant la QueryTable :

Private Sub QueryTable_AfterRefresh(Success As Boolean) 
 If Success Then ' Query completed successfully
    call macromiseenforme
 Else 
 ' Query failed or was cancelled 
 End If 
End Sub

Cdlt,

Bonjour,

Sinon, en regardant ce post (et le fil général, s'il le faut...)

Le but est d'éviter la mise à jour de la requête en arrière-plan

Bonne lecture

Bonjour,

Merci pour vos réponses.

@3GB j'ai essayé cette solution:

afterrefresh

elle n'a pas fonctionné... J'ai également essayé de mettre ce code dans "ThisWorkbook" et dans "Recup_donnees" (qui met à jour les données), sans plus de succès.

@cousinhub j'ai regardé le post envoyé, effectivement ceci fonctionne:

Sheets("Tourisme").ListObjects("NomTableau").QueryTable.Refresh (False)

puisque cela attend la fin de la mise à jour des données pour passer à la suite. Cependant la mise à jour prenant 5-6min (fichier lourd sur un serveur avec beaucoup de traitement) je souhaite pouvoir utiliser le reste de l'Excel en attendant le chargement...

J'ai modifié la façon de mettre à jour avec cette commande:

Sheets("NomFeuille").ListObjects("NomTableau").QueryTable.Refresh

J'ai vérifié que le feuille détectait bien mon tableau avec cette ligne:

Debug.Print Sheets("Tourisme").ListObjects(1)

Qui me retourne bien "NomTableau".

Cependant j'ai essayé de détecter les QueryTables:

Debug.Print Sheets("Tourisme").QueryTables.Count

Qui me retourne "0". Ce qui voudrait peut-être dire que l'excel n'identifie pas mon tableau comme un QueryTables ?

J'avoue être un peu à court de solution...

Merci d'avance de votre aide.

Bonjour,

Un petit code pour dénombrer les QueryTables :

Sub Nb_Qry_Tbl()
Dim Lo As ListObject
Dim Nb As Byte
For Each Lo In Sheets("Feuil1").ListObjects
    If Lo.SourceType = xlSrcQuery Then Nb = Nb + 1
Next Lo
End Sub

Tu peux bien sûr adapter ce code pour mettre à jour tes QT :

Sub Refresh_Qry_Tbl()
Dim Lo As ListObject
For Each Lo In Sheets("Feuil1").ListObjects
    If Lo.SourceType = xlSrcQuery Then Lo.QueryTable.Refresh
Next Lo
End Sub

Bonne journée

Bonsoir,

Si vous voulez utiliser l'événement Query.AfterRefresh, il faut :

1- définir les événements associés à QueryTable

2- assigner la variable associée à ces événements

ci-dessous code à insérer dans votre feuille : Tourisme

Private WithEvents tb_query As QueryTable

Sub actualiser()
    Set tb_query = Me.ListObjects("nom_tableau").QueryTable
    tb_query.Refresh

End Sub

Private Sub tb_query_AfterRefresh(ByVal Success As Boolean)

    If Success Then
    ' Query completed successfully
    Else
    ' Query failed or was cancelled
    End If

End Sub

Bonjour à tous

Je ne comprends pas trop la nécessité de ceci : il suffit de désactiver la mise à jour en arrière plan des requêtes et l'appel à la MAJ après le Refresh suffit

Bonjour Chris,

puisque cela attend la fin de la mise à jour des données pour passer à la suite. Cependant la mise à jour prenant 5-6min (fichier lourd sur un serveur avec beaucoup de traitement) je souhaite pouvoir utiliser le reste de l'Excel en attendant le chargement...

Le monsieur, il veut continuer à utiliser son fichier...

La solution proposée par Thev devrait "normalement" lui permettre ceci

Bonne "dernière" journée de l'année :)

Re

Ah je n'avais pas vu cette demande.

Merci à thev

Bonnes fêtes à tous

Rechercher des sujets similaires à "executer macro fin chargement requete"