Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
Alfred WALLACE
Bonjour,
j'ai trouv=E9 dans le groupe cette formule :
=3DENT(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=E9cr=E9mente
toute les secondes la valeur "1" =E0 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=E9

7 réponses

Avatar
Albéric
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" a écrit dans le message de news:

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é
Avatar
Maude Este
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
Avatar
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é



Avatar
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 wrote:
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é
Avatar
michel ou sam
Bonjour,
si tu affiches dans une cellule Excel, pourquoi ne pas faire :
=TOTSECONDES/86400 avec un format hh:mm:ss

Michel

"Alfred WALLACE" a écrit dans le message de news:

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 wrote:
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é
Avatar
michel ou sam
et en VBA

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

Michel

"michel ou sam" a écrit dans le message de news:
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" a écrit dans le message de news:

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 wrote:
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é




Avatar
Maude Este
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*****