Format heure (+ de 24h)...... [Résolu]

ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 30 mai 2006 à 15:21 - Dernière réponse : ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention
- 2 juin 2006 à 05:43
bjr
suite à une saisie dans une form ,et validation ds une bd access,
je fais la somme d'un champs exprimé en heure,

le total s'appelle sommecolonne(que je place dans (txt1.text),mais lorsque cela dépasse 24H il me met une date .... moi je voudrais , si la somme des heures est 32H , qu'il me mette bien 32h dans mon txt1.text=sommecolonne.
merci pour votre aide
patrik
Afficher la suite 

20 réponses

Répondre au sujet
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 2 juin 2006 à 05:43
+2
Utile
bjr
un grand merci pour ton aide,
je pense que j'ai trouvé une solution qui a l'air d'aller.....
Public Sub totpiece()
Dim heure As Integer
Dim minute As Integer
Dim atab() As String
Dim VAR1 As Integer
Dim sql As String
  
  Set ADOsum = New ADODB.Recordset
  sql = "SELECT numero, SUM(duree) AS tot FROM restau GROUP BY numero HAVING (numero= " & y & ")"
  ADOsum.Open sql, cnn, adOpenDynamic, adLockOptimistic, adCmdText
 
  atab = Split(Format(ADOsum("tot"), "##.00"), ",")
        heure = heure + Val(atab(0))
        minute = minute + Val(atab(1))
            If minute >= 60 Then
           heure = (heure + 1)
            Else: heure = heure
           End If
        TxtR(4).Text = Val(heure)
        TxtR(5).Text = Val((minute Mod 60))
End Sub

si ca peut en aider d'autres,
il faudrait juste que je teste ce qu'il me donne comme résultat si je transforme mon fields(2) en format heure
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ecranbleu27
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 30 mai 2006 à 18:32
0
Utile
Salut
A mon avis, tu as utilisé un format DateHeure à la colonne sommecolonne (ou une de tes variables intermédiaire est dans ce format).
Déclare-la en Entier-Long

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Commenter la réponse de cs_Jack
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 30 mai 2006 à 20:52
0
Utile
merci
oui ma colonne est en format heure, je suis peut-etre trop "puriste" !!
j'aurais voulu etre un "hortiste"!!!!!!

mais bon je vais essayer commetu dis......
Commenter la réponse de ecranbleu27
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 05:59
0
Utile
bjr
en fait en changeant le format de la colonne sommecolonne en "entier_long" et en retestant je me suis rappellé que j'avais déjà essayé de le faire, mais là mon probléme est tout autre;
lorsque je fais ma saisie dans ma form de l'heure (qui est donc un entier-long ) si je lui tape 3.30 (donc 3H30) lorsque je valide il me le transforme aussi sec en 3.00 ( si je tape 4.60 ---> 5.00)
et je ne comprends pas pourquoi il arrondi automatiquement.....
dans les deux cas j'ai un bleme.....
HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 09:24
0
Utile
Il te l'arrondi parce que tu est en entier essai de mettre en reel mais je sai plus le nom sa doit etre single
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 10:38
0
Utile
bon j'ai trouvé, pour l'arrondi dans la table access je l'ai mis en réel double,ca marche il n'arrondi plus.
maintenant mon total se fait bien, bon, mais il faut que je transforme en heures puisque j'ai un chiffre.voici le code que je me suis fait
il calcule le total et le transforme en heure mais ya un hic,

dans mon total(var1=sommecolonne+.fields(2))

il ne prend que les dizaines,
donc j'ai un message "indice en dehors de la plage" en ce qui concerne les minutes....puisque ya que les dizaines il doit pas trouver les minutes et bug!

Public Sub totpiece()
Dim heure As Integer
Dim minute As Integer
Dim sommecolonne As Integer
Dim atab() As String
Dim VAR1 As Integer

With ADOREST
While Not (.EOF)
VAR1 = sommecolonne + .Fields(2)
.MoveNext
Wend
End With

If NbrEnreg <> 0 Then
atab = Split(VAR1, ",")
heure = heure + Val(atab(0))
minute = minute + atab(1)
End If
If minute >= 60 Then
heure = (heure + 1)
Else: heure = heure
End If

TxtR(4).Text = Val(heure) & "," & Format(Val((minute Mod 60)), "##,00")
frmrestau.TxtR(4).Text = Format(var1, "###0.00")
End Sub

