Hello
J'ai une macro qui se relance elle-même toutes les 5 mn avec un Excel.Application.OnTime Now + TimeValue(TempsTraitement), "MaMacro"
Elle est de la forme (pour simplifier le principe) :
Mon problème :
Si un autre utilisateur modifie le fichier source à 14:00:00
Ma macro se lance par exemple à 14:02:00 -> Je ne vois pas la bonne valeur de B1 !
Mais 5 mn plus tard à 14:07:00, au relancement automatique, c'est OK.
Je soupçonne la chose suivante :
Le Calculate n'a pas eu le temps de se terminer, que déjà j'affiche la MsgBox. Elle a donc encore l'ancienne valeur de B1, car l'update n'est pas fini.
Mais bien entendu, 5 mn plus tard, c'est bon !
J'ai 3 idées de soluce
1- Ca pourrait être de faire une pause dans la macro après le Calculate, pour laisser le temps du recalcul avant d'afficher la MsgBox.
J'ai essayé Application.Wait Time + TimeSerial(0, 0, 2), mais ça bloque l'Excel pendant ce temps ...
Bof bof ...
2- Autre soluce : peut-être y a-t-il moyen de ne passer à la MsgBox que quand l'update est fini. VBA a t-il un marqueur de fin d'update ? Du genre "If UpdateComplete=True then ...."
3- Enfin :
Au lieu de lancer ma macro au bout de 5 mn, avec son update :
Je crée une MacroUpdate comprenant les deux lignes de UpdateLink et Calculate
je supprime ces lignes de maMacro, et j'ajoute un OnTime lançant MacroUpdate dans 4:30
Qu'en pensez-vous ? Une préférence ou une autre idée ?
J'ai une macro qui se relance elle-même toutes les 5 mn avec un Excel.Application.OnTime Now + TimeValue(TempsTraitement), "MaMacro"
Elle est de la forme (pour simplifier le principe) :
VB:
Sub MaMacro()
'Mise à jour des données de MonClasseur.maFeuille à partir d'un FichierSource que d'autres utilisateurs peuvent modifier
ThisWorkbook.UpdateLink Name:="D:\\MaFeuilleExcelSource.xls", Type:=xlExcelLinks
ThisWorkbook.Sheets("maFeuille").Range("B1").Calculate
'J'affiche B1 de maFeuille qui a peut-être changé (grâce au Calculate)
MsgBox ThisWorkbook.Sheets("maFeuille").Range("B1").Value
Excel.Application.OnTime Now + TimeValue("00:05:00"), "MaMacro"
End Sub
Mon problème :
Si un autre utilisateur modifie le fichier source à 14:00:00
Ma macro se lance par exemple à 14:02:00 -> Je ne vois pas la bonne valeur de B1 !
Mais 5 mn plus tard à 14:07:00, au relancement automatique, c'est OK.
Je soupçonne la chose suivante :
Le Calculate n'a pas eu le temps de se terminer, que déjà j'affiche la MsgBox. Elle a donc encore l'ancienne valeur de B1, car l'update n'est pas fini.
Mais bien entendu, 5 mn plus tard, c'est bon !
J'ai 3 idées de soluce
1- Ca pourrait être de faire une pause dans la macro après le Calculate, pour laisser le temps du recalcul avant d'afficher la MsgBox.
J'ai essayé Application.Wait Time + TimeSerial(0, 0, 2), mais ça bloque l'Excel pendant ce temps ...
Bof bof ...
2- Autre soluce : peut-être y a-t-il moyen de ne passer à la MsgBox que quand l'update est fini. VBA a t-il un marqueur de fin d'update ? Du genre "If UpdateComplete=True then ...."
3- Enfin :
Au lieu de lancer ma macro au bout de 5 mn, avec son update :
Je crée une MacroUpdate comprenant les deux lignes de UpdateLink et Calculate
je supprime ces lignes de maMacro, et j'ajoute un OnTime lançant MacroUpdate dans 4:30
VB:
Excel.Application.OnTime Now + TimeValue("00:04:30"), "MacroUpdate"
Excel.Application.OnTime Now + TimeValue("00:05:00"), "maMacro"
Qu'en pensez-vous ? Une préférence ou une autre idée ?
Dernière édition: