[VBA]Opération/l'heure+conversion+arrondi 0.5
Résolu/Fermé
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
-
Modifié par lml-mike le 10/08/2010 à 13:11
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 10 août 2010 à 14:28
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 10 août 2010 à 14:28
A voir également:
- [VBA]Opération/l'heure+conversion+arrondi 0.5
- Vba arrondi supérieur ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- 35 go internet équivalent en heure ✓ - Forum Mobile
- 30 Go combien de temp d’internet - Forum Mobile
8 réponses
LeDénicheur
Messages postés
565
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
1 décembre 2013
363
Modifié par LeDénicheur le 9/08/2010 à 16:35
Modifié par LeDénicheur le 9/08/2010 à 16:35
Autant pour moi, mal compris la question.
Réponse après le boulot.
Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?
Réponse après le boulot.
Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 779
9 août 2010 à 21:08
9 août 2010 à 21:08
Utilise Now (Date et Heure) à la place de Time
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
10 août 2010 à 07:38
10 août 2010 à 07:38
Bonjour,
Tu peux aussi calculer ta différence modulo 1, le résultat sera correct dans les 2 cas.
eric
Tu peux aussi calculer ta différence modulo 1, le résultat sera correct dans les 2 cas.
eric
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
120
10 août 2010 à 08:08
10 août 2010 à 08:08
J'ai oublié de préciser comme contrainte que l'heure doit être affichée sur mes cases sous la forme hh:mm, et vu la dispositions des cases ou elles sont affichées, ca va me prendre trop de temps de convertir toutes les cases en format date.
J'essaye dans 2 heures vos solutions, merci !
P.S.: comment tu effectue la soustraction modulo ?
J'essaye dans 2 heures vos solutions, merci !
P.S.: comment tu effectue la soustraction modulo ?
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
10 août 2010 à 08:25
10 août 2010 à 08:25
t = (t2 - t1) Mod 1
à condition que tes heures soient de type date, si ce sont des heures décimales ça sera modulo 24
à condition que tes heures soient de type date, si ce sont des heures décimales ça sera modulo 24
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
120
10 août 2010 à 11:40
10 août 2010 à 11:40
Je n'ai pas réussi avec les modulo, j'ai donc fait :
Donc en gros si time_avant = heure avec J-1 ça marche ? Je sais pas comment le tester ><
Maintenant mon problème, c'est de le convertir en décimal et d'arrondir à 0,5 près, en gros faire ça :
Quelqu'un à une idée pour que 1h20 soit égal à 1.33, arrondi a 1.5 par exemple ?
dim time_now as date dim time_avant as date dim time_total as date time_now = Strings.Format(Now, "HH:nn:ss") Worksheets("PC").Activate Range("h23").Activate time_avant = ActiveCell.Value time_total = time_now - time_avant
Donc en gros si time_avant = heure avec J-1 ça marche ? Je sais pas comment le tester ><
Maintenant mon problème, c'est de le convertir en décimal et d'arrondir à 0,5 près, en gros faire ça :
time_prix = [conversion de l'heure en décimal] prix = formatnumber(time_prix,1) * 2 prix = arrondir à 0.5 près msgbox("le prix total est de : " & prix)
Quelqu'un à une idée pour que 1h20 soit égal à 1.33, arrondi a 1.5 par exemple ?
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
120
10 août 2010 à 12:20
10 août 2010 à 12:20
J'avance plutôt bien, j'ai trouvé comment arrondir a 0.5 près :
time_prix = [conversion en décimal]
dec = Format(dec, "#0.0")
dec = Round(dec / 0.5, 0) * 0.5
msgbox("le prix total est de : " & prix)
Il me reste plus que la conversion farfelue en décimal...les chiffres qu'ils me donnent n'ont rien a voir avec 1 heure = 1, et 30 minutes = 0.5 :x
time_prix = [conversion en décimal]
dec = Format(dec, "#0.0")
dec = Round(dec / 0.5, 0) * 0.5
msgbox("le prix total est de : " & prix)
Il me reste plus que la conversion farfelue en décimal...les chiffres qu'ils me donnent n'ont rien a voir avec 1 heure = 1, et 30 minutes = 0.5 :x
LeDénicheur
Messages postés
565
Date d'inscription
samedi 5 janvier 2008
Statut
Membre
Dernière intervention
1 décembre 2013
363
10 août 2010 à 12:21
10 août 2010 à 12:21
ça va pas t'aider, mais ce que tu cherches à faire, j'ai essayé de le faire, j'ai jamais réussi à trouver un truc réelement optimisé XD
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
10 août 2010 à 13:09
10 août 2010 à 13:09
Bonjour,
A+
Sub TraduireHeureEnDécimale() Dim D As Date, TB, Resultat As Single 'Pour l'exemple, mais ça peu être en string D = "12:30" TB = Split(D, ":") Resultat = TB(0) + ((TB(1) * 100) / 60) / 100 End Sub
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
10 août 2010 à 13:30
10 août 2010 à 13:30
Er sont inverse,
Sub TraduireDecimaleEnHeure() Dim D As Single, Resultat, e 'Pour l'exemple D = 12.5 e = CStr(Round((D - Int(D)) / 100 * 60, 2)) & "0" Resultat = CStr(Int(D)) & ":" & Mid(e, 3, 2) End Sub
lml-mike
Messages postés
453
Date d'inscription
vendredi 16 février 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
120
10 août 2010 à 13:10
10 août 2010 à 13:10
Bon, j'ai trouvé la solution, mais c'est vraiment tordu ...
C'est vraiment, mais alors VRAIMENT tordu, d'autant plus qu'il n'y a absolument aucune docu sur le net, à part pour faire l'inverse :-)
Merci à tous !
Dim time_total As Date Dim time_avant As Date Dim arrive As Date Dim time_now As Date ' Récupération de l'heure d'arrivée du client Worksheets("PC").Activate Range("h23").Activate time_avant = ActiveCell.Value ' Calcul du temps passé time_total = time_now - time_avant ' Conversion de l'heure en format décimal t1 = time_total t1 = Format(t1, "hh.mm") stime = CStr(t1) sHour = Left(stime, 2) sMinute = Right(stime, 2) iminute = CInt(sMinute) dMinute = iminute / 60 dMinute = Round(dMinute, 2) sminutedec = CStr(dMinute) sminutedec = Mid(sminutedec, 2, Len(sminutedec) - 1) snewTime = sHour & sminutedec dnewtime = CDbl(snewTime) 'Arrondi à 0.25 près avec affichage du zéro du centième dec = Round(dnewtime / 0.25, 0) * 0.25 dec = Format(dec, "##.#0") 'Application du prix sur le temps passé prix = dec * 2
C'est vraiment, mais alors VRAIMENT tordu, d'autant plus qu'il n'y a absolument aucune docu sur le net, à part pour faire l'inverse :-)
Merci à tous !
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
10 août 2010 à 13:59
10 août 2010 à 13:59
Re,
Un peu plus court, du coup je me demande si j'ai vraiment compris ton besoin
C'est vrai qu'il un pb avec mod() en vba qui converti en entier...
A la place essaie avec ça :
J'ai arrondi à 0.5 comme demandé à moment donné, sur tu veux arrondir à 0.25 remplace ...*2)/2 par ...*4)/4
eric
Un peu plus court, du coup je me demande si j'ai vraiment compris ton besoin
C'est vrai qu'il un pb avec mod() en vba qui converti en entier...
A la place essaie avec ça :
Dim time_avant As Date Dim time_total As Date Dim t_decimal As Double time_avant = Worksheets("PC").[H23].Value time_total = (Time - time_avant + 1) - Int(Time - time_avant + 1) t_decimal = Int(time_total * 24 * 2) / 2 ' arrondi 0.5 le plus proche prix = t_decimal *2
J'ai arrondi à 0.5 comme demandé à moment donné, sur tu veux arrondir à 0.25 remplace ...*2)/2 par ...*4)/4
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
10 août 2010 à 14:28
10 août 2010 à 14:28
comme je n'arrive pas à modifier mon message, une petite modif :
car ça arrondissait à la demi inférieure.
J'ai oublié aussi de préciser que les heures inférieures à l'heure actuelle sont bien considérées de la veille.
eric
Sub test() Dim time_avant As Date Dim time_total As Date Dim t_decimal As Double time_avant = Worksheets("PC").[H23].Value time_total = (Time - time_avant) - Int(Time - time_avant) t_decimal = Int(time_total * 24 * 2 + 0.9999) / 2 ' arrondi au 0.5 supérieur End Sub
car ça arrondissait à la demi inférieure.
J'ai oublié aussi de préciser que les heures inférieures à l'heure actuelle sont bien considérées de la veille.
eric