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 :

Format seconde + décimales


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut Format seconde + décimales
    Bonjour,

    Pour récupérer une durée au format "heure, minutes, secondes", j'utilise habituellement ceci :
    Format(Time, "h\hmm ss''")
    Dans la procédure suivante, je souhaiterais récupérer un résultat en seconde + 2 décimales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TimerD as long
    
    TimerD = Timer
    
    (ma procédure)
    
    MsgBox "Le PDF a été exporté sur votre bureau !" & vbLf & _
        "Durée : " & Format((Timer - TimerD), "0,0") & " sec.", vbOKOnly + vbInformation, "Info"

    Malgré diverses tentatives (dont je vous fais grâce), je n'arrive pas à trouver le bon format (cf. caractères en rouge), si tant est que le problème se trouve là !

    En vous remerciant par avance pour vos lumières,
    Cdt

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En VBA, le séparateur décimale est le point et pas la virgule et de plus, je suis étonné que vous n'ayez pas eu un message d'erreur sur votre première ligne. Il manque le mot clé Dim
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 540
    Par défaut
    Salut,

    Le mesure du temps en VBA n'est pas d'une précision absolue.
    Les dates sont précises à la seconde près.
    Il y a cependant la fonction Timer qui renvoie le nombre de secondes depuis minuit (au centième près).
    On peut l'exploiter en lui soustrayant sa partie entière, avec la fonction Fix().

    Le résultat obtenu sera un nombre réel (single), qui de part sa nature propre, trimbale une certaine dose d'imprécision
    Pour obtenir une date / heure précise, soit on stock tout dans un réel, soit dans une chaîne. Il faudra prendre en charge les convertions que cela implique.

    Par exemple, sous forme de chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(Now, "dd/mm/yyyy hh:mm:ss") & Format(Timer - Fix(Timer), ".00")

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut
    Bonsoir,

    @ Philippe : Merci ! Mon erreur reposait sur "ce point" capital. J'ai déclaré ma variable en Public

    @ Deedolith : Merci pour cette proposition.

    Cdt

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 043
    Par défaut
    Bonjour,
    Quand j'ai besoin de chronométrer avec une très grande précision (de l'ordre du millième de seconde) le temps d'exécution d'un traitement j'utilise les API suivantes qui se basent sur le nombre de battements du micro processeur. C'est plus précis que l'instruction Timer qui renvoie une durée à plus ou moins 15 centièmes près (à vérifier).

    Exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' Call Chronometre(True)                       ' Initialise le chronomètre.
    ' ...                                         ' Traitement à chronométrer.
    ' Debug.Print "Durée : " & Chronometre(False)  ' Affiche la durée écoulée.
    Code VBA : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Option Explicit
     
    Private Declare PtrSafe Function GetTickCount Lib "kernel32" Alias "QueryPerformanceCounter" (cyFrequency As Currency) As Long
    Private Declare PtrSafe Function GetFrequency Lib "kernel32" Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long
     
    '----------------------------------------------------------------------------------------
    Public Function Chronometre(Initialise As Boolean) As Double
    '----------------------------------------------------------------------------------------
    ' renvoie le temps écoulé entre deux appels de la fonction.
    ' Exemple :
    ' Call Chronometre(True)                       ' Initialise le chronomètre.
    ' Call QuickRanking(MonTableau(), True, 0)     ' Traitement à chronomètrer.
    ' Debug.Print "Durée : " & Chronometre(False)  ' Affiche la durée écoulée.
    '----------------------------------------------------------------------------------------
    ' Source: https://msdn.microsoft.com/fr-fr/library/office/ff700515(v=office.14).aspx
    ' Utilise les API pour renvoyer une durée plus précise que Timer.
    '----------------------------------------------------------------------------------------
    Dim cyTicks As Currency
    Static cyFrequence As Currency
    Static CyDébut As Currency
     
    ' Initialise le calcul de la fréquence du micro processeur:
    If cyFrequence = 0 Then GetFrequency cyFrequence
     
    ' Renvoie le nombre de tick écoulés:
    GetTickCount cyTicks
     
    ' Si initialisation du chronomètre alors mémorise l'heure d'appel et quitte:
    If Initialise = True Then CyDébut = (cyTicks / cyFrequence): Exit Function
     
    ' Sinon renvoie le temps écoulé depuis l'initalisation:
    If cyFrequence Then Chronometre = (cyTicks / cyFrequence) - CyDébut
     
    End Function
    '----------------------------------------------------------------------------------------

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 716
    Par défaut
    Bonjour Laurent,

    Merci pour cette proposition bien que mes besoins soient très en-deça d'un code aussi sophistiqué (qui néanmoins force mon admiration).

    Cdt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2012] Transformer un format seconde en hh:mm:ss
    Par facteur dans le forum Développement
    Réponses: 4
    Dernier message: 19/12/2019, 18h02
  2. Conversion seconde format y+m+d+h+m+s
    Par Mysti¢ dans le forum Général Python
    Réponses: 13
    Dernier message: 22/07/2016, 20h01
  3. Réponses: 4
    Dernier message: 01/11/2005, 22h39
  4. [HELP] Convertion de seconde au format hh:mm:ss
    Par MaxiMax dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/08/2005, 18h23
  5. Formater une durée sous la forme Heure:Minute:Seconde
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/02/2004, 00h29

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