Temps reel

Résolu
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010 - 9 févr. 2010 à 16:21
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 févr. 2010 à 15:07
j'ai fait une macro Vba pour excel, qui est sensé tourner en temps reel en utilisant une application OnTime cependant excel finit par envoyer un message d'erreur et se ferme tout seul
Quelqu peut il me proposer une alternative ?

45 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
17 févr. 2010 à 11:50
Ce n'est pas du tout ainsi que je voyais les choses !
Tel que tu t'y prends là, en effet, tu retombes exactement dans les cas précédents puisque ton code lui-même modifie tes données et que ton évènement Change se relance donc sur lui-même systématiquement.
Ce n'est pas du tout le mécanisme dont je t'ai parlé ...
Laisse tes instructions dans la procédure où elles étaient ...

Dans ton évènement Change :
Private Sub Worksheet_Change(ByVal Target As Range) 
  stratl
end sub

Dans ta procédure startl :
Sub strat1()
  Application.EnableEvents = False  ' <<<<<<ici (pour inhiber l'évènement Change et éviter que ta procédure elle-mêne le relance)
Dim x As Variant
Dim xm As Variant
Dim xp As Double
Dim xi As Variant

'etc... etc...

Dim t As Variant
Dim poidsr As Double
Dim datei As Date

x = Workbooks("test").Worksheets("test1").Range("D7").Value


' etc etc....

  Call position(x, xm, xi, xp, poids, pos, compteur, nom, LQ, PLQi, BQ, PBQi, t, poidsr)

 Application.EnableEvents = True (pour réautoriser lk'évènement Change maintenant que ta proc est terminée) 
End sub

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
17 févr. 2010 à 15:07
RTD n'est à ma connaissance pas une fonction, mais un objet (que je n'ai jamais utilisé ... je ne suis qu'un débutant en VBA en dépit des apparences ... et ne peux donc t'en parler valablement.)
Si l'objet de la présente discussion est résolu ===>>> clique sur le tag "réponse acceptée" (en regard de la réponse adéquate) et passe à un nouveau sujet à propos de RTD (quelqu'un aura alors peut-être la possibilité de te renseigner sur cette AUTRE question).

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
NHenry Messages postés 15144 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 juillet 2024 159
9 févr. 2010 à 21:30
Bonjour,

Quel message d'erreur ?

Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
9 févr. 2010 à 21:33
Bonjour,
1) tu es ici dans le tghème VB6 et non VBA !
2) sans ton code (celui qui appelle la procédure définie par application.ontime et celui de la procédure ainsi appelée, ma foi... il faudrait être devin )

3) et quand et comment arrêtes-tu l'exécuition de cetyte procédure ?
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
9 févr. 2010 à 21:40
J'appelle par ailleurs ton attention sur la signification de "temps réel"... (c'est du sérieux que ne saurait gérer Windows ... Et encore moins Application.OnTime qui exécutera à intervalles définis et non inférieurs à une seconde ...)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010
10 févr. 2010 à 17:53
je viens de m'inscrire sur le Forum donc désolé si je me suis trompé de thème.

Effectivement quand je dis temps reel je veux dire de façon périodique (en fait toutes les trentes secondes ça suffit) et ce pendant toute la journée.
j'avoue que je n'ai pas de procedure d'arrêt, je sais qu'il en faut une, le problème c'est qu'au bout d'une heure, de toute façon, excel se ferme
avec l'erreur d'éxécution 9 qui s'affiche

Voilà
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
10 févr. 2010 à 20:52
2) sans ton code (celui qui appelle la procédure définie par application.ontime et celui de la procédure ainsi appelée, ma foi... il faudrait être devin )

Il est si secret, ce code que tu ne nous as toujours pas montré ?

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
NHenry Messages postés 15144 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 juillet 2024 159
10 févr. 2010 à 21:06
Bonjour,

Tu as essayé de déboguer ? (Quand il y a une erreur en VBA, tu peux aussi déboguer ton code)

Erreur 9 : indice en dehors de la plage

Tu accède peut être à un tableau et tu tapes hors des dimensions de celui-ci ?

Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
10 févr. 2010 à 21:42
Bonjour, NHenry,
Et rien ne prouve d'ailleurs que Application.Ontime soit là le responsable (sauf si, dans la procédure qu'il déclenche périodiquement et que l'on ignore encore puisqu'aucun code n'a été montré , il modifie des indices ...)
Moi, ma boule de cristal n'a pas encore été réparée. Et la tienne ? En moins mauvais état ?

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
NHenry Messages postés 15144 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 juillet 2024 159
10 févr. 2010 à 21:59
Ben, j'en trouve assez facilement :)


Certes, ce n'est pas du cristal, mais à chacun ses moyens :D

Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
10 févr. 2010 à 22:03
Ouais...
Bref... A défaut que le demandeur ne se décide (enfin) à nous parler plus concrètement et à nous montrer le code qu'on lui demande, qu'il continue à en faire à sa tête, mais qu'il se dépatouille alors seul ! (on ne va tout de même pas pleurer pour qu'il nous aide à l'aider ... c'est sûr !)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010
15 févr. 2010 à 09:54
Désolé pour le manque d'information mais c'est un programme que je fais dans mon stage que je ne fais qu en debut de semaine (et donc je n'ai pas accès à mon ordi de bureau en fin de semaine bref). voici le code c'est evidemment pas de la grande programmation j'accepte donc volontier toutes les critiques constructives:


Sub strat1()
Dim x As Variant
Dim xm As Variant
Dim xp As Double
Dim xi As Variant
Dim poids As Double
Dim pos As Variant
Dim compteur As Integer
Dim nom As Double
Dim LQ As Double
Dim BQ As Double
Dim PLQi As Double
Dim PBQi As Double
Dim t As Variant
Dim poidsr As Double
Dim datei As Date

x = Workbooks("test").Worksheets("test1").Range("D7").Value

xm = Workbooks("test").Worksheets("test1").Range("E7").Value

xp = Workbooks("test").Worksheets("test1").Range("F7").Value

xi = Workbooks("test").Worksheets("test1").Range("G7").Value

poids = Workbooks("test").Worksheets("test1").Range("G13").Value

pos = Workbooks("test").Worksheets("test1").Range("H9").Value

compteur = Workbooks("test").Worksheets("test1").Range("F13").Value

nom = Workbooks("test").Worksheets("test1").Range("C7").Value

LQ = Workbooks("test").Worksheets("test1").Range("C9").Value

BQ = Workbooks("test").Worksheets("test1").Range("C11").Value

PLQi = Workbooks("test").Worksheets("test1").Range("E9").Value

PBQi = Workbooks("test").Worksheets("test1").Range("E11").Value

t = Workbooks("test").Worksheets("test1").Range("E13").Value

poidsr = Workbooks("test").Worksheets("test1").Range("C15").Value

datei = Workbooks("test").Worksheets("test1").Range("C13").Value

If datei = Date Then
Workbooks("test").Worksheets("test1").Range("F13").Value = 2
Else
Workbooks("test").Worksheets("test1").Range("F13").Value = 1
End If

If x < xm Then
Workbooks("test").Worksheets("test1").Range("E7").Value = x
End If

If x > xp Then
Workbooks("test").Worksheets("test1").Range("F7").Value = x
End If

Call position(x, xm, xi, xp, poids, pos, compteur, nom, LQ, PLQi, BQ, PBQi, t, poidsr)

Application.OnTime Now + TimeValue("00:00:01"), "strategy"

End Sub

je n'ai pas encore mis de procédure d'arrêt, mais je sais qu'il en faut une pour arrêter la boucle. Le problème c'est que ce programme doit tourner toute la journée, mais il s'arrête
automatiquement au bout d'une heure avec le message d'erreur précédent
voilà
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
15 févr. 2010 à 11:13
tu le fais exprès, ou quoi ?
Me relire, donc :
sans ton code (celui qui appelle la procédure définie par application.ontime et celui de la procédure ainsi appelée, ma foi... il faudrait être devin )
*
Et ceci, dans l'hypothèse selon laquelle (ce dont je ne suis pas aussi certain que tu l'es) ton erreur est vraiment dûe à Application.Ontime (ce qui est alors lancé), comme tu l'affirmes, et non à autre chose dans ton code !
Mais on ne pourra commencer à y voir clair que lorsque nous saurons (ENFIN) ce qui est lancé par Application.Ontime. Et nous tâcherons alors, si rien n'y est fautif, de chercher ailleurs dans ton code (dans ta procédure position, peut-être..., mais commençons par celle appelée par Ontime , comme demandé depuis le tout début de cette discussion et non encore montré )

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010
15 févr. 2010 à 13:50
bon les enfants faut se detendre, si le but du forum est de prendre les gens pour des cons faut aller consulter

