Problèmes avec une boucle

Résolu
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007 - 11 juin 2006 à 22:33
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007 - 16 juin 2006 à 23:04
Bonjour tt le monde,
Voila j'ai un problem avec les boucle, je voudrais faire un boucle qui permetrai de perdre du temps, je voudrais qu'a chaque fois qu'il fasse un boucle il attende 15 sec avan de recommencer, j'ai essayer avec le DateTime mais sa ne marche pas vraiment, si vous avez quelque chose a me proposé ou corrigé mon codes, merci d'avance.
Smitchel

Private Sub Mode_boucle_Click()
Compteur = 15
Do While DateTime.Now < DateTime.Second(Compteur)
Compteur = Compteur + 15
Loop
End Sub

15 réponses

mi12ox Messages postés 21 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 13 octobre 2006
14 juin 2006 à 16:11
mais tu voulais pas 15 secondes=15000 milli?
sinon tu peux contourner le problème de la façon suivante.

- tu choisi un intervalle plus grand que 65000.
- tu trouve un diviseur entier de ton intervalle plus petit que 65000.
- tu met la propriété timer1.interval à ton diviseur.
- à chaque déclenchement de ton timer, tu incrémente un compteur de 1.
- quand toncompteur*tondiviseur= tonintervalle, tu fais ce que tu veux et tu remet toncompteur a zéro.

un exemple devrait être plus parlant:D

je veux un timer qui se déclenche toutes les 3 minutes, donc l'intervalle = 180 secondes=180000

Public Sub Form1_Load()
let timer1.interval=60000
let Compteur=0
end sub

Private Sub Timer1.Timer()
Let Compteur=Compteur+1
if Compteur*timer1.interval=180000 then
    'tu fais tout ce que tu veux faire chaque trois minutes
    let Compteur=0
end if
end sub

le diviseur est directement le timer1.interval
t'auras déduit que le code placé dans le if--> end if se déclenche quand Compteur vaut 3 et qu'il le remet a zéro.
donc si Compteur est incrémenté de 1 toutes les 60 secondes, ta boucle se déclenche toutes les 3 minutes.

voila c'est pas super classe, mais perso je sais pas comment(ni se c'est possible) de modifier les types des propriétées des contrôles.
une technique démerde quoi

amicalement

miro
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 juin 2006 à 22:47
Utilise la fonction timer :

debut = Timer
Do
    DoEvents
Loop While Timer < (debut + 15)

Attention avec la focntion Timer pour le passage à minuit. A minuit la fonction revient à 0. Donc si ton attente se trouve en plein sur le passage à minuit, tu génère une boucle infinie. Si necessaire, pour y remédier, il faut gérer ce changement. Sinon tu peux aussi utiliser l'api GetTickCount qui est beaucoup plus précise (1ms contre 20ms pour la fonction timer)

<hr /># Le partage est notre force #
0
mi12ox Messages postés 21 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 13 octobre 2006
11 juin 2006 à 22:48
hello,
je crois qu'il serait plus raisonable d'utiliser un timer et de mettre son intervalle sur 15000 (ce sont des millisecondes). la procédure timer1.timer est lancée toutes les 15 secondes et tout les code que tu y place est ainsi repété à intervalles réguliers.
je sais pas si ça a pu t'aider sinon n'hésite pas à redemander.

amicalement

miro
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
11 juin 2006 à 22:54
Tiens pourr info, l'exemple du MSDN pour la fonction Timer :

Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Cliquez sur Oui pour effectuer une pause de 5 secondes", 4)) =  vbYes Then
   PauseTime = 5   ' Définit la durée.
   Start =  Timer    ' Définit l'heure de début.
   Do While Timer < Start + PauseTime
      DoEvents   ' Donne le contrôle à d'autres processus.
   Loop
   Finish  = Timer   ' Définit l'heure de fin.
   TotalTime = Finish - Start   ' Calcule la durée totale.
   MsgBox "Pause de " &amp; TotalTime &amp; " seconde(s)"
