IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] dormir, mais que d'un oeil


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut [VBA-E] dormir, mais que d'un oeil
    mes données boursières arrivent en flux continu par un lien DDE.
    je déclenche des clignotements toutes les deux secondes et je fais un recalcul toutes les 15 secondes.. je voudrais que mon programme attende mes déclenchements à l'heure voulue tout en continuant de recevoir les données de la DDE.
    si je mets "rien", la sub continue à se dérouler en attendant l'appel et fausse la progression, avec SLEEP, WAIT, les données ne sont pas reçues, avec STOP la sub ne redémarre pas...
    y a t il une possibilité?
    merci
    Jean Pierre

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu peux utiliser un "minuteur"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CalculerOnTime() 'Le calcul s'effectuera dans... 15s
         Application.OnTime Now + TimeValue("00:00:15"), "ÇaVaJeCalcule"
    End Sub
     
    Sub ÇaVaJeCalcule()
       'TesCalculs
    End sub
    Ton calcul s'effectuera toutes les 15 secondes

    Merci bbil

    Ajoute une condition, sans quoi ta macro persistera à s'exécuter même si tu arrêtes la macro principale.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut
    ça, je l'ai déja fait, c'est comme ça que je déclenche mes calculs à l'heure voulue.
    mais la macro se déroule pendant ce temps et d'une sub, je retourne à la sub dont elle était partie...pour revenir ensuite...
    bref, tout s'emmèle!

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    bref, tout s'emmèle!
    Mets ton code con démèle ça
    Comme je t'ai dit, les conditions, ça existe.
    Tu reçois des données. Bon !
    Selon la condition qui te convient ou un délai, tu lances la macro ÇaVaJeCalcule. Si tu veux que son exécution ne commence la première fois 2 heures plus tard, paramètre l'appel à CalculerOnTime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call CalculerOnTime("02:00:00)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub CalculerOnTime() 'Le calcul s'effectuera dans... 15s
         Application.OnTime Now + TimeValue(Temps), "ÇaVaJeCalcule"
    End Sub
    Sinon, je te propose autre chose, regarde si le principe d'une mesure du temps qui passe t'inspire quelque chose. Au cas où... on pourra toujours l'adapter
    Sinon... Je ne comprends pas du tout ton problème et là, te reste plus qu'à mettre ton code qu'on soit plusieurs à réfléchir dessus

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 223
    Par défaut
    merci pour ta réponse, je vais essayer d'être plus clair
    si je fais ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton5_Click()
    'initialisation des tracés
    'mise en place des bougies à modifier en fonction des données arrivantes par la DDE
    Call miseajour
    End Sub
    Sub miseajour() 'à lancer toutes les 10''
    'lecture des données arrivantes
    'mise à jour des graphiques
     heureactu = Format(Now, "h:N:S")
    heureclignot = TimeValue(heureactu) + TimeValue(PERIODEMISEAJOUR)
    Application.OnTime TimeValue(heureclignot), "module1.miseajour"
    End Sub
    ça fonctionne, les données arrivent et le recalcul se fait toutes les x secondes
    Maintenant, en plus de ceci, je dois gérer une autre sub avec recalcul toutes les 100 secondes, par ex.
    donc qque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub CommandButton5_Click()
    'initialisation des tracés
    'mise en place des bougies à modifier en fonction des données arrivantes par la DDE
    Call miseajour
    End Sub
    Sub miseajour() 'à lancer toutes les 10''
    'lecture des données arrivantes
    'mise à jour des graphiques
     heureactu = Format(Now, "h:N:S")
    heureclignot = TimeValue(heureactu) + TimeValue(PERIODEMISEAJOUR)
    Application.OnTime TimeValue(heureclignot), "module1.miseajour"
    'toutes les 100'' appeler sub export'
    'puis relancer sub miseajour
    'etc...
    End Sub
     
    Sub export()
    'àfaire toutes les 100"
    End Sub
    avec un compteur, ça ne fonctionne pas
    c'est là que tout se mélange
    Jean Pierre

    (PS j'en profite pour demander comment on fait pour mettre le Tag VBA-E???)

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour la syntaxe, tu n'étais pas tout à fait dans le vrai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub VérifTps()
        'PERIODEMISEAJOUR = "00:00:10" 'pour 10 secondes
        PERIODEMISEAJOUR = "00:01:40" 'pour 100 secondes
        Heureactu = TimeValue(Now)
        Cells(1, 1).Value = Heureactu
        heureclignot = TimeValue(Heureactu) + TimeValue(PERIODEMISEAJOUR)
        Application.OnTime TimeValue(heureclignot), "miseajour"
     
    End Sub
     
    Sub miseajour()
    Cells(2, 1).Value = TimeValue(Now)
    End Sub
    Avant d'adapter, teste ça et dis-nous
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 102
    Dernier message: 17/03/2005, 19h32
  2. mais que fait upper_range() dans un multimap?
    Par porcher dans le forum C++
    Réponses: 7
    Dernier message: 18/02/2005, 22h21
  3. Commencer dans la programmation mais que choisir ?
    Par Invité dans le forum Débuter
    Réponses: 19
    Dernier message: 21/12/2004, 12h10
  4. visual c++ mais que pour winCE
    Par julienx dans le forum MFC
    Réponses: 2
    Dernier message: 10/11/2004, 19h25
  5. Mais que fait static ???
    Par elsargento dans le forum C
    Réponses: 4
    Dernier message: 25/09/2003, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo