Problème de réinitialisation

Résolu
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011 - 9 août 2011 à 12:59
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011 - 10 août 2011 à 10:17
bonjour à tous,
voici ci-dessous un code qui devrait permettre la remise à zéro de plusieurs variables et ceci doit se faire à 6h, à 14h et à 22h chaque jours. je ne sais pas pourquoi ça ne se réinitialise pas .
veuillez voir s'il y a quelque chose qui cloche dans mon travail et s'il y a des suggestion ils sont bien évidement les bienvenues.
If monheur > 6 Then
   eq_changeH = 6
   If monheur - eq_changeH = 8 Then
      n = 0
      b = 0
      d = 0
      r = 0
      eq_changeH = 0
   Else
      monheur = Hour(Time)
   End If
Else
    If monheur > 14 Then
       eq_changeH = 14
       If monheur - eq_changeH = 8 Then
          n = 0
          b = 0
          d = 0
          r = 0
          eq_changeH = 0
       Else
          monheur = Hour(Time)
       End If
    Else
        If monheur > 22 And monheur < 6 Then
           eq_changeH = 22
          If monheur - eq_changeH = 16 Then
             n = 0
             b = 0
             d = 0
             r = 0
             eq_changeH = 0
          Else
             monheur = Hour(Time)
          End If
        End If
    End If
End If

les variables sont toutes globales et ce code se trouve dans un Timer.

badbign badboom

9 réponses

Utilisateur anonyme
9 août 2011 à 13:15
Salut Bl,
je pense que t'es en VB6 (que j'ai pas installé) mais en VB.NET ça pourrait fonctionner comme ça:

Le timer doit être règlé à 1000 ms (1 seconde)

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Now.Minute 0 And Now.Second 0 Then
If Now.Hour 6 Or Now.Hour 14 Or Now.Hour = 22 Then
n = 0
b = 0
d = 0
r = 0
End If
End If
End Sub

Tu devrais pouvoir trouver l'équivalent en vb6

CF2i - Guadeloupe
Ingénierie Informatique
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 août 2011 à 17:38
Bonjour,

Je considère en ce qui me concerne plusieurs point :
Point 1 : aucun timer ne fera se déclencher à la seconde près, moins de le relancer toutes les secondes, en effet (et même ainsi, ... il suffit de très peu)
C'est donc bien avec des >et non des qu'il faut travailler
Point 2 : il est peu probable que la nécessité existe de lancer à une heure précise. Je pense qu'il est raisonnable de les lancer aussitôt que possible, entre une heure précise et au plus (par exemple) 30 secondes plus tard. Ce qui permet de ne faire travailler le timer que toutes les 30 secondes et non toutes les secondes.
Le code serait alors tout simplement le suivant :
Private Sub Timer1_Timer()
  Static nextheure As Integer
  If nextheure = 0 Then
    nextheure = calcule_nextheure()
    Exit Sub
  Else
    If Hour(Now) >= nextheure Then
      'Tu colles ici tes instructions de remise à 0
      nextheure = calcule_nextheure()
    End If
  End If
  
End Sub

Private Function calcule_nextheure() As Integer
  Select Case Hour(Now)
      Case Is < 6: nextheure = 6
      Case Is < 14: nextheure = 12
      Case Else: nextheure = 22
    End Select
    calcule_nextheure = nextheure
End Function



____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
3
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 août 2011 à 13:38
bonjour,

Je ne comprend pas trop cette ligne :
If monheur - eq_changeH = 8 Then


En plus, tu indiques :
doit se faire à 6h, à 14h et à 22h

Alors pourquoi utiliser des ">" au lieu d'un "=" ?

Ta variable "monheur " est de quel type ? (integer)

Ta dernière condition me parait étrange.. on parle d'heure donc les valeurs sont comprises entre 00h00 et 23h59..

je ne pense pas qu'un nombre puisse être à la fois plus grand que 22 ET plus petit que 6.
If monheur > 22 And monheur < 6 Then

(a la rigueur ici j'aurais plus utilisé un OR )

Dernier point, plutot que d'utiliser des IF, regardes du cote de SELECT CASE ou SWITCH.



Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
PS:Merci d'utiliser les balises de Code
0
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011
9 août 2011 à 13:38
merci Acive,
en fait j'avait déjà eu recours à cette idée mais ça n'a pas marché. je crois parce que j'avais mis ceci:
private sub timer1_timer()
if hour(time)=6 or hour(time)=14 or hour(time)=22 then
if minute(time)=0 then
if second(time)=0 then
n=0
b=0
d=0
r=0
end if
end if
end if
end sub


au lieu de:
Private Sub Timer1_Timer()
If Minute(Time) 0 And Second(Time) 0 Then
If Hour(Time) 6 Or Hour(Time) 14 Or Hour(Time) = 22 Then
n = 0
b = 0
d = 0
r = 0
s = 0
End If
End If
End Sub

si vous avez une explication n'hésitez pas à la postée
merci;)
badbign badboom
0

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

Posez votre question
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011
9 août 2011 à 13:52
salut Jordane,
pour
If monheur - eq_changeH = 8 Then

j'ai voulu utiliser la différence entre la valeur de
monheur=Hour(Time)

et celle de "eq_change" qui prend des valeurs bien précises 6,14 ou 22 selon cette différence j'ai voulu ordonner la réinitialisation.
pour l'utilisation des ">" au lieu de "=" : c'était un moyen qui peut m'éviter le blocage du compteur durant cette heure et pour donné une valeur précise à la variable "eq_change" pour pouvoir faire le calcul nécessaire durant cette période.
If monheur > 22 And monheur < 6 Then
: faute d'inattention.
pour le dernier point SELECT CASE ou SWITCH: je ne sais pourquoi je n'aime pas les utiliser.
et merci pour vos conseils.

badbign badboom
0
Utilisateur anonyme
9 août 2011 à 13:53
Oui parce que si tu lui demandes l'heure d'abord, les minutes et secondes après:

if hour(time)=6 or hour(time)=14 or hour(time)=22 then

Il va faire le calcul suivant une fois par seconde pendant une heure, pendant que nous sommes à 6h, 14h ou 22h.
C'est à dire 3600 x 3 = 10800 fois par jour, (ce calcul: "if minute(time)=0 and second(time)=0 then")

Tandis que si t’interroges d'abord les minutes et secondes d'abord il fera le calcul suivant une seule fois par heure.

CF2i - Guadeloupe
Ingénierie Informatique
0
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011
9 août 2011 à 14:09
Merci beaucoup.

badbign badboom
0
Utilisateur anonyme
9 août 2011 à 18:19
Re:
Très bien UC... j'ai pas testé mais ça a l'air fonctionnel.
Voilà Bl, tout ça, ça devrait t'inspirer un peu plus...



CF2i - Guadeloupe
Ingénierie Informatique
0
bl1919 Messages postés 37 Date d'inscription samedi 30 juillet 2011 Statut Membre Dernière intervention 23 août 2011
10 août 2011 à 10:17
merci les amis


badbign badboom
0
Rejoignez-nous