• Initiateur de la discussion Initiateur de la discussion John87
  • 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 !

John87

XLDnaute Nouveau
Bonjour,

J'ai un problème d'affichage quand je cumule des temps en jours. En effet, EXCEL m'affiche la différence du calcul réel en lui enlevant 31 jours.
Rien ne vaut un exemple concret :

Tps 1 : 27 jrs 05 h 34 mn
Tps 2 : 23 jrs 12 h 16 mn
Tps cumulé : 50 jrs 17 h 50 mn

Affichage XL : 19 jrs 17 h 50 mn😱

Format cellule : jj "jrs" h "h" mm "mn"

Existe-t'il une petite astuce afin de remédier à ce petit souci ?

P.S. : je navigue entre EXCEL 97 (au boulot, eh oui🙁) et 2007 à la maison

EXCELement Vôtre
Thierry
 
Re : Souci Cumul jours

Bonjour,

Problème intéressant.

J'ai tenté de prendre le problème sous différents aspects, mais j'obtiens à chaque fois le même résultat que toi.

Le résultat semble correspondre au nombre de jours au-delà d'un mois (31 jours)

Excel n'accepte pas de mettre des crochets autour de jj : [jj]

Une solution Texte (la valeur n'est plus exploitable numériquement) :

Code:
=SOMMEPROD((ENT(A1:A2)*1))&" jrs "&TEXTE(SOMMEPROD((MOD(A1:A2;1)*1));
"hh"" h ""mm")

@+
 
Re : Souci Cumul jours

re,

Correction de la formule proposée :

Code:
=ENT(SOMME(A1:A2))&" jrs "&TEXTE(SOMMEPROD((MOD(A1:A2;1)*1));"hh"" h ""mm")
permet de gérer le cas où la somme des heures dépasse la journée (> 24 h)

@+
 
Dernière édition:
Re : Souci Cumul jours

Est-il possible de saisir les jours sous le format JJ:HH:MM sans être obligé de convertir les jours en heures comme actuellement.
En effet pour un temps de 3jrs 17 h 53 mn, il faut que je convertisse les jours en heures pour saisir : (3x24)+17 h ; soit 89:53

EXCELlement Vôtre
Thierry
 
Re : Souci Cumul jours

Bonjour,

Une solution, pas forcément pratique :

Saisir une date de 1900 suivie de l'heure.

Par exemple, pour saisir 3 jours et 13 heures 30 minutes :

03/01/1900 13:30

à mettre au format jj hh:mm

Pas mieux à proposer

@+
 
Re : Souci Cumul jours

Bonjour Tibo, John87, le forum

le problème est interessant, j'ai reprogrammé la saisie simplifiée pour le prendre en compte.
pour l'utiliser, ajouter le code dans le module de feuille et la cellule ou on entre les données doit être au format horaire. Il faut entrer la valeur sous le format j:hh:mm:ss (désolé mais il faut les secondes pour pouvoir distinguer le format jour d'un format heure standard)

Cordialement, @+

