Faire défiler un fichier excel dans une macro qui s'execute toutes les x minutes

Signaler
Messages postés
9
Date d'inscription
jeudi 22 avril 2021
Statut
Membre
Dernière intervention
2 juin 2021
-
 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

6 réponses

Messages postés
403
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 juin 2021
78
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 ?
Voici le code avec la manip et le code mis à jour (j'ai enlever la variable heure qui ne me servait à rien):

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
Messages postés
403
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 juin 2021
78
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 :

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...
Messages postés
9
Date d'inscription
jeudi 22 avril 2021
Statut
Membre
Dernière intervention
2 juin 2021

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
Messages postés
403
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
16 juin 2021
78
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() :
Loop Until li2 >= lifin
Application.ScreenUpdating = True
End Sub
C'était exactement ça, merci beaucoup!

Sauriez-vous comment compter le nombre de chose qui est en Ok = False. Est-ce possible de créer un compteur pour cela?

Merci d'avance,