Autres Récupérer un total d'heures dans un textbox

seraff1

XLDnaute Nouveau
Bonjour,
j'ai un tableau sur lequel je rentre, sur une semaine par ligne, les heures début et fin de chaque jour (matin et après-midi) et en fin de ligne je fais le total des heures Semaine.

je fais la saisie au moyen de userbox

une première, "Semainebox",pour rentrer le lundi de la semaine en cours et retranscrire en Colonne (D) "del jj mmm al jj mmm yyyy"

et une seconde, "Saisiebox", avec listbox "jours", une listbox " matin ou après-midi", un textbox "H.debut" et un autre "H.Fin"
et enfin un textbox qui récupère le total des heures de la semaine colonne(AH)

et pas moyen de trouver l'astuce pour avoir un résultat supérieur à 24 et au format hh:mm.

d'autre part les intitulés sont en espagnol "lunes,martes,Mañana"
et je n'arrive pas a retranscrire la date de la colonne (D) avec les mois en espagnol "abr au lieu de avr". j'ai bien utilisé le code pays pour convertir la date mais je n'ai pas le résultat escompté.

voir code userbox "semainebox"
Format(DDate, "[$-es-ES]dd mmm yyyy")
ou
Format(DDate, "[$-C0A]dd mmm yyyy")

Si quelqu'un peut m'aider...por favor

je joins une capture écran.
Quand au fichier, étant trop lourd voici le lien pour le télécharger
https://drive.google.com/file/d/1wgio3E7r5qPROKZX4ZSU6zNbNkIsXp-5/view?usp=sharing

Capture d’écran 2022-04-12 121006.png
 
Solution
Bonjour seraff1, le forum,
et pas moyen de trouver l'astuce pour avoir un résultat supérieur à 24 et au format hh:mm.
Le format [hh]:mm n'existe pas en VBA mais on peut faire évaluer le format Excel :
VB:
Sub Test()
Dim DDate As Double, HeureTexte As String
DDate = CDbl(TimeValue("10:15") + TimeValue("18:30"))
HeureTexte = Replace(DDate, ",", ".") 'remplace la virgule par le point
HeureTexte = Evaluate("TEXT(" & HeureTexte & ",""[hh]:mm"")") 'format Excel
MsgBox HeureTexte
End Sub
A+

job75

XLDnaute Barbatruc
Bonjour seraff1, le forum,
et pas moyen de trouver l'astuce pour avoir un résultat supérieur à 24 et au format hh:mm.
Le format [hh]:mm n'existe pas en VBA mais on peut faire évaluer le format Excel :
VB:
Sub Test()
Dim DDate As Double, HeureTexte As String
DDate = CDbl(TimeValue("10:15") + TimeValue("18:30"))
HeureTexte = Replace(DDate, ",", ".") 'remplace la virgule par le point
HeureTexte = Evaluate("TEXT(" & HeureTexte & ",""[hh]:mm"")") 'format Excel
MsgBox HeureTexte
End Sub
A+
 

seraff1

XLDnaute Nouveau
Bonjour seraff1, le forum,

Le format [hh]:mm n'existe pas en VBA mais on peut faire évaluer le format Excel :
VB:
Sub Test()
Dim DDate As Double, HeureTexte As String
DDate = CDbl(TimeValue("10:15") + TimeValue("18:30"))
HeureTexte = Replace(DDate, ",", ".") 'remplace la virgule par le point
HeureTexte = Evaluate("TEXT(" & HeureTexte & ",""[hh]:mm"")") 'format Excel
MsgBox HeureTexte
End Sub
A+
Bonjour Job,
Bonjour le forum,
Merci beaucoup pour ton aide mais je crois que cela ne conviens pas
timevalue demande une heure alors que la texbox "Hsemaine" récupère la valeur d'une référence de cellule (colonne AH au format [h]:mm pour avoir un total Heures sur le tableau. voir copie écran) qui change au fur et à mesure que je rentre les heures de la semaine.
dans mon code vba de la Userbox la texbox Hsemaine = Str(Cells(Pos + 4, 34).Value * 24), ce qui me donne un total superieur a 24 heures mais dans un format qui ne me convient pas: "29.5" sur la copie d'écran.
ce que je voudrais, c'est faire en sorte que la valeur qui apparait dans la textbox Hsemaine soit au format hh:mm pour une meilleure lecture.
j'ai bien essayé d'adapter ta solution mais sans succès ; ou je n'ai pas tenté toutes les possibilités.
Encore merci pour le temps passé.
A+
 