Code:
'Yeahou - 300e post - la saisie horaire simplifiée - 21/07/2005
Option Explicit
'Variable publique
Public Traitement_en_Cours As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
'Déclaration des variables
Dim Compteur As Integer, Compteur2 As Integer, Compteur3 As Integer, Compteur4 As Integer
Dim Test_Depasse As Boolean, Test_Negatif As Boolean, Test_Secondes As Boolean, Test_Minutes As Boolean, Test_Heures As Boolean
Dim Target_Temp As Variant, Cellule_NumberFormat As String
'Sortie si traitement en cours
If Traitement_en_Cours = True Then Exit Sub
'réinitialisation si erreur
'On Error GoTo Fin
'Traitement si saisie d'une cellule
If Target.Count = 1 Then
    'Traitement si non vide et non résultat formule
    If Not (Target.Value = "") And Not (Left(Target.Formula, 1) = "=") Then
        'Réduction de NumberFormat aux types traités pour analyse
        Cellule_NumberFormat = Target.NumberFormat
        Do
            Compteur = InStr(1, Cellule_NumberFormat, Chr(34), 1)
            If Compteur > 0 Then Compteur2 = InStr(Compteur + 1, Cellule_NumberFormat, Chr(34), 1) _
            Else Compteur2 = 0
            If Compteur2 = 0 Then Compteur = 0
            If Compteur > 0 Then Cellule_NumberFormat = Left(Cellule_NumberFormat, Compteur - 1) & _
            Right(Cellule_NumberFormat, Len(Cellule_NumberFormat) - Compteur2)
        Loop Until Compteur = 0
        'Test secondes
        If InStr(1, Cellule_NumberFormat, "s", 0) > 0 Then Test_Secondes = True
        If InStr(1, Cellule_NumberFormat, "m", 0) > 0 Then Test_Minutes = True
        If InStr(1, Cellule_NumberFormat, "h", 0) > 0 Then Test_Heures = True
        'Traitement si format horaire
        If Test_Secondes Or Test_Minutes Or Test_Heures Then
            'Initialisation Target_Temp
            Target_Temp = Target.Value
            'Test de la valeur jour présent et transformation en long pour traitement
            Compteur2 = 0
            Compteur3 = 0
            For Compteur = 1 To Len(Target_Temp)
            If Mid(Target_Temp, Compteur, 1) = ":" Then Compteur2 = Compteur2 + 1
            If Mid(Target_Temp, Compteur, 1) = ":" And Compteur3 > 0 And Compteur4 = 0 Then Compteur4 = Compteur
            If Mid(Target_Temp, Compteur, 1) = ":" And Compteur3 = 0 Then Compteur3 = Compteur
            Next Compteur
            If Compteur2 = 3 Then
            Target.Value = (Left(Target_Temp, Compteur3 - 1) * 24) + Mid(Target_Temp, Compteur3 + 1, (Compteur4 - Compteur3) - 1) & Right(Target_Temp, Len(Target_Temp) + 1 - Compteur4)
            Target_Temp = Target.Value
            Compteur2 = 0
            End If
            'Test de la valeur > "9999:00" et transformation en long pour traitement
            Test_Depasse = False
            If InStr(1, Target_Temp, ":", 0) > 0 And Not (IsNumeric(Target_Temp)) Then
                Test_Depasse = True
                If Test_Heures And Test_Minutes And Test_Secondes Then
                    Target_Temp = (Left(Target_Temp, InStr(1, Target_Temp, ":", 0) - 1)) & (Mid(Target_Temp, InStr(1, Target_Temp, ":", 0) + 1, 2)) & (Right(Target_Temp, 2))
                Else
                    Target_Temp = (Left(Target_Temp, InStr(1, Target_Temp, ":", 0) - 1)) & (Right(Target_Temp, 2))
                End If
            End If
            'Test de la valeur numérique et abandon traitement cellule si faux
            If IsNumeric(Target_Temp) Then
                'Abandon traitement cellule <=1
                If Abs(Target_Temp) > 1 Then
                    'Test des valeurs numériques
                    If Target_Temp < 0 Then Test_Negatif = True: Target_Temp = -Target_Temp
                    'Test de target en entier long et traitement si positif
                    If Target_Temp = (Target_Temp \ 1) Or Test_Depasse = True Then
                        'Traitement avec secondes ou non
                        If Test_Secondes Then
                            If Test_Minutes Or Test_Heures Then
                                Select Case Len(Target_Temp)
                                    Case Is < 3
                                        Target_Temp = Target_Temp / 86400
                                    Case Is < 5
                                        Target_Temp = (Left(Target_Temp, Len(Target_Temp) - 2) / 1440) + _
                                        (Right(Target_Temp, 2) / 86400)
                                    Case Else
                                        Target_Temp = (Left(Target_Temp, Len(Target_Temp) - 4) / 24) + _
                                        (Left(Right(Target_Temp, 4), 2) / 1440) + (Right(Target_Temp, 2) / 86400)
                                End Select
                            Else
                                Target_Temp = Target_Temp / 86400
                            End If
                        Else
                            If Test_Minutes Then
                                If Test_Heures Then
                                    Select Case Len(Target_Temp)
                                        Case Is < 3
                                            Target_Temp = Target_Temp / 1440
                                        Case Else
                                            Target_Temp = (Left(Target_Temp, Len(Target_Temp) - 2) / 24) + _
                                            (Right(Target_Temp, 2) / 1440)
                                    End Select
                                Else
                                    Target_Temp = Target_Temp / 1440
                                End If
                            Else
                                Target_Temp = Target_Temp / 24
                            End If
                        End If
                        'Annulation Worksheet_Change pendant traitement
                        Traitement_en_Cours = True
                        'Traitement de Target_Temp selon signe et type calendrier
                        If Test_Negatif = True Then
                            If ThisWorkbook.Date1904 = True Then
                                Target.Value = -Target_Temp
                            Else
                                Target.Value = Target_Temp
                                Target.Value = "'-" & Target.Text
                            End If
                        Else
                            Target.Value = Target_Temp
                        End If
                    End If
                End If
            End If
        End If
    End If
End If
Fin:
Traitement_en_Cours = False
End Sub
 

Pièces jointes

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