IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Parametrage fonction Time


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 9
    Par défaut Parametrage fonction Time
    Bonjour,

    J'aurai voulu savoir comment faire pour obtenir une précision du type hh:mm:ss:ms(milliseconde) en utilisant la fonction time

    merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par juloul Voir le message
    J'aurai voulu savoir comment faire pour obtenir une précision du type hh:mm:ss:ms(milliseconde) en utilisant la fonction time
    Salut,

    tu dis bien "en utilisant la fonction Time" ?

    La précision de cette fonction est en secondes.

    D'autres fonctions peuvent aller plus loin (pas dans l'heure mais dans la mesure du temps écoulé) , mais pas, précisément, la fonction Time que tu poses comme celle à utiliser et qui, elle, ne concerne que l'heure...


    Edit : si tu n'avais pas limité à la fonction Time, on t'aurait peut-être parlé de la fonction Timer

    Avant qu'on ne se précipite sur moi (je tiens à dormir tranquille) :

    un petit test, hein ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private coucou As single
     
    Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
      coucou = Timer
      DoEvents
    End Sub
     
    Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
      MsgBox Abs(Timer - coucou)
    End Sub
    voilà ...

    faire des clicks plus ou moins longs et voir...

    La précision, toutefois, ne sera jamais, pour les durées très courtes, celle du millième de seconde (pas plus, d'ailleurs, que ne le serait, pour des durées de même grandeur, celle de la fonction GetTickCount de l'Api de Windows)

    Voilà... je peux maintenant aller dormir.

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Avant qu'on ne se précipite sur moi (je tiens à dormir tranquille) :

    voilà ...

    faire des clicks plus ou moins longs et voir...

    La précision, toutefois, ne sera jamais, pour les durées très courtes, celle du millième de seconde (pas plus, d'ailleurs, que ne le serait, pour des durées de même grandeur, celle de la fonction GetTickCount de l'Api de Windows)

    Voilà... je peux maintenant aller dormir.
    Mais non, mais non, pas dormir tranquille, il y a dans les exemples MSDN un timer au millionième de seconde ! ca te dit.
    et sur des temps extrèmements court (différence entre changement de thred). de l'ordre de quelques dizaines de millionièmes.
    Maintenant... bonne nuit.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Leforestier,

    Si c'est ce à quoi je pense :
    - il ne s'agit pas d'un Timer mais d'un compteur de fréquence dont le défaut essentiel est d'être totalement dépendant de la machine d'hébergement ...
    - les essais faits sur plusieurs machines ont révélé les mêmes faiblesses en ce qui concerne les mesures de durées extrêmement courtes... et ce y compris sur des machines très performantes.

    En voilà une évidente, déjà (et parmi d'autres) , de raison de faiblessse : la vitesse de rafraichissement de l'écran. Il y en a bien d'autres, en passant par la RAM...

    Nous étions il y a environ 6 mois assez nombreux à nous pencher sur ce problème et nous sommes arrivés à la conclusion selon laquelle il était possible, au delà d'une certaine durée, de calculer des écarts très infimes, mais qu'il était impossible d'y parvenir pour des durées elles-mêmes trop courtes.... Les tests ont duré plusieurs semaines, sur plusieurs machines, réparties d'un bout à l'autre de la terre ...

    Edit : Il me parait utile d'ajouter ici qu'il peut être intéressant, dans le cadre d'un "Bench test", d'utiliser ce compteur de performance sur une machine performante, mais qu'il est totalement déconseillé (c'est évident) de distribuer une application qui utiliserait ce compteur (pas ce "timer") dans le but d'effectuer des mesures précises.

    Edit 2 : cette conversation (bien que fort incomplète...) a été trouvée tout près d'ici....
    http://www.developpez.net/forums/arc...hp/t-7806.html
    Elle aurait pu sans aucun doute être complétée par une foule d'autres petites choses sur lesquelles l'impasse a été faite .... Mais l'essentiel y est malgré tout. Lis-la calmement et tire les conclusions qui s'imposent en matière de dépendance à l'outil (relire mon autre édit).

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Eh bien non, ucfoutu, ce n'est pas ce à quoi tu pense, à moins que MSDN ne puisse faire la différence entre fréquence et temps...
    ' Ce module utilise l'API SetTimer et l'opérateur AddressOf pour
    ' initialiser une minuterie en code seul. Lorsque
    ' ce type de minuterie est défini, le système
    ' continue d'appeler la fonction TimerProc
    ' MÊME LORSQUE VOUS REPASSEZ EN MODE CRÉATION.
    J'ai expérimenté l'exemple qui emploi cette minuterie et c'est bien en millionième.
    A+
    PS: Que ça ne t'empêche par de dormir ..

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re,

    je ne sais pas où tu vas, mais cette méthode a (après plusieurs tests) exactement les mêmes inconvénients que les autres, dès que la durée à évaluer est inférieure à enviton 17 millisecondes ...
    (je se sais pas si tu sais, à ce propos, que la fonction Timer est ce qu'elle utilise précisément elle même. Si tu types en double la variable affectée à la fonction Timer, tu y verras également des "millionièmes"... qui n'en sont pas vraiment, eux non plus, surtout si les mesures sont prises à moins de 17 millisecondes d'intervalle..).

    Mais ne nous éternisons pas avec ces machins-là dont je sais qu'ils ne conduisent quasiment nulle part de façon sûre.

    Revenons à l'objet de cette discussion : afficher l'heure avec les millisecondes :

    Voilà ce que je propose (je n'ai pas mieux, après plusieurs autres démarches qui arrivent au même résultat tout en ayant besoin de plus de code !!!) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub CommandButton1_Click()
     Dim montimer As Double, horloge As Date, nbsecondes As Single, nbheures As Integer, nbminutes As Integer
      '=========================================================================
      ' ceci uniquement pour vérifier que l'on parle bien des mêmes choses
      montimer = Timer
      horloge = Time
      nbsecondes = montimer
      nbheures = nbsecondes \ 3600
      nbminutes = (nbsecondes Mod 3600) \ 60
      nbsecondes = (nbsecondes Mod 3600) Mod 60
      '=====================================================================
      MsgBox "notre timer en est à " & nbheures & ":" & nbminutes & ":" & nbsecondes & vbCrLf & _
      " et la fonction time affiche " & horloge & vbCrLf & _
      "l'heure exacte (avec les millisecondes) est : " & _
      horloge & ":" & Format(Int((montimer - Int(montimer)) * 1000), "000")
    End Sub
    J'y ai mis un affichage permettant certaines comparaisons.

Discussions similaires

  1. utilisation fonction time
    Par Jeane dans le forum Administration système
    Réponses: 2
    Dernier message: 21/03/2007, 15h31
  2. parametrage fonction fread
    Par sone47 dans le forum C
    Réponses: 3
    Dernier message: 05/03/2007, 15h22
  3. [MySQL] Utilisation de la fonction time
    Par Iodev dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/10/2006, 16h34
  4. exemple de fonction time.time()
    Par shirya dans le forum Général Python
    Réponses: 2
    Dernier message: 30/10/2006, 22h56
  5. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo