Calculer le nombres d'heures avec une multiplication simple

Bonjour j'ai crée un userform mais je n'arrive pas au résultat voulu. je m'explique j'ai la première case qui correspond à un nombre( d'intervention effectuées) la deuxième case correspond a un temps pour une intervention et je souhaite que quand on clique sur calculer apparaisse dans la troisième case les temps totale d'intervention

Exemple simple 2intervention * 0:45mn(par intervention) = 1h30

case 1 CASE 2 Case 3

J’espère avoir était claire merci d'avance pour vos réponses

59classeur1.xlsm (31.87 Ko)

Bonsoir,

Pour faire l'addition d'heures dans Excel, il faut d'abord savoir quelques bases. Pour Excel (et le compilateur VBA), 1 jour est représenté par l'unité soit 1 et donc, l'heure est la 24 ème partie de l'unité soit h = 1 / 24 et par là, la minute est la 1440 ème partie de l'unité soit m = 1 / 24 / 60. Si tu veux additionner des heures et comme dans notre esprit l'heure est représentée par l'unité, il faut qu'on permette à Excel de savoir l'interpréter et il en va de même pour les minutes (et de même pour les secondes). Comme tu applique un formatage, qui soit dit en passant n'est pas l'idéal car avec "CDate" il n'est pas possible de dépasser 24:00, la fonction Excel Text (TEXTE dans une feuille de calcul) permet de dépasser cette limite en adoptant un format particulier qui est d'entourer le "h" de crochets pour indiquer que l'on veut totaliser les heures au delà de 24 h.

Donc pour le formatage je te propose mais là, c'est encore grandement perfectible :

Private Sub Product_Change()

    Product.Text = Application.WorksheetFunction.Text(Product.Text, "[h]:mm")

End Sub

et pour l'addition des heures et minutes :

'normalement, on utilise pour ceci un CommandButton
Private Sub ToggleButton1_Click()

    Dim Heure As Single
    Dim Minute As Single

    'adapte les heures de façon à ce qu'Excel sache les interpréter
    Heure = Split(TextBox2.Text, ":")(0) / 24

    'adapte les minutes de façon à ce qu'Excel sache les interpréter
    Minute = Split(TextBox2.Text, ":")(1) / 24 / 60

    Product.Text = Application.WorksheetFunction.Text(NbHeuresInterventions.Text * (Heure + Minute), "[h]:mm")

End Sub

Normalement, pour ce que tu veux faire, on utilise un "CommandButton" et non un "ToggleButton"

Hervé.

Bonjour Hervé je te remercie de ton aide je début juste avec vba je voulai faciliter la vie de ma femme au boulot et je pense qu'elle va être contente par contre tu parle de commande bouton je l est donc modifié mais qu elle est la différence ?

autre petit question quand je tape l'heure dans la texbox 2 c'est pas très intuitif j ai d'abord 00:00 qui s'affiche des que je tape un chiffre dedans comment lui assigner le format heure plus proprement ?j'ai joint le nouveau fichier modifié

46classeur12.xlsm (38.77 Ko)

Bonjour,

tu parle de commande bouton je l est donc modifié mais qu elle est la différence ?

Un ToggleButton sert à indiquer un état, "enfoncé" ou "relâché" un peut comme une case à cocher alors qu'un CommandButton sert à déclancher une action.

Voici un petit masque de saisie pour les heures. Supprime tout le code que tu as dans le module de l'UserForm et colle celui-ci et teste. Si tu saisie 1,36 ou 1.36 la virgule ou le point se change en deux-points "1:36", ceci permet une saisie plus rapide. La limite du masque est 99:99 sachant que dans la proc de totalisation, les 99 minutes seront changées en 39 minutes et les heures passeront de 99 à 100. Il est possible de grandement améliorer ce code mais ça te donne un bon point de départ :

Private Sub CommandButton1_Click()

    Dim Heure As Single
    Dim Minute As Single

    'adapte les heures de façon à ce qu'Excel sache les interpréter
    Heure = Split(TextBox2.Text, ":")(0) / 24

    'adapte les minutes de façon à ce qu'Excel sache les interpréter
    Minute = Split(TextBox2.Text, ":")(1)

    'rectifie si les minutes sont égales ou dépassent 60
    If Minute > 59 Then

        Minute = Minute - 60
        Heure = Heure + 1

    End If

    Minute = Minute / 24 / 60

    Product.Text = Application.WorksheetFunction.Text(NbHeuresInterventions.Text * (Heure + Minute), "[h]:mm")

End Sub

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    'si le contrôle contient un nombre de caractères
    'supérieur à 4 (à ce stade il en contient en fait déjà 5, la limite étant 99:99)
    'et que ce n'est pas la touche effacement arrière ou supprimer, interdit tout rajout de caractère
    If Len(TextBox2.Text) > 4 And KeyCode <> 8 And KeyCode <> 46 Then KeyCode = 0

    Select Case KeyCode

        'transforme le point et la virgule en deux-points et n'en autorise qu'un
        Case 110, 188, 191

            If InStr(TextBox2.Text, ":") = 0 Then

                KeyCode = 191

            Else

                KeyCode = 0

            End If

        'seulement numérique et suppression
        Case 8, 46, 96 To 105

        Case Else

            KeyCode = 0

    End Select

End Sub

Private Sub ToggleButton2_Click()
Unload UserForm1
UserForm1.Show
End Sub

Private Sub ToggleButton3_Click()
UserForm1.Hide
End Sub

Hervé.

Hervé un grand merci j'ai enfin un userform bien fonctionnel et intuitif ça évitera que ma femme m'appelle tout le temps pour me demander et pourquoi ça fait ça lol un grand merci

Rechercher des sujets similaires à "calculer nombres heures multiplication simple"