Problème de réinitialisation [Résolu]

Signaler
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011
-
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011
-
bonjour,
en fait je suis entrain de développer un application sur VB6 et dans cette application il y a des compteur que je dois les réinitialiser chaque heure.je me suis planter sur cette partie là pourriez vous m'aider??
voilà une partie du programme:

'heure en cours
For X1 = 0 To infinity
For Y1 = 0 To 59
If Minute(Time) 3 And Second(Time) 0 Then
n Val(pph) 0
b Val(bph) 0
d Val(dph) 0
r Val(rph) 0
End If
Next Y1
If test = True Then
pph.Text = CStr((Val(pph) + 1))
If pass = True Then
bph.Text = CStr((Val(bph)) + 1)
Else
dph.Text = CStr((Val(dph)) + 1)
End If
End If
Next X1 'problème de réinitialisation

il faut prendre en considération le fait que je soit débutant en VB et que ma formation et loin d'être en informatique.

badbign badboom

18 réponses

Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

bl1919, Donnes des nom explicites à tes variables!

Genre :
préfixage :
g : Global
l : Local
p : Parametre
m : Variable uniquement visible dans le ficher où elle est déclarée
Ensuite un nom explicite.

Un gHeureDepart est plus explicite qu'un w

Applique cette règle de nommage, tu y verra peut être plus clair ensuite et ton code sera plus compréhensible.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
Et puis, dejà :
Private Sub Timer3_Timer()
  pass = True
  test = True
  Static monheure As Integer
  monheure = 0
  ...

fait que monheure sera = 0 à chaque intervalle du timer !

et donc :
If monheure 0 Then monheure Hour(Time)
   If Hour(Time) > monheure Then
      w = 0
      x = 0
      y = 0
      z = 0
      monheure = Hour(Time)
End If

ne donnera à monheure la valeur de Hour(Time) qu'un bref moment et monheure redeviendra = 0 tout de suite après !
Compare ta "logique" de mécanisme avec celle que je t'avais montrée, à savoir :
Private Sub Timer1_Timer()
  Static monheure As Integer
  If monheure 0 Then monheure Hour(Time)
  If Hour(Time) >= monheure Then
    '..... tu mets à zéros chaque compteur
    monheure = Hour(Time)
  End If
  MsgBox monheure
End Sub

qui fait que monheure ne sera = 0 qu'une fois !
Bref : ce n'est une fois de plus que question de logique, avant même de parler de code

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
Bonjour,
1) Dans quel évènement as-tu mis ce code ?
2) As-tu placé un contrôle Timer sur ton Form ?
Si non : c'est par cela qu'il faut commencer et mettre tes instructions dans l'évènement Timer du contrôle Timer.




____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

oui bien sur ce code est placé dans un Timer.

badbign badboom
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
Ou est alors le problème ? ===>>

Private Sub Timer1_Timer()
  Static monheure As Integer
  If monheure 0 Then monheure Hour(Time)
  If Hour(Time) >= monheure Then
    '..... tu mets à zéros chaque compteur
    monheure = Hour(Time)
  End If
  MsgBox monheure
End Sub

suffira.
Il est clair que tes variables compteurs doivent être accessibles (soit "générales", dans ton module de Form, soit "Publiques" dans un module .bas)


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
C'est bien entendu, mais tu auras corrigé toi-même) : > et non >=

Si ta remise à zéro ne doit pas se faire à heures justes, mais au bout d'un certain temps, le principe (le mécanisme) reste le même, mais, dans ce cas :
- ta variable monheure doit être typée en Date et, au début, avoir la valeur de Time
- et tu utlilises la fonction DateDiff (par rapport à l'heure actuelle) ppour voir si délai écoulé ===>> si délai écoulé ===>> tu remets tes variables à zéro et tu donnes à monheure la valeur de Time
C'est tout


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
308
Explique nous ce qui te poses problème, on ne peut pas deviner. Tu as une erreur ou bien le comportement de ton programme n'est pas celui que tu souhaites ?
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

A ucfoutu , oui je me suis rendu compte du > au lieu du >= .
mais la mauvaise nouvelle c'est que ça ne se réinitialise pas encore.
si vous pouviez commenter la cohérence de mon programme qui consiste à indiqués durant l'heure courante le nombre de cartes conformes (bph), le nombre de cartes défaillantes
(dph)et le nombre total des cartes testées.

If monheure 0 Then monheure Hour(Time)
If Hour(Time) > monheure Then

n Val(pph) 0 'compteur à mettre à zéro
b Val(bph) 0 'compteur à mettre à zéro
d Val(dph) 0 'compteur à mettre à zéro

monheure = Hour(Time)
Else
If test = True Then
pph.Text = CStr((Val(pph) + 1))
If pass = True Then
bph.Text = CStr((Val(bph)) + 1)
Else
dph.Text = CStr((Val(dph)) + 1)
End If
End If
End If


A julien39 : je n'ai pas d'erreur de compilation mais le comportement n'est pas le souhaité.
badbign badboom
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

n Val(pph) 0 'compteur à mettre à zéro
b Val(bph) 0 'compteur à mettre à zéro
d Val(dph) 0 'compteur à mettre à zéro


Là, tu regardes si pph, bph, dph sont égale à 0.
Pour remettre à 0, il faut faire uniquement :
pph = 0 'compteur à mettre à zéro
bph = 0 'compteur à mettre à zéro
dph = 0 'compteur à mettre à zéro


J'espère que le type de tes 3 variable sont bien des numériques, car le Val me mets le doute.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

bonjour Henry,
en fait j'était obligé de mettre le "Val" puisque je voulais que le compteur prend la dernière valeur affichée sur le "textbox" associée. donc pph, bph et dph sont les noms des "textbox" .
j n'ai pas trouvé d'autres alternatives pour que je puisse faire l’incrémentation.
si vous une solution à me suggérer et merci bien.

badbign badboom
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Sinon, tu peux aussi faire un compteur par une variable, ensuite une propriété en lecture seule pour retourner sa valeur, une Fonction pour l'incrémenter et retourner la valeur et une Sub pour le remettre à 0.

Comme ça, la fonction d'incrément peut toute seule mettre à jour la TextBox et aucun risque d'une modification par l'utilisateur ou d'une erreur de codage corrompant le type de la TextBox.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
Ta méthode, bl1919, ressemblerait un peu à celle d'un arbitre de tennis qui, pour compter les points, ne saurait se passer de l'écriture du score sur un tableau, pour s'y référer ! (Que le tableau s'éteigne et ... tout fichu ?)
L'affichage n'est pas nécessaire pour incrémenter une variable.
Si, pour une raison ou l'autre, tu veux "renseigner" visuellement l'utilisateur, utilise alors des Labels, moins coûteux que des textboxes et non modifiables. Mais ces labels ne doivent pas être utilisés pour l'incrémentation ! Uniquement pour l'affichage (et seulement si utile).


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

