Calcul horaire en VBA > 24h

Bonjour à tous,

Je reviens avec un problème d'heure une nouvelle fois.

Dans le fichier joins j'ai 2 textbox ou je saisie des heures de la forme 12:00

2 boutons d'options "Addition" ou "Soustraction" et un label pour le résultat.

Le casse tête : comment faire pour calculer 40:30 + 36:20 = 76:50 ou 40:30 - 36:20 = 04:10

Le tout sans passer par une feuille XL, juste avec du code.

J'avoue m'arracher les cheveux la dessus depuis un bon bout de temps.

Merci pour votre aide

PS : Je veux bien une explication parce que les dates et moi en vba ...

Edit : sa va dans la continuer de ce post si ce n'est qu'on ne peut plus utiliser cdate...

Bonjour,

Ton 1er problème c'est la mise à jour du 09/12 : ton bouton ne fonctionne pas et il est nommé CommandButton21 au lieu de 1.

Supprimer fichiers *.exd du disque système. Dans une fenêtre cmd :

Del c:\*.EXD /s

Si besoin désinstaller :

Mise à jour de sécurité pour Microsoft Office 2007 ( KB2596927 )

Mise à jour de sécurité pour Microsoft Office 2010 ( KB2553154 )

Mise à jour de sécurité pour Microsoft Office 2013 ( KB2726958 )

Ensuite refait ton fichier de test et après on verra ce qui ne marche toujours pas.

eric

Bonjour,

@eriiic : je n'ai pas eu le problème que tu fais remarquer. Le bouton fonctionne et son nom est bien CommandButton1.

@Fred35 : une proposition

A+

Bonjour,

frangy, c'est exactement le résultat que je souhaitais

J'ai modifié le fichier eriiic, bizarrement si je l'ouvre avec office 2013 le bouton est en 1 et en 2003 en 21...

Concernant le calcul

Label1 = Format(Int(Resultat), "00") & ":" & Format(Round((Resultat - Int(Resultat)) * 60, 0), "00")

Format(Int(Resultat), "00") ' on récupère le nombre entier du résultat

Format(Round((Resultat - Int(Resultat)) * 60, 0), "00") ' on récupère les décimals qu'on multiplie *60 pour avoir des secondes

l'arrondit à zéro à quoi il sert ?

Avec Format(Round((Resultat - Int(Resultat)) * 60, 0), "00") ' on récupère les décimales qu'on multiplie *60 pour avoir des minutes.

L'arrondi à zéro décimale sert à pallier le défaut de précision qui peut faire afficher un nombre à plusieurs décimales.

L'utilisation de la fonction Format rend cet arrondi inutile. Tu peux le supprimer.

A+

ok, merci pour ces précisions et d'avoir corriger mon erreur.

bizarrement si je l'ouvre avec office 2013 le bouton est en 1 et en 2003 en 21...

Ca me le fait sur 2003 et 2010. Ton fichier y est inutilisable.

C'est peut-être ça qui fait que cdate() ne passe plus non plus.

Tu devrais repérer quel PC a mal supporté la maj (il suffit d'ajouter un bouton et regarder son n°) et corriger comme je t'ai dit.

eric

Merci eriiic, correction effectué c'est 2013 qui crée les .exd

mais pour les cdate c'est parce que je dépasse 24h je pense dans le textbox

en fait je viens de me rendre compte d'un petit problème sur les soustractions.

Si H1 est inférieur à H2 le résultat n'est pas correct s'il y a des minutes...

H1 15:00

H2 17:00

résultat : -02:00

mais

H1 15:30

H2 17:00

Résultat : -02:30 au lieu de -01:30

Bonjour,

Essaie comme cela

Private Sub CommandButton1_Click()
Dim Heure1 As Double, Heure2 As Double, Resultat As Double
Dim Minute1 As Double, Minute2 As Double
    On Error GoTo Fin
    Heure1 = Split(TextBox1.Value, ":")(0)
    Heure2 = Split(TextBox2.Value, ":")(0)
    Minute1 = Split(TextBox1.Value, ":")(1) / 60
    Minute2 = Split(TextBox2.Value, ":")(1) / 60
    If OptionButton1 = True Then
        Resultat = Heure1 + Heure2 + Minute1 + Minute2
    Else
        Resultat = Heure1 - Heure2 + Minute1 - Minute2
    End If
    Label1 = Format(Fix(Resultat), "00") & ":" & Format((Resultat - Fix(Resultat)) * 60, "00")
Fin:
End Sub

A+

les minutes apparaissait en négatif

en remplaçant

Label1 = Format(Fix(Resultat), "00") & ":" & Format((Resultat - Fix(Resultat)) * 60, "00")

par

Label1 = Format(Fix(Resultat), "00") & ":" & Format(Abs((Resultat - Fix(Resultat)) * 60), "00")

tout semble correct.

J'attends de faire plusieurs test avant de valider.

Merci pour votre aide, les dates et les heures sont ma bête noire en VBA...

Rechercher des sujets similaires à "calcul horaire vba 24h"