Calcule d'heure sur deux MaskedTextBox Vb.net 2008 [Résolu]

fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention - 15 nov. 2008 à 02:17 - Dernière réponse : fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 19 nov. 2008 à 14:44
3
Merci
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 

Merci cs_fauve 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_fauve
Meilleure réponse
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 20 nov. 2008 à 16:40
3
Merci
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 

Merci cs_fauve 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_fauve
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 15 nov. 2008 à 20:51
0
Merci
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 
Commenter la réponse de cs_fauve
fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention - 16 nov. 2008 à 16:59
0
Merci
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.
Commenter la réponse de fadan
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 17 nov. 2008 à 17:14
0
Merci
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 
Commenter la réponse de cs_fauve
cs_fauve 661 Messages postés vendredi 2 décembre 2005Date d'inscription 23 mars 2011 Dernière intervention - 17 nov. 2008 à 17:28
0
Merci
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 
Commenter la réponse de cs_fauve
fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention - 18 nov. 2008 à 18:11
0
Merci
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
Commenter la réponse de fadan
fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention - 20 nov. 2008 à 16:30
0
Merci
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
Commenter la réponse de fadan
fadan 14 Messages postés jeudi 30 octobre 2008Date d'inscription 22 janvier 2009 Dernière intervention - 21 nov. 2008 à 11:35
0
Merci
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
Commenter la réponse de fadan

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.