COMPTE À REBOUR LE PLUS SIMPLIFIER POSSIBLE

Ben2998 Messages postés 14 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 1 novembre 2007 - 31 mai 2005 à 00:33
thibboss Messages postés 2 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 7 août 2005 - 7 août 2005 à 15:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31721-compte-a-rebour-le-plus-simplifier-possible

thibboss Messages postés 2 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 7 août 2005
7 août 2005 à 15:26
Pas mal ! Moi je dis que la note ne veut rien dire ! Puisque tu est un débutant , c'est normal que t'est 6 ! Enfin !
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
9 juin 2005 à 15:58
un problémé avec tous ca : quand le prgm bouffe trops de GHz le timer ralentis !!
till2 Messages postés 11 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 3 juin 2007
3 juin 2005 à 10:36
bien vu joebarteamv ! Avec l'erreur que tu a découvert je suis passé de 9/10 à 6/10...(aucune importance biensur ! ) Mais je suis content de voir qu'un code aussi simple peut s'améliorer a l'infini...
didyman Messages postés 86 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 8 novembre 2007
3 juin 2005 à 02:54
cest vrai... personne n'y avais penser a minuit!!!

Bravo joebarteamv
joebarteamv Messages postés 65 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 5 novembre 2008
3 juin 2005 à 02:34
Bonjour a tous, ton code ou vos codes que ce soit de la maniere de faire,ne marche pas dans l'ensemble! et oui et pk? car vous ne gerez pas le cas ou le systeme passe à minuit! car ta réference a timer ne marche plus si l'on fait partir ton decompte à 23h50et 55secondes car timer va repasser à une valeur de 0 alors qu'elle ect chargée au debut a 86395 secondes!!! pour ce la moi j'utilise cette methode
La ce un exemple d'attendre 10secondes:
static Bfirst as boolean
dim t as long
static TopTempoDebut as long

If Not Bfirst Then
Bfirst = True
TopTempoDebut = Timer
End If
While t < 10 '10secondes ce sont ecoulés a la sortie
t = Timer - TopTempoDebut + 0.01
If t < 0 Then
t = t + 86400
TopTempoDebut = TopTempoDebut - 86400
End If
DoEvents
Wend
Ben2998 Messages postés 14 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 1 novembre 2007
2 juin 2005 à 02:42
Alors, j'ai fait mon travail et félécitation à vous autres ;). L'art d'enseigner sans être irrespectueux. :D Je laisse ce message aller et bravo encore!
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
1 juin 2005 à 22:27
(et donc il faut croire au miracle : que vb aille ecrire ailleurs - les chances de ne pas planter diminuent avec le temps)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juin 2005 à 18:45
La seule incertitude est sur le moment du plantage, peut varier entre 2 tests du même prog, dépendra seulement du fait que VB ira écrire sur la pile du thread (et donc corruption) car n'a aucune info sur le thread créé.
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 juin 2005 à 18:40
Si BruNews le dis , sa doit etre vrai :)
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
1 juin 2005 à 18:30
ha bon ? je ne sais pas j'ai pas tester mais il me semble qu'on peut créé des thread meme en vb
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
1 juin 2005 à 18:29
brunews tu ne crois pas aux miracles ?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 juin 2005 à 17:17
On ne crée pas de thread en VB, c'est plantage à tout coup.
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 juin 2005 à 17:16
Lol oui mais il me semble que vb a de la dificulté a gerer les thread , il devient vite instable ... Peut-etre que je me trompe ... a vous de me le dire :)
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
1 juin 2005 à 16:50
Declare Function CreateThread Lib "kernel32" Alias "CreateThread" (lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

> sert a créé des thread.... ai je été clair ? :)
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juin 2005 à 16:29
En VB6, y'a pas de "thread" si je ne m'abuse...

DoEvent permet de redonner la main à Windows pour qu'il fasse un tour de piste de ses applis (multi-tâches oblige!).

Ceci évite de figer ton prog et le système si tu es dans une boucle de longue durée... Et donc, ça permet également à l'utilisateur de pouvoir les annuler (en lui permettant donc de gérer les événements)...

