Actualisation automatique de données excel (OnTime [Résolu/Fermé]

Signaler
-
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018
-
Bonjour,

J'ai crée un code afin d'actualiser automatiquement tous les x temps les données d'un fichier Excel grâce à ActiveWorkbook.RefreshAll et Application.OnTime Now + TimeValue ("00:10:00"), "UpdateClock. Durant 1j mon code à parfaitement fonctionné que le classeur soit fermé ou ouvert, il se mettait à jour tous les x temps. Cependant, lorsque j'ai réouvert ma session le lendemain, la macro ne fonctionnait plus et j'ai désormais le message d'erreur " Impossible d'exécuter la macro "S:\.......". Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toutes les macros soient désactivées." Ce qui n'est pas le cas étant donnée que mon code fonctionnait parfaitement pendant 1j.

Voici mon code vba si quelqu'un sait où le bug se situe ...

Public Sub Actualisation_de_données()
Application.DisplayAlerts = False
ActiveWorkbook.RefreshAll
NextTick = Now + TimeValue("00:10:00")
Application.OnTime Now + TimeValue("00:10:00"), "UpdateClock"
ThisWorkbook.Save
ThisWorkbook.Close
OnAction = "Feuil1.messagerie"
Application.DisplayAlerts = True
End Sub


1 réponse

Messages postés
23807
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 janvier 2021
6 573
Bonjour,

j'ai désormais le message d'erreur " Impossible d'exécuter la macro "S:\.......".

Pour laquelle des 2 ?
UpdateClock est bien dans le même module ou un module Standard ?

Rien à voir avec ton pb mais 2 choses me gênent :
- tes 2 lignes de code après ThisWorkbook.Close
Pourquoi pas avant si tu veux qu'elles soient exécutées ?
- ton classeur va se rouvrir au bout de 10 min.
Il y a un risque qu'une cellule soit écrasée si qq'un est en train d'écrire et ne s'aperçoit pas qu'il vient de passer en avant-plan non ?
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

En fait je pense que j'ai compris d'où venait le problème, excel cherche à exécuter une macro qui n'existe plus (d'après le message d'erreur), mais comment résoudre ceci ? Telle est la question ...
Messages postés
23807
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 janvier 2021
6 573
Si UpdateClock est bien dans Module1 (?) met ThisWorkbook.Close en commentaire pour voir si ce n'est pas lui qui intervient un peu trop vite.

En fait lorsque je lançait ma macro j'avais un message d'erreur "cette action va annuler une actualisation des données en attente. Voulez-vous continuer ?" du coup après mettre renseigner sur Google j'ai vu que si je mettais les lignes de codes "Application.DisplayAlerts = False ..... Application.DisplayAlerts = True" au début et à la fin de mon code le message disparaitrait, ce qui a été le cas.
Sauf que Application.DisplayAlerts = True risque de ne pas être exécuté s'il est après .Close.
Tu perds tous les autres messages d'alerte...

Donc si je comprend bien, ta technique de rafraîchissement bloque la mise à jour des données.
C'est bien beau de masquer l'alerte, mais tu vas mettre quoi à jour s'il n'y a qu'1/100e de tes données à jour ? Quelque chose m'échappe là...
Et ici encore je me demande si le .close n'y est pas pour qq chose.
Il faut du temps pour exécuter une requête. En plus ça dépend de l'état du réseau à ce moment là, plus ou moins disponible.
Si ça se confirme il faudra attendre la fin du RefreshAll avant de fermer.
Je ne suis pas un spécialiste des requêtes mais pour les autres lecteurs précise quel type de requête tu fais.

Pour l'actualisation, en fait personne n'écrit dans le classeur
Imagine : je suis en train d'écrire dans Word. Ton fichier s'ouvre et se met en avant plan. Ce que je saisissais part dans excel, écrase une cellule, et se ferme dans la foulée.

sur des cellules au dessus de ma requête j'ai écrit mes formules pour avoir les chiffres que je souhaitait avoir (par ex, nombre de commandes par jour (=NB.SI(req_bp2[Date prevue];"="&AUJOURDHUI()))
si [Date prevue] change et que tu es en calcul automatique ta formule se met à jour toute seule normalement non ?
J'ai du mal à voir le lien avec le pb et pourquoi tu parles de ça
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

J'ai résolu le problème en fait le message d'erreur s'affichait parce que ma macro ne s'intitulait pas "UpdateClock" (tout bête qui te fais arracher les cheveux lorsque tu ne trouve pas la solution ^^)

Du coup j'ai le code suivant (dans le module 1) :
Sub UpdateClock()
Application.DisplayAlerts = False
ActiveWorkbook.RefreshAll
Application.OnTime Now + TimeValue("00:00:20"), "UpdateClock"
ThisWorkbook.Save
End Sub

Le soucis c'est que la macro ne s'effectue plus lorsque le classeur est fermé alors que je pensait que l'événement OnTime persistait même classeur fermé ... As-tu une solution ?

sur des cellules au dessus de ma requête j'ai écrit mes formules pour avoir les chiffres que je souhaitait avoir (par ex, nombre de commandes par jour (=NB.SI(req_bp2[Date prevue];"="&AUJOURDHUI()))
si [Date prevue] change et que tu es en calcul automatique ta formule se met à jour toute seule normalement non ?
J'ai du mal à voir le lien avec le pb et pourquoi tu parles de ça
C'était juste un exemple mais j'ai d'autres données qui se mette à jour, d'où l'utilité de ma macro :)
Messages postés
23807
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
18 janvier 2021
6 573
Si, il se rouvre pour exécuter la macro.
Encore faut-il qu'elle ait été lancée au moins une fois pour que la programmation suivante soit enregistrée.
Mais si elle est lancée plusieurs fois les timer vont se cumuler, et à terme excel risque de passer son temps à faire tes mises à jour.
Je te propose de supprimer une éventuelle exécution en attente avant d'en programmer une nouvelle :
Option Explicit

Sub UpdateClock()
    'Application.DisplayAlerts = False
    ActiveWorkbook.RefreshAll
    On Error Resume Next
    Application.OnTime [t_sav], "UpdateClock", False  'supprime la programmation si elle n'a pas été effectuée
    On Error GoTo 0
    ThisWorkbook.Names.Add "t_sav", Now + TimeValue("00:00:20") ' sauvegarde t prochain
    Application.OnTime [t_sav], "UpdateClock" ' programme t prochain
    ThisWorkbook.Save
End Sub



Et tu ne peux pas laisser Application.DisplayAlerts = False tout seul. C'est tout excel qui est concerné, pas seulement les messages de ce fichier.
Soit tu le supprimes, soit tu le rétablis avec True,
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

Super, merci beaucoup pour ton aide, tout fonctionne parfaitement !