Laps de temps VBA

Fermé
Tom - 16 juil. 2012 à 10:28
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 20 juil. 2012 à 15:28
Bonjour,

Je voudrais savoir comment je pourrai dire en VBA "execute cette action toute les 3 minutes 30 secondes". Je voudrais créé une macro qui exécute une action à intervalle de temps régulier.

Merci

9 réponses

g Messages postés 1262 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 15 mai 2017 572
16 juil. 2012 à 10:41
Bonjour,

Vois ici un exemple pour l'enregistrement toutes les x minutes d'une fichier Excel:
http://gerard.g.pagesperso-orange.fr/logexl_09.htm#enregauto
Code à adapter à l'action et au temps.

Cordialement.
0
ok merci, je vais y jeter un oeil
0
J'ai une petite question...

Ce code permet d'actionner un sub à intervalle régulier. Mais peut-on faire de même avec une fonction?

Désolé si ca parait trivial, mais je débute, et j'ai une fonction qui, au changement d'une cellule, ne me renvoi que des zéros, et si je sélectionne la cellule où j'utilise cette fonction, et que je la valide, elle me recalcule toutes les cellules utilisant cette fonction...

Merci
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 16/07/2012 à 11:15
Bonjour,

regarde l'aide excel sur OnTime, il y a un exemple.

eric

edit: ah, j'ai répondu un peu tard....
clem = tom ? et = quoi encore ?
Mais peut-on faire de même avec une fonction?
Il me semble que tu as déjà posé cette question...
0
Merci quand même. Non, je ne suis pas clem.
0
Non je suis une personne totalement indépendante de Tom.

Je ne me rappelle pas avoir posé cette question :$. Je vais me balader sur le forum, quelqu'un doit avoir posté quelque chose du genre :) désolé du dérangement
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
16 juil. 2012 à 11:40
Tu devrais démarrer une nouvelle question plutôt que de te greffer sur celle-ci.
Met le code de ta fonction aussi, car tout dépend de ce qu'elle réalise et de comment tu l'as écrite.

eric
0
Merci je fais ca de suite!
0
Connaitriez-vous la fonction pour rafraichir une page web en VBA?
J'arrive à lancer le navigateur, mais après je ne sais pas comment rafraichir une page.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
Modifié par pijaku le 16/07/2012 à 11:57
Bonjour,
Pour rafraichier une page web, tu peux appuyer sur la touche F5.
Peut être peux tu déclencher ça en utilisant SendKeys :
SendKeys "{F5}", True

Cordialement,
Franck P
0
Merci pjaku, je vais essayer. Par contre, j'ai l'impression que je n'ai pas bien saisi comment fonctionnait OnTime parce que ma macro qui consiste à rafraichir une page web toutes les 3 min 30 s ne fonctionne. Excel me dit que ma macro n'est pas présente dans ce classeur ou que mes macros sont désactivés...
Pour l'instant ma macro ne fait que lancer le navigateur toute les 3 min 30 s, elle ne rafraichit pas vraiment mais déjà ça ne marche pas.

Public MTime As Date

Sub Refresh()

Dim IE As New InternetExplorer
'Chargement d'une page web Google
IE.Navigate "http://www.commentcamarche.net/forum/affich-25605717-laps-de-temps-vba#newanswer"
'Affichage de la fenêtre IE
IE.Visible = True
'On libère la variable IE
IE=Nothing

MTime = Time
Application.OnTime MTime + TimeValue("00:03:30"), "Refresh"

End Sub
0
Une petite erreur dans le code que j'ai posté, il y a un set qui manque. Voici le vrai code, si quelqu'un sait pourquoi ça ne marche pas je lui en serai reconnaissant.

Public MTime As Date

Sub Refresh()

Dim IE As New InternetExplorer
'Chargement d'une page web Google
IE.Navigate "www.youtube.com/watch?v=eVKj3u8JUm0"
'Affichage de la fenêtre IE
IE.Visible = True
'On libère la variable IE
Set IE = Nothing

MTime = Time
Application.OnTime MTime + TimeValue("00:03:30"), "Refresh"

End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
16 juil. 2012 à 14:00
Re,

regarde le post 10 de pijaku...

eric
0
oui mais la le problème est en amont, c'est pourquoi il ne relance pas la macro telle qu'elle est actuellement? Il me dit qu'elle n'existe pas dans ce classeur au bout des 3min 30s...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
16 juil. 2012 à 14:41
Soit pas bouché...
Pour l'instant ma macro ne fait que lancer le navigateur toute les 3 min 30 s
Oui, parce que c'est ce que fait ton code.
Pijaku te propose de lancer le rafraichissement avec sendkeys

eric
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
16 juil. 2012 à 15:00
Salut Eriiic,
Un p'tit relais?

Sur le modèle proposé plus haut par g, essaye ce code (pas testé) :
Public MTime As Date 

Sub Refresh()

Dim IE As New InternetExplorer 
'Chargement d'une page web Google 
IE.Navigate "www.youtube.com/watch?v=eVKj3u8JUm0" 
'Affichage de la fenêtre IE 
IE.Visible = True 
'On libère la variable IE 
Set IE = Nothing 