Mais c'est sur que lorsque Windows est entrain de faire autre chose, ben il bosse pas sur ton prog... Donc, oui, quelque part, ça ralenti ton prog. A n'utiliser donc que pour des opérations longues!

Ai-je été clair ??? :-)
Au faut-il un exemple concret (en VB6) ?
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
1 juin 2005 à 15:56
vaut mieux utiliser un thread qu'un timer sinon pour des durées comme une heure il y a un décalage de quelques seconde ...
didyman Messages postés 86 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 8 novembre 2007
1 juin 2005 à 15:36
salut... ya juste un truc que je comprend pas bien (et qu'il mon pas appris a l'école!!! :P)

DoEvents 'Permet à Windows de faire autre
'chose durant un cours instant

pourquoi faut t'il laisser windows faire ses truc pendant un instant? sa ne ralenti pas notre éxécution si on fait sa?
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juin 2005 à 14:19
Grrr... Que veux-tu Man, on s'refait pas!!! J'aime tartiner à outrance... j'y peux rien... c'est un peu comme Sega... c'est plus fort que moi!!! Pi franchement, avec mon avatar, tout le monde sait bien que je suis un peu schizo ;-)

Non mais clair que ton code est plus propre... mais j'essayais juste de reprendre (avec bcp de difficultés je dois bien avouer!!! la fatigue?) celui de Till...

Enjoy...
et que le punk soit aussi avec vous ;-)
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 juin 2005 à 06:25
Oups désolé c'est presque la meme chose que ScSami lol , j'avais juste pas remarquer que son code est simple a cause qu'il y a trop de commentaire :-P , Bah dans mon code , avec format , l'affichage est plus propre :-)
cs_yoman64 Messages postés 592 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 4 décembre 2008
1 juin 2005 à 06:20
Encore plus simple et plus propre:

Dim Stoptime As Long
Dim Startime As Long
Dim Compte As Integer

Compte = 10 ' Indiqué la duré du timer
Startime = Timer
Stoptime = Startime + Compte


While Stoptime > Timer
'afficher ou le compte est rendu
Texte13.Text = Format(Compte - (Timer - Startime), "00")
DoEvents
Wend

Voila


@++
Que la prog soit avec vous ;-)
till2 Messages postés 11 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 3 juin 2007
1 juin 2005 à 00:59
Ba c'est parfait...Merci beaucoup.Je vais travailler tout ça.
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juin 2005 à 00:49
Alors déjà, mon code est un peu moins du "bricolage" que le tien!!! Alors, utilise-le!

Ma solution, oui, tu peux l'utiliser sans autre dans VBA, celle de Ben, non(et oui à la fois)... En effet, celle de Ben utilise un "Controle" "Timer" (attension à ne pas confondre avec l'instruction Timer que j'utilise!!!). Or, le VBA n'a pas, par défaut, ce controle. Mais les controles, tu peux en ajouter sur ton ordinateur... Le controle ActiveX Timer est livré avec ceux par défaut du Visual BASIC (version complète)... Donc, si tu as déjà un programme VB installé sur ta machine, y'a des chances que tu ais ce controle (qui sont sous la forme de fichier d'extension .OXC). Mais si tu veux utiliser ton code VBA sur d'autres machines que la tienne (portabilité), il faudra aussi livrer le .OCX du Timer (même si, quelque part, vu que tu n'as pas acheté le VB, tu n'en as pas le droit... ;-).

Alors, en effet, un des nombreux avantages du Controle Timer face à l'instruction Timer, c'est que le controle, lui, fonctionne en millisecondes alors que Timer fonctionne en secondes. D'où l'explication que "Timer = Timer + 1" donne bien 1 seconde!!! Donc, tout fonctionne parfaitement, rassure-toi ;-)

En ce qui concerne Label, ben c'est aussi un control qu'il faut placer sur ta feuille... Ensuite, si c'est le premier, ce sera Label1.text... Mais tu peux renommer les controles comme tu veux en affichant la fenêtre des propriétés (c.f. clique droit ou menus...).