Application.OnTime Now + TimeValue("00:00:01"), "strat1" (et pas "strategy" comme j'ai pu l'ecrire)

cette procedureure s'appelle elle meme

la procedure position ne fait rien de special des additions

Sub Position(x, xm, xi, xp, poids, pos, compteur, nom, LQ, PLQi, BQ, PBQi, t, poidsr)
Dim a As Double
Dim b As Double
Dim msg As String
Dim style As Integer
Dim title As String
If compteur = 1 Then
If t = "+" Then
If x < xi + poids * (xp - xi) Then
If Workbooks("test").Worksheets("test1").Range("F9").Value <> Int(poids * PLQi) Then
msg = " Attention erreur, voulez vous continuez ?"
style = 4
title = "Warning"
result = MsgBox(msg, style, title)
If result = vbYes Then
a = Int(poids * PLQi)
Workbooks("test").Worksheets("test1").Range("F9").Value = a
Workbooks("test").Worksheets("test1").Range("H13").Value = Workbooks("test").Worksheets("test1").Range("H13").Value + (PLQi - a) * _
Workbooks("test").Worksheets("test1").Range("C9").Value
Workbooks("test").Worksheets("test1").Range("E9").Value = a
b = xi + poidsr * (xp - xi)
Workbooks("test").Worksheets("test1").Range("G7").Value = b
Workbooks("test").Worksheets("test1").Range("F7").Value = x


Else
Workbooks("test").Worksheets("test1").Range("F9").Value = PLQi

If x < xi + poidsr * (xp - xi) Then
msg = "Stoppez activité!!!"
style = 4
title = "Alerte"
result = MsgBox(msg, style, title)
If result = vbYes Then
Workbooks("test").Worksheets("test1").Range("H13").Value = Workbooks("test").Worksheets("test1").Range("H13").Value + (PLQi) * _
Workbooks("test").Worksheets("test1").Range("C9").Value
Stop
End If
End If
End If
ElseIf x < xi + poidsr * (xp - xi) Then
msg = "Stoppez activité!!!"
style = 4
title = "Alerte"
result = MsgBox(msg, style, title)
If result = vbYes Then
Workbooks("test").Worksheets("test1").Range("H13").Value = Workbooks("test").Worksheets("test1").Range("H13").Value + (PLQi) * _
Workbooks("test").Worksheets("test1").Range("C9").Value
Stop
End If
Else
Workbooks("test").Worksheets("test1").Range("F9").Value = PLQi

End If
End If
End If
End Sub

c'est juste une fonction test pour savoir comment gerer les boucles
Maintenant il y a deux questions:
1) comment faire tourner strat1 en boucle sur la journée. Pour répondre à cette question il n'y a pas besoin de plus d'information il me semble.
2) le pourquoi du message d'erreur, cette question est secondaire pour moi (secondaire ne veux pas dire que cela n'a aucune importance ou que ce n'est pas lié à la première question je dis ça pour ceux qui voudraient encore se défouler), je veux surtout la réponse a la première question. Voilà vous avez tout
Merci d'avance pour ceux qui voudront bien m'aider
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
15 févr. 2010 à 14:17
sans ton code (celui qui appelle la procédure définie par application.ontime et celui de la procédure ainsi appelée, ma foi... il faudrait être devin )

mais commençons par celle appelée par Ontime , comme demandé depuis le tout début de cette discussion et non encore montré

bon les enfants faut se detendre, si le but du forum est de prendre les gens pour des cons faut aller consulter

Application.OnTime Now + TimeValue("00:00:01"), "strat1" (et pas "strategy" comme j'ai pu l'ecrire)

je te laisse juger par toi-même ....
Voilà vous avez tout

