Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Actualiser les données périodiquement
Dans ce nouveau volet
VBA Excel, nous allons découvrir une astuce intéressante dans le cas par exemple, d'
applications connectées à des données externes. Il est question de gérer des
intervalles de temps, pour forcer l'
actualisation des données de la feuille Ã
incréments réguliers.
Sur l'exemple illustré par la capture, nous simulons une
application connectée à Internet pour récolter des
valeurs boursières. En réalité et pour l'exemple, les montants sont ici générés aléatoirement grâce à la
fonction Excel Alea.Entre.Bornes. Sur la droite de la feuille, l'utilisateur saisit un
intervalle de temps en
secondes. Il clique ensuite sur le
bouton Actualiser. Dès lors, les données sont rafraichies à chaque fois que l'intervalle est atteint et ce, tant que l'utilisateur n'a pas cliqué sur le
bouton Figer pour
stopper la boucle de temps. En parallèle, vous notez qu'un graphique rend compte visuellement des évolutions régulières des données.
Classeur Excel à télécharger
Pour la découverte de cette astuce, nous suggérons d'appuyer les travaux sur un
classeur Excel offrant notamment ces données générées aléatoirement.
Nous découvrons les données numériques à actualiser en ligne 4. Un graphique les représente juste en-dessous. Sur la droite et plus précisément en
cellule J5, l'utilisateur doit saisir un
intervalle de temps en
secondes pour déterminer la
fréquence de l'actualisation. Juste en-dessous, un premier bouton doit permettre de lancer le processus de
mise à jour à intervalles réguliers. Un second (Figer) doit permettre de stopper ce processus.
Les procédures des boutons
Nous allons le découvrir, le travail est déjà quelque peu avancé. Les boutons sont déjà associés à des procédures de code.
- Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
Une
variable publique et
deux procédures existent. La
variable publique Prochain est typée comme une
date. Elle doit représenter l'
heure précise à laquelle le prochain événement doit intervenir.
Dim Prochain As Date
Sub Actualiser()
End Sub
Sub Figer()
End Sub
C'est cette heure à la seconde près que nous devrons réactualiser périodiquement pour générer un processus récursif respectant les
paliers de temps. Les deux procédures (Actualiser et Figer) sont respectivement associées aux deux boutons de la feuille.
Imposer le recalcul
Comme nous l'avons dit et comme il s'agit d'une simulation, pour faire varier les valeurs numériques générées aléatoirement, nous avons tout d'abord besoin d'imposer le recalcul de la feuille.
- Dans les bornes de la procédure Actualiser, ajouter l'instruction VBA suivante :
...
Worksheets("Evolution").Calculate
...
Grâce au nom de la feuille passé en paramètre de l'
objet Worksheets, nous pointons sur la
feuille active. Grâce à sa
méthode Calculate, nous ordonnons le recalcul de toutes ses formules. Grâce à une astuce et nous le verrons, cette
fonction Actualiser va se mordre la queue. Elle va s'appeler récursivement pour réclamer le recalcul Ã
intervalles de temps réguliers.
Créer la boucle de temps
Maintenant, pour créer la
boucle de temps capable d'imposer l'exécution périodique de cette
fonction Actualiser, nous devons commencer par définir l'intervalle. Par rapport au temps qu'il est à chaque appel, nous devons ajouter le
nombre de secondes défini en
cellule J5.
- A la suite du code de la procédure, ajouter les deux instructions VBA suivantes :
...
Prochain = Now + TimeValue("00:00:" & Range("J5").Value)
Application.OnTime Prochain, "Actualiser"
...
C'est naturellement la
variable publique prochain que nous affectons. Grâce à la
fonction TimeValue, nous générons une impulsion temporelle en secondes. Nous lui passons le début au format heure ("00:00:") avec les heures et les minutes figées à zéro. Puis, nous lui ajoutons l'information définie par l'utilisateur en secondes (& Range("J5").Value). Cet incrément, nous l'ajoutons au temps qu'il est. Cette information est renvoyée par la
fonction VBA Now.
Dès lors, nous exploitons le
gestionnaire d'événement OnTime de l'
objet Application. Nous l'avions découvert à l'occasion de l'
astuce VBA Excel consistant à créer un
gestionnaire de tâches. Nous lui indiquons à quel moment se déclencher et les actions à exécuter (Actualiser). C'est ainsi, jusqu'à ordre contraire, que cette fonction va s'appeler récursivement pour ordonner le
recalcul des formules de la feuille Ã
intervalles de temps réguliers.
Arrêter la boucle de temps
Pour finir, si l'utilisateur clique sur le
bouton Figer, nous devons stopper le processus d'actualisation des données. Pour cela, nous devons de nouveau exploiter le
gestionnaire OnTime mais avec un paramètre supplémentaire.
- Dans les bornes de la procédure Figer, ajouter l'instruction VBA suivante :
...
Application.OnTime Prochain, "Actualiser", , False
...
Nous exploitons de nouveau le
gestionnaire OnTime sur le même processus (Actualiser) pour interrompre la
boucle de temps (False) au prochain incrément (Prochain). Ce quatrième paramètre réglé à false concerne en effet la programmation de l'événement (schedule).
Il est maintenant temps de tester notre application d'actualisation périodique des données.
- Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
- En cellule J5, saisir un intervalle en secondes, comme par exemple 3,
- Puis, cliquer sur le bouton Actualiser,
Comme vous pouvez l'apprécier, toutes les 3 secondes les données des transactions sont
mises à jour et le graphique qui les représente, s'ajuste.
Si vous cliquez sur le bouton Figer, le
processus d'actualisation est automatiquement stoppé.