seraff1

XLDnaute Nouveau
Je vous ai donné la solution, c'est à vous d'adapter.

TimeValue est juste pour l'exemple puisque moi je n'ai pas de cellules ni de TextBox !!!
eureka !!! j'ai enfin trouvé en adaptant votre solution. j'ai pas mal galéré mais cela fonctionne ...
mille fois merci.

Dim DDate As Double, HeureTexte As String
DDate = (Cells(Pos + 4, 34).Value) ' la j'ai enlevé le "Str" devant (Cells(Pos + 4, 34).Value)et ça fonctionne!!!
HeureTexte = Replace(DDate, ",", ".") 'remplace la virgule par le point
HeureTexte = Evaluate("TEXT(" & HeureTexte & ",""[hh]:mm"")") 'format Excel
Hsemaine = HeureTexte ' la Textbox récupère le total heure au bon format
 
Dernière édition:

seraff1

XLDnaute Nouveau
Bonjour le forum
je marque la méthode de Job75 comme solution car elle correspond a mon problème de format de date.
concernant celui de transcription en mois Espagnol, j'ai trouvé un autre moyen en utilisant un tableau.

je joint le code ; si ça peut donner des idées.
en tout cas merci encore pour la réactivité et pour l'aide.
Cordialement

VB:
Private Sub BoutonValider_Click()
    Dim DDate As Date        ' variable de la zone texte "DebutDate" du 1er jour de la Semaine
    Dim SDate As Date        ' variable de la zone texte "FinDate" du Dernier jour de la Semaine
    Dim Pos As Integer       ' Variable Position de la premiere cellule colonne "D" vide
    Dim MoisES(11) As String ' Tableau des mois en Espagnol

Application.ScreenUpdating = False
    For i = 0 To 11
        MoisES(i) = Sheets("Donnees").Range("L" & i + 3).Value ' Affecte au tableau la valeur de la plage des mois en Espagnol
    Next

    AjoutteLigne ' Macro qui ajoute une ligne (trois lignes vides constemment) et recopie les formules
    
    Pos = Range("B2")
    Cells(8 + Pos, 2).Activate
    Cells(8 + Pos, 2).Show
    
    DDate = DebutDate.Value
    d1date = Format(DDate, "dd mm yyyy")    ' Mise en forme Date Debut de Semaine au format "01 12 2022"
    jour1 = Mid(d1date, 1, 3)               ' extrait le jour
    Mois1 = Mid(d1date, 4, 2)               ' extrait le mois
    mois1ES = MoisES(Mois1 - 1)             ' récupère le mois correspondant du tableau
    an1 = Mid(d1date, 6, 5)                 ' extrait l'année
    
    SDate = DDate + 6
    S1Date = Format(SDate, "dd mm yyyy")    ' Mise en forme Date Fin de Semaine au format "01 12 2022"
    jour2 = Mid(S1Date, 1, 3)               ' extrait le jour
    Mois2 = Mid(S1Date, 4, 2)               ' extrait le mois
    mois2ES = MoisES(Mois2 - 1)             ' récupère le mois correspondant du tableau
    an2 = Mid(S1Date, 6, 5)                 ' extrait l'année
    
    ActiveCell.Offset(Cells(8 + Pos, 2), 0).Select   'On selectionne la cellule vide de la colonne "Semana"
        If an2 = an1 Then                            ' si les valeurs des années sont egales
            If mois1ES = mois2ES Then                ' si les mois sont identiques
                ActiveCell = "Del " & jour1 & " al  " & jour2 & " " & mois2ES & " " & an2                   'les valeurs mois1ES et An1 ne sont pas selectionnées Format "Del 01 al 06 Mayo 2022"
            Else
                ActiveCell = "Del " & jour1 & " " & mois1ES & " al  " & jour2 & " " & mois2ES & " " & an2   'la valeurs An1 n'est pas selectionnée Format "Del 27 Mayo al 02 Junio 2022"
            End If
        Else
            ActiveCell = "Del " & jour1 & " " & mois1ES & an1 & " al  " & jour2 & " " & mois2ES & " " & an2 'Format "Del 26 Diciembre 2022 al 01 Enero 2023"
        End If
        
DebutDate = ""      ' Remise à zéro de textbox
SemaineBox.Hide     ' masquage de la userbox Semainebox
SaisieBox.Show      ' Affichage de la userbox Saisiebox
Application.ScreenUpdating = True
End Sub