En espèrant également t'avoir apporté de nouvelles lumières...

Enjoy
till2 Messages postés 11 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 3 juin 2007
31 mai 2005 à 16:18
franchement merci beaucoup ! j'aurais continuer a chercher ces objets pendant des semaines si je n'avais pas eu cette précision. Mon application est sur vba dans access donc voila.je me pose donc la question suivante : est ce que je peux me servir des applications que vous m'avez proposées ou faut t il tout mofifier pour que ca marche sous vba. Mais bon, ca fonctionne avec mon code, mais j'ai comme l'impression d'avoir fait du bricolage !
Ben2998 Messages postés 14 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 1 novembre 2007
31 mai 2005 à 14:27
Pour le label, c'est une étiquette de texte, dans les nouveau Visual Basic .net, la fonction .caption est remplacé par .text

Pour l'interval, c'est comme un métronome, à chaque x temps il agit, l'intervale sert à définir ce temps. dans un interval, la variable est en miliseconde alors si tu veux faire une seconde il faut l'ajuster à 1000...

J'espère t'avoir aidé ;)

Ben2998
till2 Messages postés 11 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 3 juin 2007
31 mai 2005 à 10:10
Ba tout dabor merci pour vos propositions.
Le probleme c'est que je n'arive pas a comprendre ce qu'est un label ( j'arrive pas a le déclarer et je ne sais meme pas a quoi ca sert et idem pour "l'interval" je n'ai jamais réussi a me servir d'interval pour compter en seconde. donc quand je tape ca : Label1.Caption ca me met une erreur.Et derniere petite question ...mon compte a rebour fonctionne mais comme mon interval est de 1 (timer1 = timer + 1 ) mon compte a rebour devré allé très vite alor ke au contraire ce dernier est presque en seconde...
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
31 mai 2005 à 02:59
Ben a raison... De plus, ton code n'est pas très correcte :

Private Sub Commande4_Click()

'Déclare les variables locales
Dim varNombreDeSecondes As Integer 'Secondes du compte à rebours
Dim varTempsDeDepart As Long 'Temps de départ
Dim varTempsDarrivee As Long 'Temps d'arrivée

'Initialise la valeur des variables
varNombreDeSecondes = 10 '10 secondes pour le compte à rebours
varTempsDeDepart Timer 'Timer> Temps actuel en secondes
varTempsDarrivee = varTempsDeDepart + varNombreDeSecondes

'Affiche le résultat pour la 1ère fois
' TempsFinal - Temps Actuel = secondes restantes!
Texte13.Value = varTempsDarrivee - Timer

'Fait Tant que (TempsActuel < varTempsDarrivee)
Do While Timer < varTempsDarrivee
Texte13.Value = varTempsDarrivee - Timer
DoEvents 'Permet à Windows de faire autre
'chose durant un cours instant
Loop 'Retourne à "Do" [Recommance la boucle]
'On ressort donc de la boucle si le temps actuel
' est égale ou supérieur aux temps de fin
' précédemment calculé!

'Affiche le résultat pour la dernière fois
Texte13.Value = varTempsDarrivee - Timer

End Sub


Si t'as d'autres questions, on est à ta disposition!

Bon début, persévère :-)

Enjoy
Ben2998 Messages postés 14 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 1 novembre 2007
31 mai 2005 à 00:33
Je sais pas pour toi mais je trouves qu'un simple Timer pourrais faire l'affaire:

Timer1:
Enabled=False
Interval=1000

Code:
'---------------------
Option Explicit
Dim a As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
a = 10
End Sub
'------------------------------
Private Sub Timer1_Timer()
a = a - 1
Label1.Caption = a
If a = 0 Then
MsgBox "Timer écoulé"
Timer1.Enabled = False
End If
End Sub
'-----------------------------

Je sais pas pour toi mais moi j'aimes cette manière. Si la tienne t'aides et que tu la préfère tant mieux mais moi je suis paresseux... :P:P:P ;)
Rejoignez-nous