VBA format heure supérieur à 24:00

kisscool67

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord je dois dire que je débute dans le vba.

J'essaie de créer un outil pour suivre les heures supplémentaires et complémentaires effectuées pour chaque contrat horaire, Tps partiel et tps plein, via excel vba.

Le but est d'obtenir un tableau récap pour une semaine complète où figure chaque salarié avec chacun leur nombre d'HS.

Chaque salarié pointe lorsqu'il se trouve à l'agence et selon la situation, ils peuvent aussi avoir des missions à l'extérieur. Le problème est donc que leur temps de travail hebdomadaire doit être reconstituer avant de calculer leur HS.

J'ai donc créé un USF où figure plusieurs textbox dans lesquels je saisie la durée des heures pointés et la durée des missions et le total doit s'afficher dans un autre textbox. Le problème est que le cumul de toutes ces heures dépasse forcément les 24:00.

J'ai visité plusieurs forum, site etc mais je n'ai pas trouvé ce que je cherché.

Y a t il un moyen pour que ce textbox affiche un total supérieur à 24:00?

Voici pour l'instant ce que j'ai fait avec l'aide de ce que j'ai pu trouver sur internet.


Private Sub UserForm_Initialize()
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
End Sub


Private Sub CommandButton1_Click()
'calculette horaire total<24h

Dim h1 As Date
Dim h2 As Date
Dim h3 As Date
Dim h4 As Date

h1 = 0
h2 = 0
h3 = 0
h4 = 0

h1 = CDate(TextBox1.Value)
h2 = CDate(TextBox2.Value)
h3 = CDate(TextBox3.Value)
h4 = CDate(TextBox4.Value)

TextBox5.Value = Format(h1 + h2 + h3 + h4, "hh:mm")


Merci d'avance pour vos conseils.

Kisscool67
 

Dranreb

XLDnaute Barbatruc
Re : VBA format heure supérieur à 24:00

Bonjour.

Essayez de tirez parti de ces 2 procédures :
VB:
Property Let Heures(ByVal TBx As MSForms.TextBox, ByVal ValCel)
Dim H As Double
H = ValCel * 24 + 0.00001
TBx.Text = Int(H) & ":" & Format(Int((H - Int(H)) * 60), "00")
End Property
Property Get Heures(ByVal TBx As MSForms.TextBox)
Dim T() As String
T = Split(TBx.Text & ":", ":")
Heures = (T(0) + T(1) / 60) / 24
End Property
VB:
Heures(Me.TextBox1) = 1.52083333333333 ': devrait y afficher "36:30"
Et ceci devrait passer aussi :
VB:
Heures(TextBox5) = Heures(TextBox1) + Heures(TextBox2) + Heures(TextBox3) + Heures(TextBox4)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA format heure supérieur à 24:00

Oui mais avec vous essayé de les appliquer conformément aux 2 exemples ?

Une procédure Property Get est très voisine d'une procédure Function, elle renvoie une valeur.
La différence c'est qu'elle admet un pendant de même nom comme Property Let.
La Property Let ne renvoie pas de valeur, mais doit avoir les mêmes paramètres que la Property Get et un de plus. Celui ci représente une valeur qu'on doit lui spécifier derrière un signe "=" d'affectation.
 
Dernière édition:

kisscool67

XLDnaute Nouveau
Re : VBA format heure supérieur à 24:00

Salut alex973,

J'ai juste copier le code vb proposé par Dranreb et je l'ai collé avant la macro qui en a besoin. Voir ci dessous.

Pour ma part, ca fonctionne bien.

En cas de problème donne plus de détail ou laisse une copie de ton fichier.

A+ alex973

Property Let Heures(ByVal TBx As MSForms.TextBox, ByVal ValCel)
Dim H As Double
H = ValCel * 24 + 0.00001
TBx.Text = Int(H) & ":" & Format(Int((H - Int(H)) * 60), "00")
End Property
Property Get Heures(ByVal TBx As MSForms.TextBox)
Dim T() As String
T = Split(TBx.Text & ":", ":")
Heures = (T(0) + T(1) / 60) / 24
End Property

Private Sub CommandButton1_Click()
'calculette horaire total<24h

Heures(TextBox11) = Heures(TextBox1) + Heures(TextBox2) + Heures(TextBox3) + Heures(TextBox4) + Heures(TextBox5) + Heures(TextBox6) + Heures(TextBox7) + Heures(TextBox8) + Heures(TextBox9) + Heures(TextBox10)

End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : VBA format heure supérieur à 24:00

Bonsoir à tous

un autre exemple

Code:
Private Sub CommandButton1_Click()
t1 = CDate(TextBox1.Value)
t2 = CDate(TextBox2.Value)
t3 = CDate(TextBox3.Value)
t4 = CDate(TextBox4.Value)
On Error Resume Next
x = t1 + t2 + t3 + t4
Me.TxtHeure = CStr((Int(x) * 24) + DatePart("h", (x))) & ":" & Format(x, "Nn")
End Sub
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : VBA format heure supérieur à 24:00

Bonsour®

autre alternative...:rolleyes:

VB:
Private Sub CommandButton1_Click()
 'calculette horaire total<24h
 Dim FormatHH As String
       FormatHH = Chr(34) & Chr(91) & "hh" & Chr(93) & ":mm" & Chr(34)
'---- utiliser une cellule inutilisée non protégée ex: IV1
       [IV1]= CDate(TextBox1.Value)+CDate(TextBox2.Value)+ CDate(TextBox3.Value)+ CDate(TextBox4.Value)
       Me.TextBox5.Value = Evaluate("=TEXT(IV1 ," & FormatHH & ")")
       [IV1].Clear
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Re : VBA format heure supérieur à 24:00

Bonsour®
autre alternative sans cellule intermédiaire :
VB:
Private Sub CommandButton1_Click()
Dim hh_5 As Double
hh_5 = CDate(TextBox1.Value)+CDate(TextBox2.Value)+ CDate(TextBox3.Value)+ CDate(TextBox4.Value)
Me.TextBox5.Value = Evaluate("=TEXT(" & Application.Substitute(CStr(hh_5), ",", ".") & " ,""[hh]:mm"")")
End Sub
 

alex973

XLDnaute Nouveau
Re : VBA format heure supérieur à 24:00

merci
La derniere solution de Modeste geedee fonctionne tres bien.
Mais j'ai un autre soucis sur la répartition des heures et sur les reports des infos dans des labelbox (erreur qualificateur incorrect).
Qui pourrais à répartir les heures correctement (35 heures normales et si.... 8 heures sup à 25% et le reste a 50%)
A toute fins utiles, ci joint une partie de mon fichier
D'avance merci a tous
Amicalement
Alex973
 

Pièces jointes

  • ALEX973-HEURES.xlsm
    156.6 KB · Affichages: 96

alex973

XLDnaute Nouveau
Re : VBA format heure supérieur à 24:00

J'oubliais, je n'arrive pas non plus a effectuer un controle cohérence sur les heures saisies. Il faut que l'heure de fin du matin ne soit pas inférieure à celle du début. Idem pour les apres midi.
merci
alex973
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 893
Membres
103 404
dernier inscrit
sultan87