MTime = Time 
SendKeys "{F5}", True

Application.OnTime MTime + TimeValue("00:03:30"), "Refresh" 

End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
16 juil. 2012 à 15:04
0
Oui je connais, ce cours est vraiment intéressant! Mais je n'arrive pas à m'en sortir dans mon cas malgré tout.
0
Vraiment personne pour me dire comment faire marcher le programme please?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
17 juil. 2012 à 11:38
Ben déjà prend la peine de répondre aux propositions !!!
Voir le du 16 juil. 2012 à 15:00
eric
0
Bonjour eriiicc,

Désolé, cette proposition est passé inaperçu, je n'avais vu que le commentaire croyant que le message du dessus était le mien...
Après test j'obtiens toujours la même chose, voir la capture: http://cjoint.com/?3GrmkQAhX8O

Merci d'avance
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
17 juil. 2012 à 12:38
Ce post était de pijaku.

Pour moi il faut séparer la création de la fenêtre (à faire 1 fois) du rafraichissement.
Le pb avec sendkeys c'est qu'il faut activer la fenêtre en avant plan à chaque fois. Si tu travailles sur le micro en même temps ça risque de devenir pénible.
Sub Refresh()
    AppActivate "titre de ta fenêtre IE"
    MTime = Time
    SendKeys "{F5}", True
    Application.OnTime MTime + TimeValue("00:03:30"), "Refresh"
End Sub

Si c'est pour récupérer des données d'une page web regarde plutôt du coté de 'données / données externes / nouvelle requête sur le web...' qui peut être rafraichie automatiquement.
Pas toujours utilisable, ça dépend de comment est construit le site.
exemple de requête web : https://www.cjoint.com/?BGrmLxnysfp

eric
0
J'ai séparé les 2 comme tu m'as dit, voici la nouvelle macro mais ça m'affiche toujours le même message, même si mon navigateur est en avant plan. J'ai expérimenté sur une page youtube...

Public MTime As Date
Sub Refresh2()

AppActivate "Super Mario 64 - End theme "
MTime = Time
SendKeys "{F5}", True
Application.OnTime MTime + TimeValue("00:00:30"), "Refresh"

End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
17 juil. 2012 à 14:22
Refresh étant un mot-clé vba change son nom, y compris lorsqu'il s'appelle (...+ TimeValue("00:00:30"), "Refresh" )

eric
0
Ah d'accord, inattention de ma part. Sinon, ça à l'air de bien fonctionner :) Même en rétrécissant la fenêtre ça marche!

Merci beaucoup
0
Juste 2 dernières questions: comment je fais pour stopper le processus de rafraichissement sans quitter Excel?
Peut-on programmer un nombre de rafraichissement limite?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
17 juil. 2012 à 18:52
1) Si tu fais F1 sur on time tu auras un exemple complet.
2) il faut que tu mettes un compteur que tu incrémentes dans la boucle. Sselon sa valmeur tu fais ou ne fais pas.

eric
0
Merci eriiic, par contre pour annuler il faut faire une macro indépendante? Voilà ce que j'ai essayé et ça ne marche pas, j'ai aussi essayé sans le MTime.

Public MTime As Date
Sub Annuler()

Application.OnTime EarliestTime:=MTime + TimeValue("00:03:26"), Procedure:="Refresh2", Schedule:=False

End Sub
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
18 juil. 2012 à 17:46
Bonjour,

il faut annuler le précédent temps activé que tu aurais mémorisé.
Mais comme tu veux arreter au bout de x fois, il suffit de tester le compteur et ne pas relancer.
Ca donnerait qcq chose comme ça :
Public MTime As Date, cpt As Long
Sub Refresh2()
    If cpt < 40 Then
        AppActivate "Super Mario 64 - End theme "
        MTime = Time
        SendKeys "{F5}", True
        Application.OnTime MTime + TimeValue("00:00:30"), "Refresh2"
        cpt = cpt + 1
    End If
End Sub

Il faudra peut-être déclarer la variable cpt en Static pour ton compteur, je ne peux pas tester.
Et une autre procédure pour remettre ton compteur à 0 et relancer.
eric
0
Merci, ça marche très bien!
Je l'ai déclaré en static et j'ai rajouté un else cpt=0, ainsi cpt se réinitialise dès que la boucle est finit.

Par contre je veux bien savoir comment on annule le temps précédent dans cet exemple sans passer par une condition, parce que ma tentative précédente est resté vaine...

Autre chose, tu sais si c'est possible de réactiver la fenêtre sur laquelle je travaillais avant chaque AppActivate? ça serait vraiment top si j'arrivais à déjouer ce défaut.

Merci
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
19 juil. 2012 à 14:09
Bonjour,

Par contre je veux bien savoir comment on annule le temps précédent dans cet exemple sans passer par une condition, parce que ma tentative précédente est resté vaine...
Je t'y ai déjà répondu :
il faut annuler le précédent temps activé que tu aurais mémorisé ( et non un nouveau temps calculé).

Autre chose, tu sais si c'est possible de réactiver la fenêtre sur laquelle je travaillais
Et bien refais un appactivate en utilisant le paramètre wait

eric
0