L'heure en temps réel dans une feuille excel

Soyez le premier à donner votre avis sur cette source.

Vue 37 926 fois - Téléchargée 1 868 fois

Description

Petit bout de code expliquant comment utiliser une API en VBA pour afficher seconde après seconde l'heure en temps réel dans une cellule d'une feuille Excel...

Source / Exemple :


'Dans la partie workbook du classeur, insérer le code suivant
'============================================================

'On initialise le timer système dès l'ouverture du classeur
Private Sub Workbook_Open()
'Utilisation de l'API SetTimer toutes les secondes (1000 millisecondes) pour appeler la procédure UpDateTime
SetTimer Application.hWnd, 0, 1000, AddressOf UpDateTime
End Sub

'A la fermeture du classeur, on nettoie la place en supprimant l'appel au timer système
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'On utilise le handle de l'application et l'ID de l'objet liés lors de l'initialisation du timer
KillTimer Application.hWnd, 0
End Sub

'Dans un module séparé, insérer le code suivant
'==============================================

'On définit les 2 APIs systèmes qui seront utilisées 
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

'La fameuse fonction UpDateTime qui va se charger d'écrire dans la cellule voulue l'heure actuelle à chaque seconde
Public Sub UpDateTime (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
'Afin que la feuille ne se ferme pas de manière inoportune suite à une erreur interne
'(lors de l'édition d'une cellule ou l'accès à certaines boîtes de dialogue par exemple)
On Error Resume Next
'On écrit l'heure selon le format HH:MM:SS sur 24 heures.
Worksheets(1).Cells(1.1).Value = Format(Time,"HH:MM:SS")
On Error Goto 0
End Sub

Conclusion :


C'est tout et très simpliste (je n'ai pas dis "simple"), j'espère que ça vous aidera...

Comme défaut connu, on peut constater que lors de l'édition d'une cellule,
l'heure est figée jusqu'à annulation ou validation de l'édition.

J'ai mis le code sur initié même s'il me semble simple à comprendre et très court car on appelle des APIs qui provoquent facilement un plantage de la feuille et sa fermeture immédiate. N'oubliez pas de sauver votre travail régulièrement si vous expérimentez...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6921
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 septembre 2020
112
Très bon code, si vous voulez mettre l'heure dans une "UserForm", ajoutez un label et changez suivant le code suivant:
'Module
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 UpDateTimeRange As Range
Public UpDateTimeFormat As String

Public Sub UpDateTime(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
On Error Resume Next
UserForm1.Label1 = Format(Time, UpDateTimeFormat)
On Error GoTo 0
End Sub


'Commande
'start
Private Sub CommandButton1_Click()
UpDateTimeFormat = "HH:MM:SS"
SetTimer Application.hWnd, 0, 1000, AddressOf UpDateTime ‘On démarre l’heure

End Sub
'stop
Private Sub CommandButton2_Click()
KillTimer Application.hWnd, 0 'On arrête l'heure
End Sub
Messages postés
6
Date d'inscription
vendredi 16 juin 2006
Statut
Membre
Dernière intervention
9 février 2007

Bonjour à TOUS
CELTAR pour changer l'heure de cellule il suffit de modifier la ligne 30 comme suit :
pour la feuille 2 Cellule B4 par exemple
Worksheets(2).Cells(4,2).Value = Format(Time, "HH:MM:SS")
J'en profite pour bien spécifier qu'il s'agit d'une virgule et non d'un point pour séparer les valeurs de la propriété Cells(ligne, colonne).
Cependant si tu veux tu peux aussi modifier toujours cette fameuse ligne 30 en
ActiveSheet.ActiveCell.value= Format(Time, "HH:MM:SS")
ce qui n'effacera pas l'ancienne cellule sélectionnée, à moins bien sûr de rajouter un événement :"Private Sub Worksheet_SelectionChange(ByVal Target As Range) [...]End Sub" mais qui déplacera l'heure vers la cellule active.

COL :
J'ai moi aussi le message d'erreur qui vient de la propriété hWnd non gérée par l'objet application...
En cours de recherche de solution.
Si quelqu'un l'a déjà ... Je suis preneur. Merci
Messages postés
1
Date d'inscription
jeudi 4 janvier 2007
Statut
Membre
Dernière intervention
4 janvier 2007

bonjour

il m' est impossible de changer de cellule l' heure malgré les instruction ci dessus

"les indexes de Cells(a,b) où a est l'index de ligne et b l'index de colonne."

mon affichage reste sur la ligne 1(a) et colonne 2 (b)

si vous pouvais m' aider merci a vous.
Messages postés
25
Date d'inscription
mercredi 23 juin 2004
Statut
Membre
Dernière intervention
13 octobre 2009

Bonjour !
J'ai testé le fichier du zip et j'ai toujours le même message d'erreur.
Messages postés
123
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
29 avril 2009

Col: Prends référence sur le ZIP ajouté, peut-être que la fonction appelée ne contient pas les arguments nécessaires.

Dokle: Peux-tu préciser? je ne vois pas ce qui peut clocher dans une fonction aussi simple que Cells(ligne,colonne)...
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.