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 !
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 19 août 2005 à 10:46
salut,
J'ai testé la fonction de soustraction et ca fonctionne. Mais au départ, ca beugué alors j'ai épluché le code et il y'a juste une petite erreur de syntaxe de rien du tout à la fin. Je te le dis au cas où quelqu'un d'autre voudrais utiliser le code.
L'erreur se situe à la première ligne (indice de boucle de t3):
If CInt(t3(0)) < 10 Then t3(0) = "0" & t3(1)
If CInt(t3(1)) < 10 Then t3(1) = "0" & t3(1)
If CInt(t3(2)) < 10 Then t3(2) = "0" & t3(2)
Correction :
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)
J'ai compris en gros la fonction (addition OK) mais la soustraction est plus balaise et faudra que je me prenne le temps de bien comprendre ... J'ai déjà appris la fonction SPLIT qui est une révolution pour moi !
Si j'arrive à finir mon appli je te montrerais si tu veux la voir ! Ca sera en grande partie grâce à toi ....
Bye
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 19 août 2005 à 12:50
Exact Philippe, une erreur de copier/coller.
Un autre bug possible, que je viens de voir en relisant le code, si h1 est < h2 ça donnera un résultat faux. Je ne sais pas si ça risque d'arriver dans ton cas mais bon, vaut mieux le gérer. Je te poste une correction cet après-midi.
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200620 19 août 2005 à 16:08
Bug réparé, j'en ai profité pour changer les t3(1) = "-1"
par RetenueMinutes et
t3(0) = "-1" par RetenueHeures. D'abord c'est plus parlant et surtout plus élégant et plus rapide (ça évite quelques conversions).
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 CInt(t1(0)) < CInt(t2(0)) _
Or (CInt(t1(0)) = CInt(t2(0)) And CInt(t1(1)) < CInt(t2(1))) _ Or (CInt(t1(0)) CInt(t2(0)) And CInt(t1(1)) CInt(t2(1)) And CInt(t1(2)) = CInt(t2(2))) 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))
If tmp >= 0 Then
RetenueHeures = 0
t3(1) = CStr(tmp - RetenueMinutes)
Else
RetenueHeures = 1
t3(1) = CStr(tmp + 60 - RetenueMinutes)
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
Bonne prog
-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 2 nov. 2005 à 12:01
Bonjour CanisLupus,
J'en reviens à toi aujourd'hui car j'ai constaté un petit beug dans la fonction de soustraction des heures que tu m'avais gentillement confectionné. J'ai epluché le code, et tout me paraît logique !
Voici l'erreur que je constate quand j'utilise la fonction (h1 est toujours > à h2 normalement).
Résultat de l'opération :
novembre=01:0-1:38
J'ai ce - qui apparaît au niveau des minutes et je ne comprends pas pourquoi !!! La fonction addition fonctionne à merveille, mais la soustraction finit toujours par ma planter l'appli. J'ai bien essayé de débeuger mais sans succés, ce - apparaît un peu aléatoirement .... avec jamais le même nombre de secondes.
J'essaye encore de chercher mais tout me paraît bon, je séche !
En tout cas, merci de ton aide si tu veux bien jeter un petit coup d'oeil !
Salut !
Philippe
Vous n’avez pas trouvé la réponse que vous recherchez ?
philippe laschweng 1
Messages postés278Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention13 avril 20132 6 nov. 2005 à 20:38
Bah je crois que ca fonctionne! Problème résolu !!!
J'ai retesté le prog dans les mêmes conditions, et ca n'a pas planté. Donc un GRAND MERCI à toi pour ton aide et ta disponibilité. J'ai maintenant compris comment fonctionnait la fonction. Sans ton aide pour les deux fonctions d'addition et de soustraction, je ne serais pas arrivé à finaliser l'application...