Calcule d'heure sur deux MaskedTextBox Vb.net 2008

Résolu
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009 - 15 nov. 2008 à 02:17
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009 - 21 nov. 2008 à 11:35
Bonjour le forum,
Etant débutant en vb.net 2008,
J'ai peiné, mais j'ai enfin réussi à créer deux MaskedTextBox (heureDebut) et (heureFin) avec quelques controles.
J'ai éssayé un tas de trucs mais il m'indique l'opération éffectuée "timeSpan" n'est pas un menbre windows.System.
Pourriez vous m'aidez à éffectuer le calcul pour afficher dans un label, la durée (heureFin - heureDebut)
Merci d'avance de me prêter votre temps.
fadan,
dont voici un bout de code:Private

Sub frm_journalier_Load()

Me
.Mask_heureDebut.Mask =
"00:00"
Me.Mask_heureDebut.ValidatingType =
GetType(System.DateTime)

Me.Mask_heureFin.Mask =
"00:00"
Me.Mask_heureFin.ValidatingType =
GetType(System.DateTime)

Private
Sub Mask_heureFin_TypeValidationCompleted()

If (
Not e.IsValidInput)
Then
      MessageBox.Show (".......
 ")
      Mask_heureFin.Text =
""
      Mask_heureFin.Select()

Else
      Dim heureFin
As DateTime =
CDate(e.ReturnValue)

      Dim heureDebut
As DateTime
      heureFin = Mask_heureFin.Text
      heureDebut = Mask_heureDebut.Text

If (heureFin = heureDebut)
Then
      MessageBox.Show(
"........")
      Mask_heureFin.Text =
""
      Mask_heureFin.Select()
      e.Cancel =
True
End
If
If (heureFin < heureDebut)
Then
       MessageBox.Show(
"..........")
      Mask_heureFin.Text =
""
      Mask_heureFin.Select()
      e.Cancel =
True
End
If
End
If
End
Sub

9 réponses

cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
19 nov. 2008 à 14:44
Salut,

Pour empêcher que HeureFin soit plus grand que HeureDebut :

If Date.Compare(HeureDebut, HeureFin) > 0 Then
            MsgBox("Attention !!! HeureDebut est plus grand que HeureFin... La différence des deux entrainera un résultat avec une heure négative")
End If

++

Fauve
<hr size="2" width="100%" />Pensez : Réponse Acceptée 
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
20 nov. 2008 à 16:40
Salut,

Mieux vaut privilégier les méthodes existantes comme Compare.

Date.Compare a été justement crée afin de comparer des dates ou des heures, ce serait idiot de ne pas l'utiliser

++

Fauve
<hr size="2" width="100%" />Pensez : Réponse Acceptée 
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
15 nov. 2008 à 20:51
Salut,

Voici une des nombreuses manières permettant de calculer la différence entre deux heures :

Dim HeureDebut, HeureFin As New DateTime
' On déclare deux variables DateTime

Dim Intervalle_Heures_Minutes As String
' On déclare une variable de type String qui
' contiendra la différence entre HeureDebut
' et HeureFin

HeureDebut = CDate(MaskedTextBox1.Text)
' Note : Le contenu de la MaskedTextBox1 doit
'        être de la forme hh:mm:ss
' On récupère le contenu de la MaskedTextBox1
' et on le convertit en une Date

HeureFin = CDate(MaskedTextBox2.Text)
' Note : Le contenu de la MaskedTextBox2 doit
'        être de la forme hh:mm:ss
' On récupère le contenu de la MaskedTextBox2
' et on le convertit en une Date

Intervalle_Heures_Minutes = HeureFin.Subtract(HeureDebut).ToString
' On effectue la différence entre les deux heures
' et on stocke le tout dans une variable de type
' String après avoir fait bien entendu convertit
' le TimeSpan en String

MsgBox(Intervalle_Heures_Minutes)
' On affiche la différence entre les deux heures

++

Fauve
<hr size="2" width="100%" />Pensez : Réponse Acceptée 
0
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009
16 nov. 2008 à 16:59
Bonjour,
Il me doit de commencer par te remercier pour la symphathie que tu as envers les débutants, qui comme moi  n'ont aucun bagage en vb.net.
Cela m'incite à ne pas me décourager et continuer à persévérer.
Encore merci.
J'ai donc repris ton code et essayé de le décortiquer et en ajoutant un format "HH:mm" cela fonctionne.
Un seul hic.. il me donne le résultat  en HH:mm:ss, j'ai poutant cherché mais je n'arrive pas a le mettre au format  HH:mm. Et je me demande si cela n'est pas provoqué par :

Me.Mask_heureDebut.Mask =
"00:00"
Me.Mask_heureDebut.ValidatingType =
GetType(System.DateTime)
Me.Mask_heureFin.Mask =
"00:00"
Me.Mask_heureFin.ValidatingType =
GetType(System.DateTime)

Voici un bout de code que j'ai ajouté pour le format,
HeureDebut =

CDate(Mask_heureDebut.Text)
HeureDebut = Format(HeureDebut,
"HH:mm")
'     (de même pour HeureFin)

Lbl_duree.Text = Intervalle_Heures_Minutes

Merci de fadan.
0

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

Posez votre question
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
17 nov. 2008 à 17:14
Salut,

En partant de mon code, il suffit de remplacer la ligne suivante :

Intervalle_Heures_Minutes = HeureFin.Subtract(HeureDebut).ToString

<hr size="2" width="100%" />
Par

<hr size="2" width="100%" />
Intervalle_Heures_Minutes = HeureFin.Subtract(HeureDebut).Hours.ToString + ":"

If HeureFin.Subtract(HeureDebut).Minutes < 10 Then
     Intervalle_Heures_Minutes += "0"
End If
Intervalle_Heures_Minutes += HeureFin.Subtract(HeureDebut).Minutes.ToString

++

Fauve
<hr size="2" width="100%" />Pensez : Réponse Acceptée 
0
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
17 nov. 2008 à 17:28
Ou dans ton cas,

Avant d'utiliser la variable Intervalle_Heures_Minutes
, pour la mettre au format "hh:mm" :

Voici un petit exemple :

Intervalle_Heures_Minutes = "12:43:51"

Intervalle_Heures_Minutes = Intervalle_Heures_Minutes.Substring(0,Intervalle_Heures_Minutes.LastIndexOf(":"))

MsgBox(Intervalle_Heures_Minutes)
' Affichera 12:43

++

Fauve
<hr size="2" width="100%" />Pensez : Réponse Acceptée 
0
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009
18 nov. 2008 à 18:11
Bonjour,
Que dire, et bien ... Que du bonheur, pour avoir eu la gentillesse de me répondre mais aussi un exemple pour faciliter la compréhention.
Je n'en reste pas là, même si cela n'est pas évident.
Je cherche maintenant à ce que le code n'affiche pas le résultat des heures négatives dans le Label
car j'ai mis un contrôle sur le textbox "heureFin" qui vérifie si l'heure de fin est <= que l'heureDebut.
Encore merci pour tes explications.
Amicalement, fadan
0
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009
20 nov. 2008 à 16:30
Bonjour,
Encore merci, grâce à ta gentillesse et ces quelques lignes de codes j'ai appris à déclarer des variables, à  formater, à soustraire, à comparer et bien d'autres choses et j'avoue qu'il y avait encore deux mois, je m'arrachai les cheveux et je ne pensai pas y arriver.
Pour comparer les dates et heures, j'utilisai ce code :

If (heureFin <= heureDebut) Then
MessageBox.Show("Erreur")
Mask_heureFin.Text = ""
Mask_heureFin.Select()
End If
J'avais déjà fait lecture de compare sans pouvoir l'inserer dans le code, car j'utilisai quelque chose du style : if duree.Compare(heureDebut,heureFin) => 0 then ....
Et quand j'ai reçu ton message, je me suis dit que j'était pas loin.
Tu as été plus rapide que moi et je t'en remercie.
Une question à un pro.
D'un point de vue programmation, est-il préférable (Compare) plutôt que le code de contrôle que j'utilisai décrit ci-dessus?
Encore merci.
fadan
0
fadan Messages postés 14 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 22 janvier 2009
21 nov. 2008 à 11:35
Bonjour,
Merci de la réponse, c'est ce que je pensai également pour (compare) et puisque je débute pourquoi utiliser d'anciennes méthodes.
Et si je peux encore abuser de ton temps car zut... J'ai encore un petit souci., je cherche mais ne trouve pas la solution.
J'affiche heureDebut dans un label et si je change l'heureDebut plusieur fois, elle est bien affichée dans le label.
Mais pour l'heurFin il ne me fait le calcul qu'à la première entrée, c.a.d:
j'entre heureDebut = affiche bien heureDebut même si je modifie plusieurs fois.
j'entre heureFin= affiche bien le Substract dans le label, jusque là parfait.
Mais si je change  l'heureFin en ne modifiant pas heureDebut il n'affiche plus le calcul dans le label..
voici le code ;
Et encore mille merçi
fadan.

heureDebut
If (
Not e.IsValidInput)
Then...(message erreur)
Else
Lbl_Amplitude.Text = Format(heureDebut,
"HH:mm").ToString
-----------------------------------------------------------------------------------
Private

Sub Mask_heureFin_TypeValidationCompleted()

If (Not e.IsValidInput) Then...
(message erreur pour heureFin)
Else
Dim heureDebut, heureFin
As
New DateTime

Dim duree
As
String
heureDebut =
CDate(Mask_heureDebut.Text)
heureDebut = Format(heureDebut,
"HH:mm")
heureFin =
CDate(Mask_heureFin.Text)
heureFin = Format(heureFin,
"HH:mm")
duree = heureFin.Subtract(heureDebut).Hours.ToString +
":"
If heureFin.Subtract(heureDebut).Minutes < 10
Then
duree +=
"0"
duree += heureFin.Subtract(heureDebut).Minutes.ToString
Lbl_Amplitude.Text = duree.ToString
End

If
If
Date.Compare(heureDebut, heureFin) >= 0
Then
Lbl_Amplitude.Text =
""
Mask_heureFin.Select()
MessageBox.Show(
"Erreur
End
If
End
If
End
Sub
0
Rejoignez-nous