Ben2998
Messages postés14Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention 1 novembre 2007
-
31 mai 2005 à 00:33
thibboss
Messages postés2Date d'inscriptionsamedi 6 août 2005StatutMembreDerniè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.
thibboss
Messages postés2Date d'inscriptionsamedi 6 août 2005StatutMembreDerniè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és395Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention19 juin 20091 9 juin 2005 à 15:58
un problémé avec tous ca : quand le prgm bouffe trops de GHz le timer ralentis !!
till2
Messages postés11Date d'inscriptionmercredi 25 mai 2005StatutMembreDerniè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és86Date d'inscriptionvendredi 26 novembre 2004StatutMembreDernière intervention 8 novembre 2007 3 juin 2005 à 02:54
cest vrai... personne n'y avais penser a minuit!!!
Bravo joebarteamv
joebarteamv
Messages postés65Date d'inscriptionsamedi 25 janvier 2003StatutMembreDerniè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és14Date d'inscriptionmardi 7 novembre 2000StatutMembreDerniè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és908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 1 juin 2005 à 18:40
Si BruNews le dis , sa doit etre vrai :)
sosodef88
Messages postés78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 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és908Date d'inscriptionjeudi 26 juillet 2001StatutModérateurDernière intervention 1 février 20152 1 juin 2005 à 18:29
brunews tu ne crois pas aux miracles ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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és78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 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és1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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és78Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention26 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és86Date d'inscriptionvendredi 26 novembre 2004StatutMembreDerniè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és1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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és592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDerniè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és11Date d'inscriptionmercredi 25 mai 2005StatutMembreDernière intervention 3 juin 2007 1 juin 2005 à 00:59
Ba c'est parfait...Merci beaucoup.Je vais travailler tout ça.
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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és11Date d'inscriptionmercredi 25 mai 2005StatutMembreDerniè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és14Date d'inscriptionmardi 7 novembre 2000StatutMembreDerniè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és11Date d'inscriptionmercredi 25 mai 2005StatutMembreDerniè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és1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 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és14Date d'inscriptionmardi 7 novembre 2000StatutMembreDerniè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 ;)
7 août 2005 à 15:26
9 juin 2005 à 15:58
3 juin 2005 à 10:36
3 juin 2005 à 02:54
Bravo joebarteamv
3 juin 2005 à 02:34
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
2 juin 2005 à 02:42
1 juin 2005 à 22:27
1 juin 2005 à 18:45
1 juin 2005 à 18:40
1 juin 2005 à 18:30
1 juin 2005 à 18:29
1 juin 2005 à 17:17
1 juin 2005 à 17:16
1 juin 2005 à 16:50
> sert a créé des thread.... ai je été clair ? :)
1 juin 2005 à 16:29
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) ?
1 juin 2005 à 15:56
1 juin 2005 à 15:36
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?
1 juin 2005 à 14:19
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 ;-)
1 juin 2005 à 06:25
1 juin 2005 à 06:20
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 ;-)
1 juin 2005 à 00:59
1 juin 2005 à 00:49
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
31 mai 2005 à 16:18
31 mai 2005 à 14:27
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
31 mai 2005 à 10:10
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...
31 mai 2005 à 02:59
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
31 mai 2005 à 00:33
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 ;)