Macro calcul d'heure

Bonjour,

j'ai commencé une macro, où je voudrais rentrer mes heures de travail, et à la fin il me calcul le nombre d'heures effectué pour une journée et me rempli la cellule sélectionné au départ.

mon problème est que je n'arrive pas à convertir mes textbox au format hh:mm, ou encore le résultat final.

auriez-vous une idée de comment je peut faire ?

40calculheures.xlsx (12.58 Ko)

Bonjour

Il n'y a absolument rien dans ton fichier comment veux-tu trouver de l'aide sur le forum?

Cordialement

j'ai oublié d'enregistrer... je le refais et le renvoie de suite

j'ai oublié d'enregistrer... je le refais et le renvoie de suite

Il faut surtout enregistrer en xlsm et pas en xlsx sinon tout le vba disparaît

En attendant un exemple avec deux textbox sur un userform.

Paramètre pour pouvoir utiliser le point du clavier inclus car sera remplacé par " : " en sortant de la textbox.

on peut donc écrire 6.45 qui sera automatiquement converti en 06:45

Nota tu remarqueras toutefois que les calculs sont limités car dans ce cas pour les heures après minuit le vba ne va pas détecter le

changement de jour et le calcul buguera.

voici le fichier.

65calculheures.xltm (18.97 Ko)

Désolé je comprends rien a tes with active cells

Ajoute une textbox total des heures et fais ton range à la fin ce sera plus clair.

Regarde le format du code dans le fichier précédent pour les soustractions heures : cdate(textbox.value) - …...

Désolé je comprends rien a tes with active cells

Ajoute une textbox total des heures et fais ton range à la fin ce sera plus clair.

Regarde le format du code dans le fichier précédent pour les soustractions heures : cdate(textbox.value) - …...

je suis débutant en vba je pioche un peu partout sur différent site pour faire mes truc....

le active cells c'est quand je suis sur une cellule, et que je lance la macro, une fois le calcul fais, il remplit automatiquement la case de mon fichier excel ou j'étais, enfin il me semble.

çà je pense avoir compris, mais si tu fais :

With active cells ….. = calcul des heures matin

Ensuite active cells … = calcul heures après midi

alors ton 2ème calcul écrase le résultat du premier.

çà je pense avoir compris, mais si tu fais :

With active cells ….. = calcul des heures matin

Ensuite active cells … = calcul heures après midi

alors ton 2ème calcul écrase le résultat du premier.

je vais essayer de chercher et faire un truc a partir du fichier que vous m'avez fait. si je trouve pas je reviendrais vers vous.

Merci.

je vais essayer de chercher et faire un truc a partir du fichier que vous m'avez fait. si je trouve pas je reviendrais vers vous.

Merci.

pas de souci on sera là quand tu auras avancé.

Pourquoi en VBA ? surtout que l'on traîne des difficultés de format car les textbox sont du texte !

1- d'abord, si besoin, dédie un onglet à la saisie, tu auras des mises en forme correctes des heures, nombres, dates etc. !

https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438

2- pas besoin de VBA, un tableau + un TCD suffisent

exemple de calcul avec prise en compte des heures de nuit

https://www.excel-pratique.com/fr/telechargements/gestion-du-personnel/calcul-heures-nuit-excel-no450

Pourquoi en VBA ? surtout que l'on traîne des difficultés de format car les textbox sont du texte !

1- d'abord, si besoin, dédie un onglet à la saisie, tu auras des mises en forme correctes des heures, nombres, dates etc. !

https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438

2- pas besoin de VBA, un tableau + un TCD suffisent

exemple de calcul avec prise en compte des heures de nuit

https://www.excel-pratique.com/fr/telechargements/gestion-du-personnel/calcul-heures-nuit-excel-no450

c'est pour mettre la macro une fois finis, dans un calendrier perpétuel. Je clique sur le jour souhaité, je rentre mes horaires et quand je valide il remplit ma case.

ok

Le mieux serait de distinguer les heures et minutes dans 2 textboxes comme ici https://forum.excel-pratique.com/viewtopic.php?p=676441#p676441

Une autre proposition, avec

  • - contrôle des données entrées
  • - prise en compte des heures après minuit

