XL 2016 additionner des heures au delà de 24 heures

joon49

XLDnaute Nouveau
bonjour,

je voudrais additionner des heures mais cela dépasse 24 heures.

en plus de cela je veux que cela s'affiche dans un textbox sous format [h]:mm

au delà de 24:00 le format change dans la textbox voir fichier joint

comment puis je procéder?

merci par avance
 

Pièces jointes

  • heures.xlsm
    62.5 KB · Affichages: 7
Solution
ma solution:

Private Sub titulaire_1_AfterUpdate()
Dim moisactu As Integer
moisactu = Month(Date)
Sheets("Liste projets").Select
If Me.Controls("titulaire_1") = ct_1 Then
Exit Sub
Else
For I = 1 To 5


If Me.Controls("label" & I) = ct_1 Then


x1 = CDate(heure_fin)
x2 = CDate(heure_debut)
'x3 = CDate(Controls("textbox" & j))
X = Controls("TextBox" & I)
x3 = TimeSerial(Split(X, ":")(0), Split(X, ":")(1), 0)

X = x3 + (x1 - x2)
'Y = Int(X) * 24
'Z = Format(X - Int(X), "Hh:mm")
'Controls("TextBox" & j).Value = Y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Controls("TextBox" & I).Value = X
y = Int(X) * 24
Z = Format(X - Int(X), "Hh:mm")
Controls("TextBox" & I).Value = y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Else
End If
Next I...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Joon,
Vous devriez dire "quoi ajouter à quoi", et où mettre le résultat.
Alors j'ai rajouté un textbox pour simplifier.
En PJ un essai simple en utilisant une notation texte :
VB:
    NbH = 24 * Application.Sum([E9:I9])
    NbHaff = Int(NbH) & ":" & Int(60 * (NbH - Int(NbH)))
    saisiegroupe.TextBox6 = NbHaff
Il y a surement plus élégant, mais en attendant ... :)
 

Pièces jointes

  • heures.xlsm
    47.9 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
En remettant le même fichier, en répétant la même question, vous ne ferez pas avancer les choses.
Vous avez deux réponses qui sont :
VB:
    'Sylvanu
    NbH = 24 * Application.Sum([E9:I9])
    NbHaff = Int(NbH) & ":" & Int(60 * (NbH - Int(NbH)))
    saisiegroupe.TextBox6 = NbHaff
    'Hasco
    saisiegroupe.TextBox7 = Application.Text(Application.Sum([E9:I9]), "[h]:mm")
    
    saisiegroupe.Show
La solution de Hasco est plus élégante, mais les deux codes donnent le même résultat, voir PJ :
1684829979518.png

Donc en quoi ce résultat 84:45 ne vous va pas ? Donnez nous votre attendu.
 

Pièces jointes

  • heures (1).xlsm
    47.2 KB · Affichages: 2

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Je ne comprends pas.
Ou alors vous attendez peut-être :
Application.Text(range("E9"),"[h]\h mm\m\n")
qui vous affichera : "36h 45mn"

Si c'est du tout cuit que vous attendez alors faites attention à ne pas prendre froid la nuit et prévoyez d'attendre longtemps.

Faute de meilleurs explications, ce sera ma dernière intervention
 
Dernière édition:

joon49

XLDnaute Nouveau
oui je vois bien cela si la valeur est juste un affichage

Private Sub titulaire_2_AfterUpdate()
Dim moisactu As Integer
moisactu = Month(Date)
Sheets("Feuil1").Select

For j = 1 To 5


If Me.Controls("titulaire_2") = (Cells(7, 4 + j)) Then
x1 = CDate(heure_fin)
x2 = CDate(heure_debut)
x3 = CDate(Controls("textbox" & j))


X = x3 - (x1 - x2)

Controls("TextBox" & j).Value = X
Else
End If
Next j

End Sub
mais pour les combolist modifié

x3=cdate(Application.Text(Cells(moisactu + 4, 5), "[h]:mm")) ne marche pas.
 

Hasco

XLDnaute Barbatruc
Repose en paix
C'est à vous de vous assurer que vous passez bien une date à votre fonction et pas n'importe quoi
J'ai largement répondu à la question telle quelle était posée en post 1. Je n'irai pas plus loin, si ce n'est de vous conseiller d'apprendre le vba Pas à pas et non en vous lançant dans une usine à gaz.
Et je répète que si c'est du tout cuit que vous attendez, alors attendez....
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Utilisez peut être cette paire de Property Let et Get :
VB:
Private Property Let HeureTBx(ByVal TBx As MSForms.TextBox, ByVal RHS As Double)
   TBx.Text = WorksheetFunction.Text(RHS, "[h]:mm")
   End Property
Private Property Get HeureTBx(ByVal TBx As MSForms.TextBox) As Double
   Dim T() As String
   T = Split(TBx.Text, ":")
   HeureTBx = TimeSerial(T(0), T(1), 0)
   End Property
Private Sub TextBox1_Enter() ' juste pour tester (trop compliqué votre UserForm à cette heure ci …)
   HeureTBx(TextBox1) = 49 / 48
   MsgBox TextBox1.Text & vbLf & HeureTBx(TextBox1)
   End Sub
 

joon49

XLDnaute Nouveau
ma solution:

Private Sub titulaire_1_AfterUpdate()
Dim moisactu As Integer
moisactu = Month(Date)
Sheets("Liste projets").Select
If Me.Controls("titulaire_1") = ct_1 Then
Exit Sub
Else
For I = 1 To 5


If Me.Controls("label" & I) = ct_1 Then


x1 = CDate(heure_fin)
x2 = CDate(heure_debut)
'x3 = CDate(Controls("textbox" & j))
X = Controls("TextBox" & I)
x3 = TimeSerial(Split(X, ":")(0), Split(X, ":")(1), 0)

X = x3 + (x1 - x2)
'Y = Int(X) * 24
'Z = Format(X - Int(X), "Hh:mm")
'Controls("TextBox" & j).Value = Y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Controls("TextBox" & I).Value = X
y = Int(X) * 24
Z = Format(X - Int(X), "Hh:mm")
Controls("TextBox" & I).Value = y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Else
End If
Next I

For j = 1 To 5


If Me.Controls("titulaire_1") = (Cells(9, 11 + j)) Then
x1 = CDate(heure_fin)
x2 = CDate(heure_debut)
'x3 = CDate(Controls("textbox" & j))
X = Controls("TextBox" & j)
x3 = TimeSerial(Split(X, ":")(0), Split(X, ":")(1), 0)

X = x3 - (x1 - x2)
'Y = Int(X) * 24
'Z = Format(X - Int(X), "Hh:mm")
'Controls("TextBox" & j).Value = Y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Controls("TextBox" & j).Value = X
y = Int(X) * 24
Z = Format(X - Int(X), "Hh:mm")
Controls("TextBox" & j).Value = y + Split(Z, ":")(0) & ":" & Split(Z, ":")(1)
Else
End If
Next j
End If
ct_1 = Me.Controls("titulaire_1")


End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 183
Membres
112 677
dernier inscrit
Justine11