si quelqu'un peut m'aider
merci
patrik
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 11:04
0
Utile
Je n'ai pas tout compris peut tu donner un exemple de ce que tu veux stp (point de départ: ton total et ce que tu souhaite avoir)pour voir si je peux t'aider
exemple: mon total = 36,5 je souhaite avoir 36h30min c'est sa que tu veu ou autre chose
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 15:04
0
Utile
bjr
je pars d'une saisie dans un form, pour tel travail : tant d'heures effectuées;
ceci incremente bien sur une bd access.
sur ma form j'ai un textbox ou je souhaite avoir le total au fur et a mesure des saisies (validées) sur ce nb d'heures effectuées .
puis un cmd impression dans crystal report.(ou je passe en parametre ce total pour l'avoir en impression avec le détail.
je voudrais effectivement que ce total "d'heures" soit exprimés le plus réalistement possible.
si mon détail d'heures est en "entier", alors oui il me faut le réexprimer en heures (ex : total= 22.90 donc je veux voir apparaite 23.30)
visiblement si je formate mon détail d'heures en format "heure" ,il ne sait pas faire un total superieur à 24H .
je patauge , c'est la derniere chose qu'il me reste à faire pour cloturer mon prog.

le code ennoncé plus est faux.celui- ci passe mieux mais bloque tjrs sur les minutes si il y a 0 apres la virgule (ex 2.00, car lors du rappel du fields(2)de la base access , celui-ci me rapatrie un nb entier lorsqu'il y a un 0 apres la virgule, si j'ai 2,00 dans ma base access il me renvoie 2, et donc erreur sur les minutes)

Public Sub totpiece()
Dim heure As Integer
Dim minute As Integer
Dim x As Integer, y As Integer
Dim atab() As String
Dim VAR1 As Double
With ADOREST
While Not (.EOF)
VAR1 = VAR1 + .Fields(2)
.MoveNext
Wend
End With
atab = Split(VAR1, ",")
heure = heure + Val(atab(0))
minute = minute + atab(1)
If minute >= 60 Then
heure = (heure + 1)
Else: heure = heure
End If
TxtR(4).Text = Val(heure) & "," & Format(Val((minute Mod 60)), "##,0")
End Sub

j'espere avoir été plus clair, merci d'avance.
patrik
Commenter la réponse de ecranbleu27
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 15:11
0
Utile
pour info voici ma form :
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 15:37
0
Utile
Je me pose une question les chiffre qu tu additionne correspondent à des heures ou pas?
Ce que je veu dire c quel format a ton chiffre : 0,50 correspond à 50 min ou 30 min dans ton prog.


Je pense que si tu fait  0,50 + 0,30 + 0,40 tu trouve 1,20

donc si 0,50 correspond à 50min tu as donc 120 min il te suffit donc de faire:
   var1 = var1 * 100
   heure = 0
   do while i<60
      heure=heure+1
      var1 = var1 - 60
   loop
   minute = var1


au contraire si 0,50 corraespond as 30min tu as donc 1,2h dans ce cas
   i=Instr(Var1,",") te renvoi la position de la virgule
   heure= left(Var1, i-1)
   minute = (Var1-heure)*0,6


 


 


 
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 16:35
0
Utile
merci pour ton interet et ta rapidité,
si l'utilisateur tape : 0,50 cela correspond à 50mn,
1,40 à une heure et quarante minutes, logiquement il ne tapera jamais
1,65 mais 2,05 pour 2heures et cinq minutes.
donc ce serait le premier cas, qu'il faut que teste.
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 17:00
0
Utile
Le probleme qui peut donc se poser c'est quand par exemple ton résultat = 10,05
tu sais pas si tu as additionner 5,00 et 5,05 où le résultat est de 10h00
ou 4,55et 5,50 où le résultat est de 10h45

Donc je pense que tu as deux solutions:
soit tu reviens sur la vesion précédente où le résultat ne dépasse pa 24h si tu peu avoir le nombre de jour sa serai ok :
nbJour* 24 + total
sinon il faut que tu inclu dans ta boucle une formule pour transformer 5,50 (pour 5h50) en 5.83 (pour 5,83h):
With ADOREST
   While Not (.EOF)
      i=instr( .Fields(2),",")
      j=left(.Fields(2), i-1)
      k= .Fields(2) / 0,6
      VAR1 = VAR1 + j + k
      .MoveNext
   Wend
End With

A la fin tu devrai avoir un total par ex 36,75 (pour 36,75h) que tu retransforme en 36.45
i = instr(VAR1,",")
heure= left(Var1, i-1)
minute = (Var1-heure)*0,6


 
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 17:22
0
Utile
-ptite question : i, j, k tu les déclares comment en variant ?
le i du premier code ds ta réponse précedente , il correspond à quoi?
VAR1 = VAR1 * 100
   heure = 0
   Do While i < 60
      heure = heure + 1
      VAR1 = VAR1 - 60
   Loop
   minute = VAR1
car lorsque j'ai testé le precedent, il m'a mis dépassement de la
capacité......
 
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 17:32
0
Utile
i j et k sont des variables quelconques i et j sont des entiers et k un réel

en ce qui concerne la solution que tu vien de marquer oublie la car en réfléchissant ma solution ne marche pas car il faudrais que t chiffres soit tjrs inférieur à 1. Quand je parlai de revenir à la version précédente je pensai à celle que tu avai dés le départ.
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 31 mai 2006 à 18:23
0
Utile
bien
mais pour ta derniere,
  j=left(.Fields(2), i-1)
là il me dit : argument ou appel de procédure incorect......
mais ma version avec un nb de jour , c'est pas tres cool, ca fait pas fini.......
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 31 mai 2006 à 20:12
0
Utile
a la place de left tu peu essayé mid : j=mid(.fields(2),1,i-1)
en ce qui concerne ta dernière phrase je ne comprend pas
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 1 juin 2006 à 05:41
0
Utile
bjr
si je garde ma toute premiere version qui au dela de 24H me met une date+ la difference d'heure
 ex : si j'avais 25H il me le transformait en [31/3/1899   01:00:00]
 (et non pas un nb de jours), je trouve que visuelement ca ne le fait pas ,

l'utilisateur va renseigner au fur et a mesure ses travaux effectués, il voudra connaitre son total d'heures qu'il a passé à bosser; en general les heures ca parle plus que des jours, (on peut par contre apres preciser : ca fait tant de jours, de minutes etc....)
c'est comme si tu comptabilises les heures passées à faire un prog, tu regarde le nb d'heure pas les jours......
il n'existe pas un truc en vb qui puisse additionner des heures au delà de 24h....??
patrik
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 1 juin 2006 à 08:09
0
Utile
Que je sache non mais je suis qu'un débutant!!!
Tu as essayé ce que je t'avai mis avec mid à la place de left?

"sinon il faut que tu inclu dans ta boucle une formule pour transformer 5,50 (pour 5h50) en 5.83 (pour 5,83h):
With ADOREST
   While Not (.EOF)
      i=instr( .Fields(2),",")
      j=mid(.Fields(2),1, i-1)
      k= .Fields(2) / 0,6
      VAR1 = VAR1 + j + k
      .MoveNext
   Wend
End With

A la fin tu devrai avoir un total par ex 36,75 (pour 36,75h) que tu retransforme en 36.45
i = instr(VAR1,",")
heure= mid(Var1,1, i-1)
minute = (Var1-heure)*0,6"
Commenter la réponse de billoute 50
ecranbleu27 190 Messages postés vendredi 4 juin 2004Date d'inscription 29 avril 2009 Dernière intervention - 1 juin 2006 à 08:27
0
Utile
non ca ne marche pas avec mid, ca me dit pareil...
par contre , lorsque je calcul mon total avec:
With ADOREST
   While Not (.EOF)
       VAR1 = VAR1 + .Fields(2)
      .MoveNext
   Wend
End With
si la valeur de .fields(2) dans ma table access est de 2,00 (reel double ,2 décimales
j'ai essayé les autres ; pareil!)

il me rappatrie un nb entier (2) comment puis-je rappatrier vraiment 2,00, cad comment garder les zéros aprés la virgule , car pour les minutes il me les faut.
j'ai essayé avec round; cdec mais niet , en mode débogage il me montre tjrs un deux entier
(si j'ai une valeur avec deux chiffres apres la virgule, no problem!)
Commenter la réponse de ecranbleu27
billoute 50 76 Messages postés lundi 20 mars 2006Date d'inscription 30 octobre 2007 Dernière intervention - 1 juin 2006 à 08:33
0
Utile
en ce qui concerne le mid tu as regardé dans l'aide pour voir la syntaxe pour VB6
pour le reste je croi que je vais pas pouvoir t'aider
Commenter la réponse de billoute 50

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.