Calcul heures dans textbox sous vba excel

Résolu
dambreville Messages postés 5 Date d'inscription mardi 24 mars 2009 Statut Membre Dernière intervention 1 juin 2009 - 22 mai 2009 à 12:32
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 22 mai 2009 à 15:28
bonjour à tous,

je coince sur mon code qui veut pas marcher;

J'ai 3 textbox qui reçoivent des heures et des minutes
textbox797 heure arrivée
textbox 798 heure départ
textbox811 résultat (textbox798 - textbox 797)
j'ai réussi  dans les textbox 797 et 798 à faire afficher l'heure en "hh : mm"
j'ai un souci avec le textbox811 qui ne m'affiche pas le résultat (il m'affiche 0)


code textbox797





<hr />
Private Sub TextBox797_AfterUpdate()
Dim H1 As Date
  Dim H2 As Date  H1 CDate(TextBox797.Value "hh:mm")  H2 CDate(TextBox798.Value "hh:mm")
  TextBox811.Value = H2 - H1
End Sub

code  textbox798
<hr />
Private Sub TextBox798_AfterUpdate()
Dim H1 As Date
  Dim H2 As Date  H1 CDate(TextBox797.Value "hh:mm")  H2 CDate(TextBox798.Value "hh:mm")
  TextBox811.Value = H2 - H1
End Sub

code textbox811
<hr />Private Sub TextBox811_AfterUpdate()
Dim H1 As Date
  Dim H2 As Date  H1 CDate(TextBox797.Value "hh:mm")  H2 CDate(TextBox798.Value "hh:mm")
  TextBox811.Value = Format(H2 - H1, "hh:mm")
End Sub

Pouvez vous me donner un coup de main
merci d'avance

5 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mai 2009 à 14:30
hh:mm ?

heure:mois

essaye avec des n, ca ira mieux "hh:nn"

par contre, cette syntaxe:
CDate(TextBox797.Value = "hh:mm")
est completement inédite, felicitations, j'avais jamais vu personne le faire.

syntaxe, bien evidemment a oublier rapidementTu faus simplement un CDate(0) ici...
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
22 mai 2009 à 15:14
Bonjour,

Le développement n'est pas du code écrit "au hasard des caprices", mais doit nécessairement s'appuyer très précisément sur la syntaxe prévue pour la langage que l'on utilise. L'aide en ligne est là pour celà et doit être consultée régulièrement.

Une durée (temps écopulé entre deux instants) n'est pas une heure (l'heure qu'il est) ...

Intéresse-toi sans attendre à la fonction DateDiff...
3
dambreville Messages postés 5 Date d'inscription mardi 24 mars 2009 Statut Membre Dernière intervention 1 juin 2009
22 mai 2009 à 14:35
hh : mm correspond à heure minutes, faut que je remplace par hh:nn?
0
dambreville Messages postés 5 Date d'inscription mardi 24 mars 2009 Statut Membre Dernière intervention 1 juin 2009
22 mai 2009 à 14:39
en fait je voudrais que dans ma textbox811 apparaisse le resultat de ma textbox798 moins ma textbox797(qui sont toutes les 2 en heure : minute) et que mon resultat soit également en heure : minute


quand par exemple j'écris 10:30 ddans ma textbox 797, ca m'écris bien 10:30


11:30 dans ma textbox798, également


mais dans ma textbox811, ca m'écris 0
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mai 2009 à 15:28
t'as rien lu, en fait ?

H1 CDate(TextBox797.Value "hh:mm")

c'est du grand n'importe quoi

découpons

TextBox797.Value = "hh:mm"

ici, un test entre deux chaines de caractère.
un test ? oui, ca renverra donc un boolean (0 ou -1)

ce test, ici, renverra False soit 0
CDate(0) => renvoit donc 0

alors:

H1 CDate(TextBox797.Value "hh:mm")
H2 CDate(TextBox798.Value "hh:mm")
TextBox811.Value = Format(H2 - H1, "hh:mm")

H1 => 0
H2 => 0
TextBox811 contient donc Format(0, "hh:mm")

et je le redis: pour Format, mm concerne le Mois et non les minutes



faire, donc (après avoir bien lu, et sans valider la réponse pour la forme)

Private Sub TextBox811_AfterUpdate()
Dim Delta As Long
If IsDate(TextBox797.Value) And IsDate(TextBox798.Value) Then
Delta = DateDiff("n", CDate(TextBox798.Value), CDate(TextBox797.Value))
TextBox811.Value = FormatDateTime(TimeSerial(0,Delta,0), vbShortTime)
End If
End Sub
0
Rejoignez-nous