Actualisation automatique de données excel (OnTime

Résolu/Fermé
Lucie - Modifié le 29 mai 2018 à 08:51
Lucie_6
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018
- 30 mai 2018 à 08:16
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


A voir également:

1 réponse

eriiic
Messages postés
24393
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
7 078
Modifié le 29 mai 2018 à 09:17
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
Bonjour Eric, merci pour ta réponse !

Tout le code écrit ci-dessus est dans le même module (module1).

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.

Pour l'actualisation, en fait personne n'écrit dans le classeur, ce sont des formules prenant les données d'une requête qui s'actualise automatiquement, du coup c'est pour que les résultats des formules s'actualisent, eux aussi automatiquement. Je m'explique, une requête est déposé par le service info sur le réseau, elle s'actualise et écrase les anciennes données par les nouvelles toutes les x minutes. J'ai créer un fichier excel en insérant une requête via un fichier CSV (requête qui est déposé sur le réseau) et 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())) et ce sont ces formules qui doivent se mettre à jour automatiquement lorsque la requête se met elle à jour. (je ne sait pas si j'ai été assez clair :) ). Ce que je ne comprend pas c'est que mon code fonctionnait, puis d'un coup, plus rien ... Et même quand j'essaie d'ouvrir un fichier excel vierge puis écrire une macro test histoire de voir si le pb vient de mon fichier ou d'Excel ça me met le même message d'erreur " Impossible d'executer la macro ... " ...
0
Lucie_6
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

29 mai 2018 à 09:41


Voici la fenêtre VBA avec le message d'erreur qui s'affiche lors de la ré ouverture du fichier une fois l'exécution du code (pour du coup le ré exécuter vu que c'est une boucle et que l'évènement OnTime persiste)
0
Lucie_6
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

29 mai 2018 à 09:50
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 ...
0
eriiic
Messages postés
24393
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 mai 2022
7 078
29 mai 2018 à 12:11
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
0
Lucie_6
Messages postés
4
Date d'inscription
mardi 29 mai 2018
Statut
Membre
Dernière intervention
30 mai 2018

29 mai 2018 à 14:24
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 :)
0