Faire défiler un fichier excel dans une macro qui s'execute toutes les x minutes
empereurtilleul
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
empereurtilleul -
empereurtilleul -
Bonjour,
Je voudrais faire défiler un fichier excel en utilisant la fonction largescroll qui se situe dans une macro qui elle se lancent toutes les 15 minutes, voici mon code main:
Dim uneheure
Dim heure
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
Le problème que j'ai, c'est que je ne vois pas en temps réel le defilement, or c'est ce que je souhaite.
Je suppose qu'il me manque une fonction que je n'arrive pas à trouver.
Merci d'avance
Je voudrais faire défiler un fichier excel en utilisant la fonction largescroll qui se situe dans une macro qui elle se lancent toutes les 15 minutes, voici mon code main:
Dim uneheure
Dim heure
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
Le problème que j'ai, c'est que je ne vois pas en temps réel le defilement, or c'est ce que je souhaite.
Je suppose qu'il me manque une fonction que je n'arrive pas à trouver.
Merci d'avance
A voir également:
- Faire défiler un fichier excel dans une macro qui s'execute toutes les x minutes
- Fichier bin - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
6 réponses
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
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...
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
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