Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 Afficher le temps écoulé de l'utilisation de userform

halimhamdi

XLDnaute Junior
bonjour ce ci le fichier et vous trouvez le userform que je veux connaitre le temps d'utilisation et afficher dans la cellule temps écoulé
si possible de traiter cette demande avec plaisir bien sur car je ss pas chaud dans vba excel
et merci pour votre attention
 

Pièces jointes

  • Test.xlsm
    80.5 KB · Affichages: 11

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Bonjour fanch55

J'ai un problème avec cette ligne

VB:
SetTimer HWnd, 1, 1000, AddressOf Horloge

AddressOf Horloge 'est sureligné

message "Incompatibilité de type"

Bonne journée
Jean marie
 

fanch55

XLDnaute Barbatruc
Merci
Pouvez vous m'aider à rendre le code compatible dans un environnement 64 bits
Bon Week end
VB:
'API pour le temps
#If VBA7 Then
    Public Declare PtrSafe Function SetTimer Lib "user32" ( _
        ByVal hWnd As LongPtr, _
        ByVal nIDEvent As LongPtr, _
        ByVal uElapse As Long, _
        ByVal lpTimerFunc As LongPtr) As LongPtr
        
    Public Declare PtrSafe Function KillTimer Lib "user32" ( _
        ByVal hWnd As LongPtr, _
        ByVal nIDEvent As LongPtr) As Long
        
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As LongPtr
#Else
    Public Declare Function SetTimer Lib "User32" _
    (ByVal HWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
    '
    Public Declare Function KillTimer Lib "User32" _
    (ByVal HWnd As Long, _
    ByVal nIDEvent As Long) As Long
    '
    Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" _
    (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
    '
#End If
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous

çà me serait très utile de m'expliquer pourquoi on utilise dans ce fichier

un timer api (settimer) (et qui puis est avec le handle du userform GROSSE ERREUR!!! )dans ce fichier et un application.ontime (avec une restitution"hh:mm")
et pour couronner le tout une fonction de conversion seconde en hh:mm
LOL
 

jm.andryszak

XLDnaute Occasionnel
Si on est allergique à SetTimer, KillTimer, FindWindow etc ...
On peut alors les supprimer et utiliser Sub HorlogeV0() (à modifier) dans le Module1 du premier fichier et non utilisé dans le code.
Trouver le Handle d'un Userform ne m'a jamais posé de problème avec FindWindow, alors pourquoi GROSSE ERREUR ??.
Cependant, je suis sous WIN32 et remercie fanch55 pour la compatibilité en WIN64 à laquelle je n'avais pas pensé.

"Et pour couronner le tout", quel est le sous entendu ???


Sub HorlogeV0() modifiée :
Sub HorlogeV0()
Dim Usf As Object
For EahUsf In VBA.UserForms
If InStr(1, Usf.Name, "userform1", vbTextCompare) Then
Usf.col11 = Format(Now - TimeValue(Usf.col11.Tag), "HH:MM:SS")
Usf.col11.ForeColor = IIf(Usf.col11.ForeColor = vbBlack, vbBlue, vbBlack)
Application.OnTime Now + TimeValue("00:00:01"), "HorlogeV0" 'et non Horloge
End If
Next
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
je vous ai fait deux exemples simplissimes
  1. avec l'api SetTimer
  2. avec application .ontime
mais tout d'abords comment peut ton calculer un temps écouler sans passer par une usine a gaz

alors en premier lieu on pointe un debut
VB:
debut=time'c'est simple

un peu plus tard dans une boucle ou un <<timer>> quelconque on pointe le time code actuel "maintenant"
VB:
maintenant=time
à noter que les deux variable sont des valeur time "hh:nn:ss"
ensuite grace a notre ami "Cdate" qui nous converti AUTOMATIQUEMENT EN INTERNE DANS VBA LES DEUX TEMPS EN NUMERO DE SERIE DATE
on va donc faire la soustraction et reconversion en date en une seule ligne
VB:
msgbox  CDate(CDate(maintenant) - CDate(debut))

voilà terminé ce principe est utilisé dans les deux exemples

pour répondre a ta question @jm.andryszak
ce n'est pas de trouver le handle qui est difficile ce n'est d'ailleurs pas le sens de ma remarque
c'est le fait d'utiliser le handle de l'userform comme hander caller et proprietaire
en mode modal et avec un pc faiblard ou très occupé en terme d'UC il y a des chances que le laps de temps entre la fermeture du userform et l’exécution du code du killtimer ne soit pas synchro
résultat erreur de serveur distant (bien connu avec l'api set timer qui reste une api capricieuse) voir même le plantage excel

voici donc deux exemples de timer
à noter que j'utilise 3 labels (aussi pour l'affichage) t1,t2 et t3
ces trois labels peuvent être des variables
ça devient tout de suite plus clair et plus souple
 

Pièces jointes

  • temps ecoulé api set timer .xlsm
    27.4 KB · Affichages: 3

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…