J'ai repris aussi la possibilité que prévoit Xmenpl que je salue de remplacer les : par . pour faciliter la saisie

Private Sub cmd_OK_Click()

    If invalid(txt_matin_depart.Text) Or invalid(txt_matin_fin.Text) Or invalid(txt_apresmidi_depart.Text) Or invalid(txt_apresmidi_fin.Text) Then
        MsgBox "Valeur incorrecte !"
        Exit Sub
    End If

    If txt_apresmidi_depart.Text <> "" And txt_matin_fin.Text <> "" Then
        If horaire(txt_apresmidi_depart.Text) < horaire(txt_matin_fin.Text) Then
            MsgBox "Chevauchement d'horaires !"
            Exit Sub
        End If
    End If

    If txt_matin_depart.Text <> "" And txt_matin_fin.Text <> "" Then
        matin = (horaire(txt_matin_fin.Text) - horaire(txt_matin_depart.Text))
        If matin < 0 Then matin = matin + 1
    End If

    If txt_apresmidi_depart.Text <> "" And txt_apresmidi_fin.Text <> "" Then
        apm = (horaire(txt_apresmidi_fin.Text) - horaire(txt_apresmidi_depart.Text))
        If apm < 0 Then apm = apm + 1
    End If

    Selection = matin + apm

    UserForm1.Hide

End Sub

Function horaire(valeur As String) As Double
    horaire = Val(Split(Replace(valeur, ".", ":") & ":0", ":")(0)) / 24 + _
              Val(Split(Replace(valeur, ".", ":") & ":0", ":")(1)) / 24 / 60
End Function

Function invalid(valeur As String) As Boolean
    Set obj = CreateObject("vbscript.regexp")
    obj.Pattern = "([\d.:])+"
    invalid = (obj.Execute(valeur).Count = 0) And (valeur <> "")
End Function

Une autre proposition, avec

  • - contrôle des données entrées
  • - prise en compte des heures après minuit

J'ai repris aussi la possibilité que prévoit Xmenpl que je salue de remplacer les : par . pour faciliter la saisie

Private Sub cmd_OK_Click()

    If invalid(txt_matin_depart.Text) Or invalid(txt_matin_fin.Text) Or invalid(txt_apresmidi_depart.Text) Or invalid(txt_apresmidi_fin.Text) Then
        MsgBox "Valeur incorrecte !"
        Exit Sub
    End If

    If txt_apresmidi_depart.Text <> "" And txt_matin_fin.Text <> "" Then
        If horaire(txt_apresmidi_depart.Text) < horaire(txt_matin_fin.Text) Then
            MsgBox "Chevauchement d'horaires !"
            Exit Sub
        End If
    End If

    If txt_matin_depart.Text <> "" And txt_matin_fin.Text <> "" Then
        matin = (horaire(txt_matin_fin.Text) - horaire(txt_matin_depart.Text))
        If matin < 0 Then matin = matin + 1
    End If

    If txt_apresmidi_depart.Text <> "" And txt_apresmidi_fin.Text <> "" Then
        apm = (horaire(txt_apresmidi_fin.Text) - horaire(txt_apresmidi_depart.Text))
        If apm < 0 Then apm = apm + 1
    End If

    Selection = matin + apm

    UserForm1.Hide

End Sub

Function horaire(valeur As String) As Double
    horaire = Val(Split(Replace(valeur, ".", ":") & ":0", ":")(0)) / 24 + _
              Val(Split(Replace(valeur, ".", ":") & ":0", ":")(1)) / 24 / 60
End Function

Function invalid(valeur As String) As Boolean
    Set obj = CreateObject("vbscript.regexp")
    obj.Pattern = "([\d.:])+"
    invalid = (obj.Execute(valeur).Count = 0) And (valeur <> "")
End Function

Bonjour Steelson,

vous m'avez mâché le travail, merci beaucoup. Je ne pense pas que je serais arrivé à ce résultat final.

merci mais je ne suis pas le seul

vois aussi la proposition de xmenpl qui est intéressante sur le contrôle des heures entrées, tu pourras progresser

Rechercher des sujets similaires à "macro calcul heure"