j'ai suivi vos conseil mais toujours le même problème
Private Sub Timer2_Timer()
i = 6
j = 14
k = 22
l = 45

'ditinction de l'équipe en cours

If Hour(Time) >= i And Hour(Time) < j Then
   Equipe_1.BackColor = &HC000&
   Equipe_2.BackColor = &H808080
   Equipe_3.BackColor = &H808080
End If
If Hour(Time) >= j And Hour(Time) < k Then
   Equipe_2.BackColor = &HC000&
   Equipe_1.BackColor = &H808080
   Equipe_3.BackColor = &H808080
End If
If Hour(Time) >= k And Hour(Time) < i Then
   Equipe_3.BackColor = &HC000&
   Equipe_1.BackColor = &H808080
   Equipe_2.BackColor = &H808080
End If
End Sub

Private Sub Timer3_Timer()
pass = True
test = True
Static monheure As Integer
monheure = 0

'equipe en cours
If (Hour(Time) 6 Or Hour(Time) 14 Or Hour(Time) = 22) And Minute(Time) = 0 And Second(Time) = 0 Then
   n = 0
   b = 0
   d = 0
   r = 0
End If
If test = True Then
   n = n + 1
   If pass = True Then
      b = b + 1
   Else
      d = d + 1
      r = r + 1    'à voir pour le retest
   End If
End If
If Equipe_1.BackColor = &HC000& Then
     e1 = n
     b1 = b
     d1 = d
     r1 = r
Else
   If Equipe_2.BackColor = &HC000& Then
        e2 = n
        b2 = b
        d2 = d
        r2 = r
   Else
        e3 = n
        b3 = b
        d3 = d
        r3 = r
End If
   'problème de réinitialisation



'heure en cours

If monheure 0 Then monheure Hour(Time)
   If Hour(Time) > monheure Then
      w = 0
      x = 0
      y = 0
      z = 0
      monheure = Hour(Time)
End If
End If
If test = True Then
    w = w + 1
    If pass = True Then
    x = x + 1
    Else
    y = y + 1
    z = z + 1
    End If
End If


If test = True Then
   nbr_de_cartes_passées.Text = CStr(n)
   nbr_de_cartes_bonnes.Text = CStr(b)
   nbr_de_cartes_défaillantes.Text = CStr(d)
   nbr_de_retest.Text = CStr(r)
   pph.Text = CStr(w)
   bph.Text = CStr(x)
   dph.Text = CStr(y)
   rph.Text = CStr(z)
End If
'problème de réinitialisation

End Sub


voici mon programme s'il vous plait aidez moi à résoudre ce problème.
badbign badboom
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
230
OU (très exactement) et comment (très exactement) sont déclarées les variables dont tu ne parviens pas à modifier la valeur depuis le Timer ?
Cette question est probablement ta réponse


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

pour heure en cours:w, x, y, z,
pour equipe en cours:n, b, d et r
ce sont les variables dont je veux réinitialiser selon l'heure
et ces variables sont déclarées comme variable global.


badbign badboom
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

merci vous m'avez aidé à résoudre ce problème.
en fait ça n'a pas encore marché encore une autre fois mais en suivant ton raisonnement ucfoutu j'ai pu résoudre le problème.
monheur = Hour(Time) 'j'ai déclaré la variable monheure comme étant une variable global pour que ça fonctionne

   If Hour(Time) > monheure Then
      w = 0
      x = 0
      y = 0
      z = 0
      monheure = Hour(Time)
   End If


merci une autre fois
badbign badboom
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Bien que ton problème soit résolu, je te conseil vivement de respecter les conseils de nommage précédemment donnés, tu y gagneras beaucoup en relecture et compréhension.

---------------------------------------------------------------------
[list][*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu, pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011

oui henry bien sur je suis entrain de le faire
merci

badbign badboom