Que nenni ! (et pour ton ibnfo : ce n'est pas ta procédure position qui pourrait déclencher l'erreur 9 !)
Tu comptes la montrer quand, cette procédure ?
A défaut de la montrer maintenant (on en est quand même à un bon lot de messages la réclamant !) moi, je t'abandonne sans le moindre scrupule. ('Et il te restera à apprécier qui, dans cette affaire, prend les autres pour ce qu'ils ne sont pas ... et qui doit "consulter" )
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
15 févr. 2010 à 14:26
Attends donc ...
voilà que tu dis maintenant :
Application.OnTime Now + TimeValue("00:00:01"), "strat1" (et pas "strategy" comme j'ai pu l'ecrire)

ce qui ferait que ta procédure, qui est celle qui semble être la principale, se répèterait elle-même toutes les secondes (à condition, en plus, d'avoir été lancée une première fois)... Joli ! . Tu obtiendrais le même résultat en l'assortissant d'une boucle de répétition à l'infini ... (c'est une véritable histoire de ... devine).

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
15 févr. 2010 à 15:15
Et en plus, comme ta procédure se relance inlassablement elle-même, sans jamais "rendre la main" au système, je vois mal comment et par quoi les données qu'elle traite pourraient avoir été modifiées... (à moins qu'elles ne l'aient été depuis une autre appli, dont tu ne nous parles pas).
Je suppose/espère donc que ta machine est équipée d'un excellent processeur et qu'il est protégé/refroidi par un excellent ventilateur (tu nne l'entends pas s'emballer ?) ...


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010
15 févr. 2010 à 16:17
ok !!!la je vois pas ce que vous voulez de plus
strat1 initialise les variables x, xm , ...., poidsr
j'utilise la procedure position:

Call position(x, xm, xi, xp, poids, pos, compteur, nom, LQ, PLQi, BQ, PBQi, t, poidsr)

je vous ai aussi donné le code de position.
Une fois que celle-ci est terminé je rappelle la procedure strat1:

Application.OnTime Now + TimeValue("00:00:01"), "strat1"

tout ça s'applique sur une page excel ou des mises à jours se font regulièrement c'est pour ça que j'ai besoin de gerer des boucles la je n'ai rien d'autre à vous donné je peux pas l'inventer s'il manque quelquechose très bien dites moi quoi au lieu de me chier sur la gueule

ucfoutu:

"Attends donc ...
voilà que tu dis maintenant :

Application.OnTime Now + TimeValue("00:00:01"), "strat1" (et pas "strategy" comme j'ai pu l'ecrire)


ce qui ferait que ta procédure, qui est celle qui semble être la principale, se répèterait elle-même toutes les secondes (à condition, en plus, d'avoir été lancée une première fois)... Joli ! . Tu obtiendrais le même résultat en l'assortissant d'une boucle de répétition à l'infini ... (c'est une véritable histoire de ... devine). "

au départ ce n'etait pas une seconde mais plutot 30 j'ai une pour essayer de repoduire l'erreur quand vous me l'avez demandé et enfin elle ne fait que tourner en boucle puisqu'elle appelle la procedure position
j'ai vu qu il y avait des critiques c'est très bien je suis là pour ça mais surtout pour les solutions que vous avez a proposer
Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
15 févr. 2010 à 17:44
Une chose doit être claire dans ton esprit : aucune ligne de ton code montré de saurait déclencher l'erreur dont tu parles. l'erreur 9 concerne en effet un indice n'appartenant pas à la sélection et rien du code montré ne touche au moindre indice.
Entre donc en mode debug et dis-nous sur quelle ligne, du code que tu nous as montré, intervient ton erreur .
L'erreur est- donc générée ailleurs (c'est pour moi clair).
Comment et depuis où et quoi sont effectuées tes mises à jour ? (ton erreur s'y trouve probablement)
Je vois par ailleurs mal, où la main est rendue au système, dans le même fil (thread)... ce qui me donne à penser qu'un autre fil intervient (mais tu ne nous en dit rien, te contentant d'insister pour trouver la cause de ton erreur dans ce qui ne saurait générer cette erreur là. on peut y passer ainsi beaucoup de temps !) !



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
captainbagdad Messages postés 22 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 24 février 2010
15 févr. 2010 à 18:01
bon déjà je comprends mieux ecoutes j'essaie de reproduire l'erreur et je te donnerai plus de détails (demain car je n'ai pas d'ordi chez moi)par contre peux tu m'en dire un peu plus sur cette histoire de "rendre la main au système"
Merci
0
Rejoignez-nous