en vba : convertir un nb de secondes en hh:mn:ss

Le
Alfred WALLACE
Bonjour,
j'ai trouvé dans le groupe cette formule :
=ENT(A1)&" heures , "&ENT(60*MOD(A1;1))&" minutes et
"&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

j'aimerai la transformer en vba, j'ai une sub qui décrémente
toute les secondes la valeur "1" à une variable publique
contenant le nombre de secondes totales.

pour le nb d'heures ok int(nombretotal / 3600 )

Mais pour le nombre de minutes je m'y perd d'autend
plus que ces variables sont au format long .

merci pour votre aide.

José
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Albéric
Le #23487551
Bonjour José,

Je ne comprends pas trop mais voici un rappel:

En excel (et ailleurs), une heure est un 24ème de jour, soit 1/24; une
minute 1/60 du 24ème; etc. D'où le codage en précision maximale.
C'est presque une lapalissade !

Tu peux obtenir ce résultat formaté avec un format comme ceci : « h"
heures," mm "minutes et "ss "secondes" »
C'est déjà plus simple.
On peut reprendre ce format en vba comme suit :

Function Fmt_Heure(Tps As Date) As String
Fmt_Heure = Format(Tps, "h"" heures"" mm ""minutes et ""ss
""secondes""")
End Function

À noter que c'est l'enregistreur de macro qui m'a donné le format avec tous
les guillemets, pas se casser la tête, hein ?

Mais, pour les puristes de la grammaire (comme moi), allons y pour les
pluriels / singuliers

Function Fmt_Heure(Tps As Date) As String
Dim pH As String, pM As String, pS As String, Fmt As String

If Hour(Tps) > 1 Then pH = "s"
If Minute(Tps) > 1 Then pM = "s"
If Second(Tps) > 1 Then pS = "s"

Fmt = "h"" heure" _
& pH & """ m ""minute" _
& pM & " et ""s ""seconde" _
& pS & """"

Fmt_Heure = Format(Tps, Fmt)
End Function

A+

"Alfred WALLACE"
Bonjour,
j'ai trouvé dans le groupe cette formule :
=ENT(A1)&" heures , "&ENT(60*MOD(A1;1))&" minutes et
"&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

j'aimerai la transformer en vba, j'ai une sub qui décrémente
toute les secondes la valeur "1" à une variable publique
contenant le nombre de secondes totales.

pour le nb d'heures ok int(nombretotal / 3600 )

Mais pour le nombre de minutes je m'y perd d'autend
plus que ces variables sont au format long ....

merci pour votre aide.

José
Maude Este
Le #23488491
Bonsour®

"Alfred WALLACE" a écrit
j'ai trouvé dans le groupe cette formule :
=ENT(A1)&" heures , "&ENT(60*MOD(A1;1))&" minutes et
"&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

j'aimerai la transformer en vba, j'ai une sub qui décrémente
toute les secondes la valeur "1" à une variable publique
contenant le nombre de secondes totales.

pour le nb d'heures ok int(nombretotal / 3600 )

Mais pour le nombre de minutes je m'y perd d'autend
plus que ces variables sont au format long ....



en VBA
Msgbox Format(nombretotal/(60*60*24) , "hh:mm:ss")
ou bien
Msgbox Format(nombretotal/(60*60*24) , "h"" heure(s) ""m"" minute(s) et ""s""
seconde(s)""")

ou bien A1 reçoit une valeur conforme à une durée EXCEL
[a1].FormulaLocal = "=" & nombretotal & "* ""0:0:1"""
[a1].NumberFormat = "h"" heure(s) ""m"" minute(s) et ""s"" seconde(s)"""
' [A1].NumberFormat = *****selon besoin*****

!!!!!!!!!!!!!!!!!!!!!
attention aux positions et nombre de doubles quotes
isabelle
Le #23488871
bonjour José,

Range("A1") = 32767 '32767 est le nombre de secondes maximum pour la fonction TimeSerial sur xl2002
Range("A2") = Format(TimeSerial(0, 0, Range("A1")), "hh:mm:ss")

--
isabelle



Le 2011-06-21 11:12, Alfred WALLACE a écrit :
Bonjour,
j'ai trouvé dans le groupe cette formule :
=ENT(A1)&" heures ,"&ENT(60*MOD(A1;1))&" minutes et
"&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

