Faire défiler un fichier excel dans une macro qui s'execute toutes les x minutes
Fermé
empereurtilleul
Messages postés
26
Date d'inscription
jeudi 22 avril 2021
Statut
Membre
Dernière intervention
15 décembre 2023
-
19 mai 2021 à 14:08
empereurtilleul - 31 mai 2021 à 15:34
empereurtilleul - 31 mai 2021 à 15:34
A voir également:
- Faire défiler un fichier excel dans une macro qui s'execute toutes les x minutes
- Fichier rar - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment faire un fichier pdf - Guide
6 réponses
Utilisateur anonyme
Modifié le 19 mai 2021 à 16:58
Modifié le 19 mai 2021 à 16:58
Bonjour,
Pour poster un code plus lisible, il faut utiliser les balises appropriées.
Tous les détails ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je ne sais pas si vous utilisez la variable uneheure dans vos Call mais sinon, elle ne sert à rien.
Par contre, une fois les appels effectués (actuStock, Affichage et Sauvegarde), on devrait enter dans la boucle FOR qui devrait faire défiler le contenu de votre onglet de 14 pages (LargeScroll) vers le bas avant de revenir à la position de départ.
C'est donc dans cette boucle que vous pouvez faire passer la temporisation de 5 secondes (je suppose que c'était juste pour le test) à 15 minutes : TimeSerial(0, 15, 0).
Mais, est-ce que vous entrez bien dans cette boucle ?
Pour poster un code plus lisible, il faut utiliser les balises appropriées.
Tous les détails ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Je ne sais pas si vous utilisez la variable uneheure dans vos Call mais sinon, elle ne sert à rien.
Par contre, une fois les appels effectués (actuStock, Affichage et Sauvegarde), on devrait enter dans la boucle FOR qui devrait faire défiler le contenu de votre onglet de 14 pages (LargeScroll) vers le bas avant de revenir à la position de départ.
C'est donc dans cette boucle que vous pouvez faire passer la temporisation de 5 secondes (je suppose que c'était juste pour le test) à 15 minutes : TimeSerial(0, 15, 0).
Mais, est-ce que vous entrez bien dans cette boucle ?
Voici le code avec la manip et le code mis à jour (j'ai enlever la variable heure qui ne me servait à rien):
L'intérêt de "
Après qu'il appelle ActuStock, Affichage et Sauvegarde.
Il lance bien la boucle FOR avec le LargeScroll avec un intervalle de 5 secondes grâce à "
Néanmoins, je ne vois pas sur Excel le défilement en temps réel, or c'est pour l'afficher sur une télé donc il faut voir ce defilement.
Si je lance
sans être dans la fonction main, ça marche, c'est ce que je ne comprend pas
Dim uneheure Sub Main() uneheure = TimeSerial(Hour(Time), Minute(Time) + 15, Second(Time)) Call ActuStock Call Affichage Call Sauvegarde Dim i As Integer For i = 1 To 14 Application.Wait Time + TimeSerial(0, 0, 5) ActiveWindow.LargeScroll down:=1 Next ActiveWindow.LargeScroll up:=14 End Sub
L'intérêt de "
uneheure = TimeSerial(Hour(Time), Minute(Time) + 15, Second(Time))" est de lancer le code toutes les 15 minutes
Après qu'il appelle ActuStock, Affichage et Sauvegarde.
Il lance bien la boucle FOR avec le LargeScroll avec un intervalle de 5 secondes grâce à "
Application.Wait Time + TimeSerial(0, 0, 5)".
Néanmoins, je ne vois pas sur Excel le défilement en temps réel, or c'est pour l'afficher sur une télé donc il faut voir ce defilement.
Si je lance
Dim i As Integer For i = 1 To 14 Application.Wait Time + TimeSerial(0, 0, 5) ActiveWindow.LargeScroll down:=1 Next ActiveWindow.LargeScroll up:=14 End Sub
sans être dans la fonction main, ça marche, c'est ce que je ne comprend pas
Utilisateur anonyme
19 mai 2021 à 19:35
19 mai 2021 à 19:35
Bonjour,
uneheure = TimeSerial(Hour(Time), Minute(Time) + 15, Second(Time)) permet juste d'initialiser la variable uneheure avec le temps actuel décalé de 15 minutes.
Cette écriture ne permet pas de lancer le code toutes les 15 minutes.
Si cette variable n'est utilisée dans un appel du type Wait une heure, elle ne sert pas plus que l'autre.
On ne sait pas ce qui se passe dans Call ActuStock puis Call Affichage et enfin Call Sauvegarde mais dès que vous sortez de ces procédures vous devriez basculer sur le défilement temporisé de 5 secondes..
=> Assurez-vous que <gras>ActiveWindow est bien sur la feuille où vous souhaitez être</gras> !
Il faut donc vérifier que vous entrez bien dans le For : mettez un point d'arrêt ou un msgbox ("quelque chose") à l'intérieur de la boucle pour être sûr.
Si oui et si j'ai bien compris votre intention votre code devrait être :
=> Suppression de uneheure et timeSerial(0, 15, 0)
Si ça coince toujours, il serait souhaitable que nous ayons un exemple de votre fichier avec toutes vos feuilles et macros dès lors qu'il n'y aura plus de données confidentielles dedans...
uneheure = TimeSerial(Hour(Time), Minute(Time) + 15, Second(Time)) permet juste d'initialiser la variable uneheure avec le temps actuel décalé de 15 minutes.
Cette écriture ne permet pas de lancer le code toutes les 15 minutes.
Si cette variable n'est utilisée dans un appel du type Wait une heure, elle ne sert pas plus que l'autre.
On ne sait pas ce qui se passe dans Call ActuStock puis Call Affichage et enfin Call Sauvegarde mais dès que vous sortez de ces procédures vous devriez basculer sur le défilement temporisé de 5 secondes..
=> Assurez-vous que <gras>ActiveWindow est bien sur la feuille où vous souhaitez être</gras> !
Il faut donc vérifier que vous entrez bien dans le For : mettez un point d'arrêt ou un msgbox ("quelque chose") à l'intérieur de la boucle pour être sûr.
Si oui et si j'ai bien compris votre intention votre code devrait être :
Sub Main() Call ActuStock Call Affichage Call Sauvegarde Dim i As Integer For i = 1 To 14 Application.Wait Time + TimeSerial(0, 15, 0) ActiveWindow.LargeScroll down:=1 Next ActiveWindow.LargeScroll up:=14 End Sub
=> Suppression de uneheure et timeSerial(0, 15, 0)
Si ça coince toujours, il serait souhaitable que nous ayons un exemple de votre fichier avec toutes vos feuilles et macros dès lors qu'il n'y aura plus de données confidentielles dedans...
empereurtilleul
Messages postés
26
Date d'inscription
jeudi 22 avril 2021
Statut
Membre
Dernière intervention
15 décembre 2023
21 mai 2021 à 09:50
21 mai 2021 à 09:50
Bonjour,
Voici le lien de mon excel:
https://www.cjoint.com/c/KEvhWMnzzyE
En effet, ca devrait marcher mais je ne vois pas le defilement en temps reel. Hors, je veux mettre ce fichier sur une télé et donc qu'il defile constamment.
La fonction actu va chercher des données sur un autre fichier que je ne peux pas transmettre malheureusement.
Cordialement
Voici le lien de mon excel:
https://www.cjoint.com/c/KEvhWMnzzyE
En effet, ca devrait marcher mais je ne vois pas le defilement en temps reel. Hors, je veux mettre ce fichier sur une télé et donc qu'il defile constamment.
La fonction actu va chercher des données sur un autre fichier que je ne peux pas transmettre malheureusement.
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
22 mai 2021 à 09:19
22 mai 2021 à 09:19
Bonjour,
Le code que vous aviez mis en ligne est relativement différent de celui du fichier : il manquait notamment l'instruction Application.OnTime uneheure, "Main" pour comprendre l'intérêt de la variable uneheure. En outre l'algorithme utilisé est différent...
Pour en revenir au problème : la procédure Affichage contient l'instruction Application.ScreenUpdating = False qui interdit le rafraîchissement de l'écran et comme il n'est pas réautorisé à la fin (Application.ScreenUpdating = True), ceci explique cela.
Il n'y a donc plus qu'à corriger comme ceci à la fin de Sub Affichage() :
Le code que vous aviez mis en ligne est relativement différent de celui du fichier : il manquait notamment l'instruction Application.OnTime uneheure, "Main" pour comprendre l'intérêt de la variable uneheure. En outre l'algorithme utilisé est différent...
Pour en revenir au problème : la procédure Affichage contient l'instruction Application.ScreenUpdating = False qui interdit le rafraîchissement de l'écran et comme il n'est pas réautorisé à la fin (Application.ScreenUpdating = True), ceci explique cela.
Il n'y a donc plus qu'à corriger comme ceci à la fin de Sub Affichage() :
Loop Until li2 >= lifin Application.ScreenUpdating = True End Sub