XL 2016 additionner des heures au delà de 24 heures

  • Initiateur de la discussion Initiateur de la discussion joon49
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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

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

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:
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.
 
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....
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
431
Réponses
6
Affichages
535
  • Question Question
Microsoft 365 Power Query
Réponses
7
Affichages
254
  • Question Question
Réponses
15
Affichages
1 K
Retour