j'aimerai la transformer en vba, j'ai une sub qui décrémente
toute les secondes la valeur "1" à une variable publique
contenant le nombre de secondes totales.

pour le nb d'heures ok int(nombretotal / 3600 )

Mais pour le nombre de minutes je m'y perd d'autend
plus que ces variables sont au format long ....

merci pour votre aide.

José



Alfred WALLACE
Le #23490261
Bonjour Isabelle et aussi à tous ceux qui m'ont répondu.

Je me suis mal exprimé, et je pense que la solution
à mon soucis est beaucoup simple que ce que pensait !

En effet, je saisis dans un formulaire
des champs HH, MM et je convertit le tout
en secondes TOTSECONDES = HH * 3600 + MM * 60

Ensuite, dans un timer, je décrémente TOTSECONDES de 1
toutes les secondes.
et je voulais reconstuter une chaine : xx HH xx MM xx SEC toutes
les secondes de façon à ce que l'on voit le temps passer.

grace à vos remarques et à quelques essais, j'ai fait ceci :

pour les heures ENT((TOTSECONDES/3600))
pour les minutes ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60)
pour les secondes :
((((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60) - _
ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60))*60


en fait "totsecondes" n'est pas du tout une valeur "serial time" de
excel, mais
simplement un nombre qui contiend des secondes.

j'ai déclaré totsecondes en tant que "long" car c'est un nombre
entier, mais
est ce que çà gène d'avoir un nombre à virgule pour les résultats
intermédiaires ?
en effet, 2 heures moins 1 seconde, çà fait 1h59 minutes... et là
7199 secondes
divisé par 3600 çà fait un nombre à virgules.

Merci encore pour votre aide.





On 22 juin, 06:59, isabelle
bonjour José,

Range("A1") = 32767  '32767 est le nombre de secondes maximum pour la fonction TimeSerial sur xl2002
Range("A2") = Format(TimeSerial(0, 0, Range("A1")), "hh:mm:ss")

--
isabelle

Le 2011-06-21 11:12, Alfred WALLACE a écrit :







> Bonjour,
> j'ai trouvé dans le groupe cette formule :
> =ENT(A1)&" heures ,"&ENT(60*MOD(A1;1))&" minutes et
> "&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

> j'aimerai la transformer en vba, j'ai une sub qui décrémente
> toute les secondes la valeur "1" à une variable publique
> contenant le nombre de secondes totales.

> pour le nb d'heures ok int(nombretotal / 3600 )

> Mais pour le nombre de minutes je m'y perd d'autend
> plus que ces variables sont au format long ....

> merci pour votre aide.

> José
michel ou sam
Le #23490351
Bonjour,
si tu affiches dans une cellule Excel, pourquoi ne pas faire :
=TOTSECONDES/86400 avec un format hh:mm:ss

Michel

"Alfred WALLACE"
Bonjour Isabelle et aussi à tous ceux qui m'ont répondu.

Je me suis mal exprimé, et je pense que la solution
à mon soucis est beaucoup simple que ce que pensait !

En effet, je saisis dans un formulaire
des champs HH, MM et je convertit le tout
en secondes TOTSECONDES = HH * 3600 + MM * 60

Ensuite, dans un timer, je décrémente TOTSECONDES de 1
toutes les secondes.
et je voulais reconstuter une chaine : xx HH xx MM xx SEC toutes
les secondes de façon à ce que l'on voit le temps passer.

grace à vos remarques et à quelques essais, j'ai fait ceci :

pour les heures ENT((TOTSECONDES/3600))
pour les minutes ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60)
pour les secondes :
((((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60) - _
ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60))*60


en fait "totsecondes" n'est pas du tout une valeur "serial time" de
excel, mais
simplement un nombre qui contiend des secondes.

j'ai déclaré totsecondes en tant que "long" car c'est un nombre
entier, mais
est ce que çà gène d'avoir un nombre à virgule pour les résultats
intermédiaires ?
en effet, 2 heures moins 1 seconde, çà fait 1h59 minutes... et là
7199 secondes
divisé par 3600 çà fait un nombre à virgules.

Merci encore pour votre aide.





On 22 juin, 06:59, isabelle
bonjour José,

Range("A1") = 32767 '32767 est le nombre de secondes maximum pour la
fonction TimeSerial sur xl2002
Range("A2") = Format(TimeSerial(0, 0, Range("A1")), "hh:mm:ss")

--
isabelle

Le 2011-06-21 11:12, Alfred WALLACE a écrit :







> Bonjour,
> j'ai trouvé dans le groupe cette formule :
> =ENT(A1)&" heures ,"&ENT(60*MOD(A1;1))&" minutes et
> "&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

> j'aimerai la transformer en vba, j'ai une sub qui décrémente
> toute les secondes la valeur "1" à une variable publique
> contenant le nombre de secondes totales.

> pour le nb d'heures ok int(nombretotal / 3600 )

> Mais pour le nombre de minutes je m'y perd d'autend
> plus que ces variables sont au format long ....

> merci pour votre aide.

> José
michel ou sam
Le #23490341
et en VBA

MsgBox (Hour(Totsecondes / 86400) & " h " & Minute(Totsecondes / 86400) & "
mn " & Second(Totsecondes / 86400) & " s")

Michel

"michel ou sam" 4e01df35$0$30760$

Bonjour,
si tu affiches dans une cellule Excel, pourquoi ne pas faire :
=TOTSECONDES/86400 avec un format hh:mm:ss

Michel

"Alfred WALLACE"
Bonjour Isabelle et aussi à tous ceux qui m'ont répondu.

Je me suis mal exprimé, et je pense que la solution
à mon soucis est beaucoup simple que ce que pensait !

En effet, je saisis dans un formulaire
des champs HH, MM et je convertit le tout
en secondes TOTSECONDES = HH * 3600 + MM * 60

Ensuite, dans un timer, je décrémente TOTSECONDES de 1
toutes les secondes.
et je voulais reconstuter une chaine : xx HH xx MM xx SEC toutes
les secondes de façon à ce que l'on voit le temps passer.

grace à vos remarques et à quelques essais, j'ai fait ceci :

pour les heures ENT((TOTSECONDES/3600))
pour les minutes ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60)
pour les secondes :
((((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60) - _
ENT(((TOTSECONDES/3600)-ENT((TOTSECONDES/3600)))*60))*60


en fait "totsecondes" n'est pas du tout une valeur "serial time" de
excel, mais
simplement un nombre qui contiend des secondes.

j'ai déclaré totsecondes en tant que "long" car c'est un nombre
entier, mais
est ce que çà gène d'avoir un nombre à virgule pour les résultats
intermédiaires ?
en effet, 2 heures moins 1 seconde, çà fait 1h59 minutes... et là
7199 secondes
divisé par 3600 çà fait un nombre à virgules.

Merci encore pour votre aide.





On 22 juin, 06:59, isabelle
bonjour José,

Range("A1") = 32767 '32767 est le nombre de secondes maximum pour la
fonction TimeSerial sur xl2002
Range("A2") = Format(TimeSerial(0, 0, Range("A1")), "hh:mm:ss")

--
isabelle

Le 2011-06-21 11:12, Alfred WALLACE a écrit :







> Bonjour,
> j'ai trouvé dans le groupe cette formule :
> =ENT(A1)&" heures ,"&ENT(60*MOD(A1;1))&" minutes et
> "&ARRONDI(60*MOD(60*MOD(A1;1);1);0)&" secondes"

> j'aimerai la transformer en vba, j'ai une sub qui décrémente
> toute les secondes la valeur "1" à une variable publique
> contenant le nombre de secondes totales.

> pour le nb d'heures ok int(nombretotal / 3600 )

> Mais pour le nombre de minutes je m'y perd d'autend
> plus que ces variables sont au format long ....

> merci pour votre aide.

> José




Maude Este
Le #23490591
Bonsour®

"Alfred WALLACE" a écrit
Je me suis mal exprimé, et je pense que la solution
à mon soucis est beaucoup simple que ce que pensait !

En effet, je saisis dans un formulaire
des champs HH, MM et je convertit le tout
en secondes TOTSECONDES = HH * 3600 + MM * 60

Ensuite, dans un timer, je décrémente TOTSECONDES de 1
toutes les secondes.
et je voulais reconstuter une chaine : xx HH xx MM xx SEC toutes
les secondes de façon à ce que l'on voit le temps passer.



n'est-ce pas simplement ce que je t'ai proposé ??? :
[A1].FormulaLocal = "=" & TOTSECONDES & "* ""0:0:1"""
' [A1].NumberFormat = *****selon besoin*****
Publicité
Poster une réponse
Anonyme