philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 2013
-
8 août 2005 à 13:58
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 2013
-
6 nov. 2005 à 20:38
Bonjour à tous,
Voila j'ai un petit soucis! J'ai réalisé une petite fonction pour additionner des heures :
Public Function AddHours(h1 As String, h2 As String, operation As Integer) As String
If (h1 <> "" And h2 <> "") Then
somme = Val(Format(h1, "hh")) * 3600 + Val(Format(h1, "nn")) * 60 + Val(Format(h1, "ss")) + Val(Format(h2, "hh")) * 3600 + Val(Format(h2, "nn")) * 60 + Val(Format(h2, "ss"))
AddHours = TimeSerial(Str(somme \ 3600), Str((somme - (somme \ 3600) * 3600) \ 60), Str(somme - ((somme \ 3600) * 3600) - ((somme - (somme \ 3600) * 3600) \ 60) * 60))
End If
End Function
En fait je voudrais qu'en ayant :
745:12:20 + 01:00:05 la fonction m'affiche 746:12:25 !
Mais je n'y arrive pas.
Quand j'utilise des trops grandes valeurs pour les heures il fait un peu n'importe quoi. Moi je veux utiliser des journées de 24h alors je me demande si c'est pas selon le calendrier des années (bisextile) que ca met un peu le bazard !!! ...
Mon utilisation est un peu particulière car je ne veux pas nb de jours + heure + minute + seconde mais bien heure + minute + seconde.
Si quelqu'un à une idée à me proposer, je suis tout ouïe ::
Merci d'avance !
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200619 6 nov. 2005 à 13:01
D'abord, excuse-moi de ne pas avoir répondu plus tôt (obligation professionnelles assez prenantes).
Ensuite, voici le code corrigé (honte à moi, je n'avais pas fait tous les tests). Le prob vient des histoires de retenues dans les minutes.
En rouge les corrections :
Function SubHours(h1 As String, h2 As String) As String
Dim t1() As String
Dim t2() As String
Dim t3() As String
Dim tmp As Integer
Dim test As Boolean
Dim RetenueMinutes As Integer
Dim RetenueHeures As Integer
'on teste si h1 est inférieur à h2
'si oui, on inverse les tableaux
If CDate(h1) < CDate(h2) Then
test = True
t1 = Split(h2, ":")
t2 = Split(h1, ":")
End If
'soustraction des secondes
tmp = CInt(t1(2)) - CInt(t2(2))
If tmp >= 0 Then
RetenueMinutes = 0
t3(2) = CStr(tmp)
Else
RetenueMinutes = 1
t3(2) = CStr(tmp + 60)
End If
'soustraction des minutes
tmp = CInt(t1(1)) - CInt(t2(1)) - RetenueMinutes
If tmp >= 0 Then
RetenueHeures = 0
t3(1) = CStr(tmp <STRIKE> - RetenueMinutes</STRIKE>)
Else
RetenueHeures = 1
t3(1) = CStr(tmp + 60 <STRIKE> - RetenueMinutes</STRIKE>)
End If
'soustraction des heures
t3(0) = CStr(CInt(t1(0)) - CInt(t2(0)) - RetenueHeures)
'on formate les heures minutes secondes sur 2 cars
If CInt(t3(0)) < 10 Then t3(0) = "0" & t3(0)
If CInt(t3(1)) < 10 Then t3(1) = "0" & t3(1)
If CInt(t3(2)) < 10 Then t3(2) = "0" & t3(2)
If test Then
'si h1 < h2
SubHours = "-" & Join(t3, ":")
Else
'si h1 >= h2
SubHours = Join(t3, ":")
End If
End Function
Voilà, je pense que ça ira mieux.
Dis-moi si de ton côté c'est OK.
Bonne prog
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
florantanplan
Messages postés76Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention 8 septembre 2006 8 août 2005 à 14:12
Utilise "Dateadd".
Exemple:
Ajout de 3 jours à la date contenu dans la variable "VarDate":
DateAdd("d",3,VarDate)
Ajout de 5 heurers à la date contenu dans la variable "VarDate":
DateAdd("h",5,Vardate)
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 8 août 2005 à 14:34
Oui cela fonctionne mais comment faire pour obtenir directement le nombre d'heures >24.
Car dés qu'en ajoutant avec DateAdd des heures et que le total fait plus que 24h, il inscrit une date devant du genre : 26/04/1900 14:10:00.
C embêtant !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
PtitGrumo
Messages postés205Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention28 novembre 20052 8 août 2005 à 14:36
Salut :)
Petite parenthèse il est normal que cela ne marche plus si tu a trop d'heure car dans ton format tu ne met que 2 'h' fait ceci Format(Time,"hhhh")
Sinon je te propose ceci!
Public function AddHeure(Time1 as string, Time2 as string)
dim h1 as long
dim h2 as long
dim m1 as long
dim m2 as long
Ok ya plein de ligne et plein de variable mais au moins l'écriture de ton code est simple et clair et quand on débute c'est toujours bon pour revenir après 1 an sur son code!
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 8 août 2005 à 14:52
Pour PtitGrumo,
Salut à toi et merci pour ton aide mais ca ne fnctionne pas même avec 'hhhh'. Et avec tes expressions non plus ... ou je comprends peut être rien !!
Mais avec tes expressions comment fais tu pour additionner les deux heuresTime1 et time2?
PtitGrumo
Messages postés205Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention28 novembre 20052 8 août 2005 à 15:11
Oups !
Bien sur que c'est Clng excuse ca m'a échapé comme quoi phil t'es pas si mauvais que ca lol et moi le codeur de la vieille bin jsuis pas si fort que ca mdr lool
Tu as du coup réussi avec clng ? ou ca marche toujours pas?
Public function AddHeure(Time1 as string, Time2 as string)
dim h1 as long
dim h2 as long
dim m1 as long
dim m2 as long
dim Res as long
if isnull(Time1) or isnull(Time2) then exit function
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 8 août 2005 à 15:55
J'ai un textBox qui contient 22:10:00 et quand j'apelle ta fonction,
h1 = clong(format(cdate(Time1),"hhhh")) me renvoi 2222 au lieu de 22. Pourkoi??
J'y comprends plus rien !
Et même en précisant 'hhhh' dans le format, si la somme des deux Time est > à 24h il rajoute une date devant. Il ne va jamais plus loin que 23h ...
Snifffff
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 8 août 2005 à 16:48
Merci à toi CanisLupus ca fnctionne comme je le voulais. Intéressant ton code, je ne conaissais pas les fonctions Split et join ! Je vais essayer de comprendre comment tu as fais.
Je vais juste essayer (avec un TimeSerial je pense) d'aficher par exemple:
220:05:03 plutôt que 220:5:3 pour le côté ésthétique ... je sais je chipotte !
En tout cas merci à toi et à tous ceux qui m'ont aidé !
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200619 8 août 2005 à 17:23
La fonction split() permet de transformer une chaine en tableau en spécifiant un car de séparation (ici ':').
La fonction join() fait l'inverse, elles reconstitue une chaine à partir d'un tableau.
Pour ton problème de format sur 2 caractères, je te suggère de mettre :
If CInt(t3(1)) < 10 Then t3(1) = "0" & t3(1)
If CInt(t3(2)) < 10 Then t3(2) = "0" & t3(2)
avant
AddHours = Join(t3, ":")
Je n'ai pas trouver de méthode plus simple.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 9 août 2005 à 22:28
J'ai testé ta fonction PtitGrumo et ca fonctionne aussi.
Sur ta fonction (CanisLupus) j'ai remplacé les CInt par des Clng dans l'optique ou j'additionnerais 10000:10:00 avec 1000:00:00
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 12 août 2005 à 08:31
C'est encore moi .....
Une question CanisLupus:
Si je veux maintenant réaliser une soustraction d'heures avec toujours ce fameux format étendu pour les heures, me suffit t'il de remplacer les + dans la fonction par des - ??