Mise a jour de macro après la MAJ de requêtes PQ

bonjour à tous et joyeux Noël à tous

je viens vers vous car je suis un peu perdu sur les forums et je n'arrive pas à trouver la bonne solution.

situation:

j'ai réalisé (avec votre aide)plusieurs requêtes via power query ==> tout se passe bien;

j'ai réalisé (avec votre aide) des macro pour mettre à jour des indicateurs pour un TDB ==> tout se passe bien;

but recherché:

je souhaiterai que les macro soient activés lorsque les requêtes PQ soient terminés, car là elles (les macro) ne se mettent pas à jour car elles sont trop rapide par rapport à la MAJ des requêtes.

besoin:
pouvez vous aider?

merci à tous et encore joyeux Noël à tous

Bonjour,

En utilisant cette instruction :

Sheets("Feuil1").ListObjects(1).QueryTable.Refresh (False)

Tu laisses l'actualisation se dérouler avant de continuer le code

Bonne journée

bonjour cousinhub,

je comprends l'esprit mais aurais tu un exemple?

merci d'avance à toi

cdt

Bonjour à tous

Il suffit dans les propriétés des requêtes de désactiver l’actualisation en arrière plan

bonsoir,

ok , j'arrive à désactiver les requêtes afin quelle ne se déclenchent pas automatiquement.

mais,

quelles sont les commandes qu'il faut mettre dans VBA pour gérer la MAJ des requêtes

merci d'avance à vous

cdt

RE

Cela dépend : tu peux utiliser ThisWorkbook .RefreshAll pour tout mettre à jour

ou s'il s'agit de TCD basés sur une requête, actualiser le TCD

ou si ce sont des tableaux structurés affichant le résultat d'une requête utiliser

[NomTableau].ListObject.QueryTable.Refresh

re,

@78Chris:: j'utilise "[NomTableau].ListObject.QueryTable.Refresh" pour mettre a jour les requêtes de power query mais mon problème vient du fait que je souhaite lancer mes macro a l'issu de cette mise à jour.

merci d'avance de ton aide

cdt

bonjour,

peut-être comme ça ?

     ...
     [NomTableau].ListObject.QueryTable.Refresh
     DoEvents
     macro1
     macro2
     ...

Bonjour à tous et Joyeux Noël

Dans le mesure où l'exécution en arrière plan est désactivée, il suffit d'enchaîner les instructions qui peuvent être des appels à d'autres procédures.

L'instruction suivante ne s'exécute pas tant que le refresh n'est pas achevé...

bonjour à tous,

je dois pas appliquer la bonne procédure

dans power query j'ai désactivé la MAJ en arrière plan.

lorsque je souhaite mettre a jour une requête dans PQ j'utilise :

ActiveWorkbook.Connections("Nom de la requête").Refresh mais j'ai aussi essaye [NomTableau].ListObject.QueryTable.Refresh

mais la macro n'attend pas la fin de la mise a jour et elle continue => je pense que cela est logique car il n'y a pas de commande du type =>attendre fin de MAJ

besoin

je ne sais pas comment attendre cette fin de MAJ....

merci d'avance à vous

cdt

Bonjour,

Le code que je t'ai proposé te permet d'attendre la mise à jour de ta requête avant de continuer le code...

Par contre, si tu veux qu'on t'aide plus avant, c'est plutôt à toi de mettre un fichier exemple...(avec minimum une requête...)

je comprends l'esprit mais aurais tu un exemple?

Bonne journée, et "joyeux Noël"...

re, vous avez essayé ce "doevents" ?

bonjour à tous

merci pour ce retour,

je vous joins un fichier très simple (j'ai laissé 1 requête),

de plus je vous joins mon cheminement qui est surement pas le plus simple:

je crée plusieurs requêtes via PQ du tableau "tableau 1" afin d'extraire les bonnes informations (ex: l'âge moyen, le taux de remplissage, le nb de permis.....)

le but est d'obtenir des indicateur pour MAJ un Tableau de bord

je crée des TCD à partir de ces requêtes dans la page "TCD"

puis lors de l'ouverture de la page TDB "activité" je lance la procédure de:

MAJ des requêtes (macro)

MAJ des indicateurs (macro)

merci d'avance à vous

cdt

33indicateurs.xltm (29.81 Ko)

Bonjour,

Comme énoncé plus haut, et pour vérification par tes soins, fais ces quelques manip'

Tu modifies ta BdD en supprimant quelques "ok" de ta colonne VL

Tu colles ce code dans un module standard, puis tu lances la macro

Le MsgBox te donnera bien la valeur à jour de la requête...

PS, lors de tes requêtes, pense à bien dimensionner le Tableau Structuré (le calcul actuel est inexact, car il y a des lignes vides)

Bon courage

Sub verif_maj()
    Sheets("TCD").ListObjects("TBVL_2").QueryTable.Refresh (False)
    MsgBox Range("TBVL_2").Value
End Sub

merci de votre aide cousinhub.

merci pour le conseil pour le tableau (erreur d'étourderie )

pour la macro , j'ai un message d'erreur du type "excel actualise des données essayer plus tard "

pouvez vous aider?

cdt

Re-,

Perso, jamais eu ce type de message...

Un Arrêt/Marche, peut-être?

re,

on ne sait pas combien de temps qu'on doit attendre des millisecondes ou des secondes. Le premier cas, on sait le résoudre avec un "timer", le 2ième avec application.wait

Sub verif_maj()
     Sheets("TCD").ListObjects("TBVL_2").QueryTable.Refresh (False)
     Application.Wait (Now + TimeSerial(0, 0, 5))     'un delai >= 1 sec
     Attendre     'donner un delai (de 0.5 sec)
     MsgBox Range("TBVL_2").Value
End Sub

Sub Attendre()
     t1 = Timer
     t2 = t1 + 0.5     'modifier ce 0.5 (=500 millisec) si nécessaire
     Do
          DoEvents
     Loop While t1 <= Timer And Timer < t2
End Sub

bonjour BsAlv,

en effet cel fonctionne avec ces deux macros.

question:

il faut que pour chaque requêtes je dois mettre :

Sub verif_maj()
Sheets("TCD").ListObjects("TBVL_2").QueryTable.Refresh (False)

Sheets("TCD").ListObjects("TBAge").QueryTable.Refresh (False)

Sheets("TCD").ListObjects("TBPL").QueryTable.Refresh (False)

Sheets("TCD").ListObjects("TBSexe").QueryTable.Refresh (False)

Application.Wait (Now + TimeSerial(0, 0, 5)) 'un delai >= 1 sec
Attendre 'donner un delai (de 0.5 sec)
MsgBox Range("TBVL_2").Value
End Sub

ou il y a une façon plus mécanique de le faire?

merci d'avance à toi

cdt

Re-,

Je reste sceptique quant à l'utilisation du "Wait"....

Mébon....

re,

au lieu de renouveller chaque query, on peut aussi utiliser "thisworkbook.RefreshAll" pour renouveller tout en une fois. (si cela ne cause pas d'autres problèmes).

Puis il faut choisir, soit le "Wait" (avec les doutes de Cousinhub), soit l' "Attendre", je ne sais pas le temps nécessaire, donc essayer plusieurs valeurs et ajouter une sécurité (de 50%?). C'est combien, la valeur choissi ?

Rechercher des sujets similaires à "mise jour macro maj requetes"