Else
   End
End If


Si c'est une attente de 15 secondes que tu veux, utilise ce code. Par contre si c'est une tache qui doit se renouveller toutes les 15  seconde, Miro a raison, un controle Timer est plus approprié.

<hr /># Le partage est notre force #
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
12 juin 2006 à 09:51
Bonjour

Le code suivant est juste, mais il consome 100% du CPU pour rien :
 Do While Timer < Start + PauseTime
      DoEvents   ' Donne le contrôle à d'autres processus.
   Loop


Il est préférable d'utiliser un Timer ou d'utiliser Sleep(DuréeEnMillisecondes), pour VB6, rechercher sur les forums et sources, pour VB.NET, System.Threading.Thread.Sleep(...)

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
12 juin 2006 à 19:34
Miro sa m'interesse bien ce que tu di mais jarrive pas a l'appliqué, tu pourrai me montré un exemple, par avance merci
0
mi12ox Messages postés 21 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 13 octobre 2006
12 juin 2006 à 20:25
tu crée ton objet timer1 sur ta forme( tu t'en fous d'ou tu le place il sera invisible à l'éxécution).

ensuite tu place un bout de code qui ressemble à ça:

dim MonCompteur as integer
Private Sub Form1_Load()  
    Let timer1.interval=15000  '  c'est de millisecondes
    Let MonCompteur=0
end Sub

Private Sub Timer1_Timer()
    let MonCompteur=MonCompteur+1
    let label1.Caption=MonCompteur
    ' Tout ce que tu veux faire toutes les 15 secondes
end Sub

la varialbe MonCompteur est juste la pour te montrer qu'après toutes les 15 secondes, le code que ta mis dans Timer1_Timer() est executé, dans ce cas présent, t'incrément ton compteur et tu affiche son contenu dans un label, rien de bien extraordinaire.

hésite pas à redemander si j'ai pas été clair.

amicalement

miro
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
13 juin 2006 à 00:05
ya un truc que jsaisi pas, comment jle lance ce codes?
0
mi12ox Messages postés 21 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 13 octobre 2006
13 juin 2006 à 11:24
t'es sous vb6 ou .net?

tu place Let timer1.interval=15000 dans une procédure, par exemple le chargement de ta feuille.

et ensuite tu crée la procédure  Private Sub Timer1_Timer() dans le code de ta feuille ou ta placé ton timer dessus, et elle se lance automatiquement toutes les 15000 millisecondes.
donc tout le code que tu place dans la procédure Timer1_Timer() est répeté toutes les 15 secondes.
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
13 juin 2006 à 11:54
Jsuis sur VB6 mais moi en fait jvoudrai que sa ce lance quan je clique sur un boutonj pas automatiquement.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
13 juin 2006 à 12:03
Bonjour

Tu met la prop Enabled de ton timer à false, et quand tu clique sur le bouton, tu la met à true

Ensuite dans l'event du timer, tu met Timer1.Enabled=false et tu fait ce que tu as à faire.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
13 juin 2006 à 13:38
Sa yé j'ai reussi a utiliser el timer comme a  expliqué Miro seulement je narrive pas a l'augmenté a plus de Timer1.Interval = 65000 il me fait une erreur 380 "Invalid property value"
yoré moyen daugmenté le temps?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
13 juin 2006 à 14:45
Bonjour

Normal, Interval est un integer (-32768 , 32767) donc 65000 c'est trop.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
13 juin 2006 à 19:46
et comment jpe faire pour augmenter le temps alors?
0
smitchel Messages postés 40 Date d'inscription mardi 2 septembre 2003 Statut Membre Dernière intervention 26 novembre 2007
16 juin 2006 à 23:04
Merci a tout le monde pour votre aide, particulierement à Miro et NHenry pour leur patience, j'ai resolu mon problem grace a vous.
Smitchel ++
0
Rejoignez-nous