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 :

Création d'un chronomètre


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut Création d'un chronomètre
    bonjour
    je cherche à creer dans une feuille excel un bouton permettant de lancer un hcronometre (apres une mise à zero de celui ci) puis lorsque j'appuie sur un autre bouton obtenir les temps intermédiaire en les inscrivant dans une cellule. Je ne vois pas comment creeer ce chronomètre. Pouvez vous m'aider ?
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Va jeter un coup d'oeil à cette source Chronomètre et chronométrage


    Starec

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    j'ai deja regarde mais je comprend pas ...
    pour la conversion ok mais c'est le "gettickcount" qui me laisse perplexe
    il sert à quoi et il représente quoi ???
    Dans mon cas, le bouton doit lancer le chronomètre.

    Peux tu m'aider en me donnant des précision

  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
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    La fonction GetTickCount (déclarée comme tu l'as vu dans la partie générale) est l'une des fonctions de la librairie kernel32 de l'Api de Windows.

    Cette fonction, qui n'attend aucun paramètre en entrée, extrait et retourne le nombre de millisecondes écoulées depuis de démarrage de Windows

    Dans l'exemple du lien :

    - mesure est prise à un niveau de ton code
    - puis mesure est prise à un autre niveau

    le temps écoulé est la différence de ces deux mesures.

    Rien ne t'empêche, si tu veux utiliser un bouton de lancement et un bouton d'arrêt, de prendre ces deux mesures (l'une au lancement et l'autre à l'arrêt) à l'occasion du click. Il te faudra toutefois stoker alors au mpoins la première des deux mesures dans une variable globale (puisque tu aurais 2 boutons distincts) de sorte à pouvoir la lire lors de l'arrêt et faire la différence exposée plus haut ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    OK
    ou puis je trouver cette fonction sur mon pc car quand j'appuie sur F1, il ne le reconnait pas....

  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
    Points : 5 535
    Points
    5 535
    Par défaut
    S'agissant d'une fonction de l'Api de Windows, elle se déclare dans la partie générale de ton module.... !!!!
    C'est la toute première ligne du code que tu as vu sur le lien !!!!

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    est il possible de me transferer cette fonction et/ou comment verifier qu'elle est bien présente sur mon pc (je ne connait pas les librairies....)

  8. #8
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Elle est forcément sur ton PC !!!!
    Il s'agit d'une fonction de l'API de Windows !!!

    Et l'on voit mal comment Windows pourrait fonctionner sans la librairie qui la contient (Kernel32 !!!)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    API de windows ??? (connai pas ...)
    peu tu m'aider en m'indiquant comment faire pour trouver le nom de la bonne librairie

  10. #10
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Heu ...

    Tu lis un peu les messages, oui ?
    Le nom de la librairie est KERNEL32.dll
    Tu n'as pas à aller vérifier" ! Tu as simplement à la déclarer !!!
    Le code du lien me parait clair !!!!!

    Edit :

    Une API (API signifie Advanced Programers Interface) est un jeu de fonctions prédéfinies, fonctions que l'on utilise pour gérer l'apparence et le comportement d'éléments.
    L'API de Windows permet ainsi ces contrôles sur tous les éléments de Windows, qu'il s'agisse de l'aspect du Bureau, de l'allocation de mémoire, etc....
    Chaque fois qu'un utilisateur intervient, il déclenche une ou plusieurs fonctions de l'API de Windows. Certaines d'entre elles informent Windows de ce qui se passe.
    On pourrait dire que l'API de Windows est en quelque sorte son code natif. Il est à ce propos à noter que les langages de développement ne font qu'agir comme le Shell pour permettre un accès plus facile aux APIs. Tel est le cas de Visual Basic, qui est allé assez loin dans cette voie, occultant totalement les APIs pour offrir une approche différente sous Windows.

    ============================

    Une API est une interface permettant un développement plus fin et plus performant de l'application qui l'utilise.
    Les Apis facilitent considérablement la tâche du développeur en lui fournissant une interface de développement plus fin et plus performant. L'application qui utilise celles de Windows, par exemple, accède directement aux fonctions développées par Microsoft, fonctions dont la qualité n'est pas à remettre en question et dont la rapidité d'exécution est la meilleure possible.

    Pouquoi s'en servir sous Visual Basic ?

    Trois raisons principales :

    1) Les composants et les fonctions de Visual Basic ne permettent pas de tout faire, loin de là. Nombreux sont les cas de résolution d'un problème particulier grâce à l'utilisation de telle ou de telle autre fonction de Windows. La liste est longue et je n'ai pas l'intention de tenter de la dresser ici.

    2) Elles peuvent rendre votre application bien plus indépendante qu'en utilisant les composants proposés par Visual Basic.
    Ces composants sont certes plus simples d'utilisation (au stade développement) mais :

    a) ils ralentissent l'exécution, dans la mesure où ils ne sont jamais autre chose qu'un élément faisant lui-même appel à... une fonction de Windows !
    b) ils rendent l'application complètement et bien inutilement dépendante de ce composant. S'il était besoin de citer un cas, je n'hésiterais pas à citer celui des mésaventures résultant de l'utilisation du composant CommonDialog.

    3) Dans la plupart des cas, votre application (précisément pour les raisons citées en 2), "tournera" plus agilement.

    ====================================

    L'appel de l'API est fondamentalement semblable à l'appel d'une fonction ordinaire, aves ses paramètres.

    Nous appelons en réalité une fonction d'une librairie (DLL).

    Il nous faut déclarer la fonction dont il s'agit et, pour ce faire, préciser les éléments suivants :

    - Le nom de la fonction ou de la procédure contenue dans la Dll et que nous voulons utiliser.

    - le nom de la librairie (DLL) dans laquelle se trouve cette fonction ou procédure

    - les paramètres qui doivent être passés à la fonction ou procédure

    - le type de la valeur qui sera renvoyée par la fonction ou procédure.

    Examinons par exemple la déclaration de la fonction FindNextFile de la bibliothèque Kernel32.dll :
    Cette fonction attend un paramètre hFindFile, de type long, un paramètre lpFindFileData correspondant à une structure WIN32_FIND_DATA et retourne un Long....
    La syntaxe de sa déclaration est donc la suivante :

    Declare Function FindNextFile Lib "Kernel322" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

    ou encore, en utilisant un Alias (voir plus bas) :

    Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

    Encore faudra-t-il définir la structure, ainsi, par exemple en ce qui concerne WIN32_FIND_DATA :

    Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
    End Type

    et, du coup : faire au besoin des déclarations de constantes (ici par exemple la constante MAX_PATH) pour les membres de cette structure, voire, comme c'est le cas pour celle-ci, définir d'autres structures correspondant elles-mêmes à un élément de la structure principale (ici, par exemple : une structure FILETIME)

    Il est évident que tous ces renseignements sont donc nécessaires. Ils peuvent être obtenus ici et là (sur le Net, dans des ouvrages spécialisés, etc....) et... ici-même, je l'espère, pour un grand nombre des fonctions et procédures les plus utilisées...)


    UTILISATION D'ALIAS

    Il est possible d'appeler une fonction en utilisant un pseudo (plutot que son nom réel).
    Ce pseudo doit alors être déclaré conjointement au nom réel de la façon suivante :
    Imaginons vouloir déclarer et appeler sous le nom Titi une fonction Toto de la librairie Machin.dll

    Déclare function Titi lib "Machin" Alias "Toto" (byval.....) as ....

    L'utilisation d'un alias peut avoir plusieurs raisons, parmi lesquelles les suivantes :
    - raisons de lisibilité : un mot plus "parlant" peut souvent faciliter la maintenance d'une application.

    - éviter une ambiguïté : certaines fonctions comportent des
    caractères qui pourraient être interprêtés différemment par VB (cas
    par exemple du caractère "_" qui, sous VB, a une signification particulière !)
    Imaginons par exemple que nous ayons à déclarer
    (et utiliser) la fonction _lOpen de la librairie Kernel32

    Si nous la déclarions ainsi :
    Declare Function _lopen Lib "kernel32" (ByVal _
    lpPathname As String, ByVal ireadWrite As Long) As Long
    VB lirait bien évidemment :
    Declare Function lopen Lib "kernel32" (ByVal _
    lpPathname As String, ByVal ireadWrite As Long) As Long
    ce qui provoquerait une erreur !

    ========================

    Voilà !!!

    Tu sais maintenant tout (même plus que certains....)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    voila j'ai insere le code de cette maniere
    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
    17
    18
    19
    20
    21
    22
    23
    24
    Public Declare Function GetTickCount& Lib "kernel32" ()
    Private Sub CommandButton1_Click()
     
    Dim Départ As Double, arrivée As Double, Durée As Double, i As Long
    Dim mn As Integer, ms As Integer, sd As Integer, tps As String
        Départ = GetTickCount&
        '************* ton code ********************
        For i = 1 To 100000 'remplace le déroulement du code
             DoEvents
        Next
        '*****************************************
        arrivée = GetTickCount&
        Durée = arrivée - Départ
        mn = Int(Durée / 1000 / 60)
        sd = Int((Durée / 1000) - (mn * 60))
        ms = Durée - (sd * 1000) - (mn * 1000 * 60)
        'Formatage #:##:###
        tps = mn & ":" & Right("00" & sd, 2) & ":" & Right("000" & ms, 3)
        MsgBox tps
     
     
     
     
    End Sub
    et il se met en erreur en me disant que des "constantes, tableaux, chaine de longueur fixe, types definis par l'utilisateur et instruction declare ne sont pas autorisés comme membre Public de modules d'objets"
    peux tu m'aider a resoudre ce probleme ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    j'ai deplace la declaration devant un module standard et il se met plus en erreur.
    cependant j'aimerais afficher ce chronometre en temps "reel"
    est ce possible et si oui comment ?

  13. #13
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Oh ....

    Il s'agit d'une fonction ...

    Elle doit donc, comme toute autre, être Publique dans un module public ou Privée dans un module privé !

    Si tu l'as mets dans la partie générale du code de ton UserForm (qui est un module PRIVE :

    Private Declare Function GetTickCount& Lib "kernel32" ()

  14. #14
    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
    Points : 5 535
    Points
    5 535
    Par défaut
    Citation Envoyé par fmris Voir le message
    cependant j'aimerais afficher ce chronometre en temps "reel"
    est ce possible et si oui comment ?
    Il te faudrait pour celà utiliser un timer (et comme VBA n'en possède pas, il te faudrait là aussi utiliser d'autres fonctions de l'Api de Windows...).

    Il y a eu une discusiion presque identique à ce sujet il y a moins de 48 heures .

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Points : 98
    Points
    98
    Par défaut
    Ok jvai regardé
    merci pour ton aide

Discussions similaires

  1. création de chronomètre
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 13/06/2009, 03h00
  2. Création d'un chronomètre
    Par LinuxUser dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2007, 02h28
  3. [Kylix] Création d'un fichier lien
    Par DrQ dans le forum EDI
    Réponses: 2
    Dernier message: 14/05/2002, 21h30
  4. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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