Actualisation requête à un horodatage précis

Bonjour,

Avant tout, je débute en VBA, alors merci pour votre indulgence...

Exposé du problème:
J’ai un tableau qui se rempli de données présente sur le WEB à l’aide d’une requête Power Query .
J’ai besoin d’actualiser cette requête 1 minute précisément après sa diffusion qui à lieu toutes les 5 minutes à un horodatage strict.
Les diffusions des données web étant exactement à la minute 0, 5,10,15,20,25 etc., je dois lancer les actualisations de ma requête à la minute 6,11,16,21 etc. (par exemple données diffusées à 14H15 recueillie par une requête à 14H16).
Ce tableau permet de déclencher des Alertes pour une action avant que la nouvelle série de données n'arrivent. Ma requête qui est actuellement automatiquement lancée toutes les 5 minutes à partir de l’ouverture du classeur, s’exécute toutes les 5 minutes mais pas forcément à la minute 1, mais 2 ou 3 voir pire à la minute 4. Donc l’actualisation des données arrivent souvent trop tard pour que ce tableau d’alerte soit efficace.
La commande “actualiser tout” ne permet pas de réinitialiser le compte à rebours de l’actualisation automatique (réglée toutes les 5 minutes).
A moins d'ouvrir le classeur à une occurrence horaire précise cela est très aléatoire.

Ma Question :
Existe t’il un moyen d’initialiser ou de réinitialiser la tempo de l’actualisation automatique d'une requête Power Query dans Excel?
Ou Peut-on, en Code VBA déclencher 12 fois par heure la requête, de façon à ce qu’elle s’exécute à partir de la prochaine occurrence aux minutes 1/6/11/16/21/26/31/36/41/46/51/56 de chaque heure?

Merci pour vos précieux conseils
Cordialement
Rv

Bonsoir,

ma première idée est la suivante : à l'ouverture du classeur on attend d'être à 06, 11, 16, 21, 26, 31, 36, 41, 46, 51 ou 56 de l'heure d'ouverture avant de lancer la boucle de toutes les 5 minutes.

Donc on récupère l'heure d'ouverture, si 17 minutes c'est trop tard pour le 16, on patiente donc 5 minutes pour déclencher la boucles des 5 minutes, qui sera donc lancée à 22.
Si on ouvre le classeur à 20, c'est trop tôt pour le 21, on attend alors 22

On aura donc un style de :
Application.OnTime TimeValue("17:22:00"), "Labouclede5"

Labouclede5 elle contiendra une annulation du ontime qui l'a lancée: Application.OnTime EarliestTime:=TimeValue("17:22:00"), Procedure:="Labouclede5", Schedule:=False et elle lancera un nouveau ontime qui s'appelera toutes les 5 minutes.

A voir si l'annulation est à faire vu que le "départ" est à une heure bien précise !

maintenant le 17:22:00 est à transformer en variable afin de le calculer en fonction de l'heure d'ouverture du fichier et la mon idée s'arrête... désolé !

@ bientôt

LouReeD

Bonjour à tous

Ceci que j'ai testé semble OK

Sub Rrefresh()
    newHour = Hour(Now)
    newMinute = WorksheetFunction.Ceiling(Minute(Now), 5)
    newSecond = 0
    heure = TimeSerial(newHour, newMinute, newSecond)

    Application.OnTime TimeValue(heure), "Rrefresh2"
    For i = 5 To 480 Step 5
        waitTime = heure + TimeValue("00:0" & i & ":00")
        Application.Wait waitTime
        Rrefresh2
    Next
End Sub
Sub Rrefresh2()
    [TableauRésultat].ListObject.QueryTable.Refresh
End Sub

Adapter le nom du tableau résultant de la requête

Bonjour,

Merci beaucoup pour vos réponses qui m'ont permis de creuser les pistes pour arriver à la solution que j'ai trouvé et qui fonctionne comme je le souhaite.

Pour ceux qui souhaiteraient savoir comment j'ai fais voici ma solution. (Qui ne sera peut être pas la meilleurs pour les puristes mais qui répond à mon besoin).

J'ai tout d'abord crée une cellule "Drapeau" en position Y34 pour savoir si on est dans la minute 1 ou 6 au moment du calcul de la feuille.

Celle-ci contient la formule:

=SI(DROITE(TEXTE(MAINTENANT()-ENT(MAINTENANT());"hh-mm");1)="2";"MAJ";SI(DROITE(TEXTE(MAINTENANT()-ENT(MAINTENANT());"hh-mm");1)="7";"MAJ";"ATT"))

Cette cellule contient donc Soit "MAJ" si on est dans la minute 1 ou 6 et "ATT" pour les autres minutes.

En VBA à l'ouverture du classeur, je demande d'activer les macros et lance la macro Synchro avec le code suivant:

Private Sub Workbook_Open()
MsgBox "Bonjour, Activez les macros si le message d'avertissement apparait."
Call Synchro
End Sub

Ma macro Synchro contient le code suivant:

Public Sub Synchro()
Dim var As Variant
Dim var2 As Variant
var = Range("Y34").Value
var2 = Range("P34").Value
Calculate ' calcul du classeur pour rafraichir toutes les 5 secondes le calcul des minutes dans la cellule Y34
If var = "ATT" Then
Range("P34").Value = "Synchronisation en cours veuillez patienter "
Application.OnTime Now + TimeValue("00:00:05"), "Synchro"

'Toutes les 5 secondes jusqu'à ce que ma cellule Y34 contienne "MAJ"

Exit Sub

End If
On Error Resume Next
' Si on arrive là c'est que l'on est dans "la bonne minute"
Application.OnTime Now, Procedure:="Synchro", Schedule:=False 'j'arrête la boucle des 5 secondes
Call Actualisation_Données 'Je lance ma macro pour l'actualisation de mes données
End Sub

Ma macro Actualisation_Données Contient le code:

Sub Actualisation_Donnée()
ActiveWorkbook.Connections("Requête - Données").Refresh
Application.OnTime Now + TimeValue("00:05:00"), "Actualisation_Donnée"
Range("P34").Value = "Données EN COURS DE CHARGEMENT"
On Error Resume Next
End Sub

Avec la fonction "Application.OnTime Now + TimeValue("00:05:00")"; l'actualisation de la requête se fera toutes les 5 minutes précisément jusqu'à la fermeture du classeur.

Voilà si cela peut certaines personnes...

Encore merci pour vos réponses

Cordialement

Hervé

Rechercher des sujets similaires à "actualisation requete horodatage precis"