Microsoft 365 Calcul de plages horaires

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

NONO14

XLDnaute Impliqué
Bonsoir,
Dans le fichier exemple ci-joint et dans la feuille Tab_Pointage il y a un tableau (t_Saisie) dans lequel se trouvent des heures.
Dans la colonne 12 je souhaite avoir le total des heures par plage mais uniquement si la plage est complète.
Par exemple H1 et H2 complètes alors H2-H1, mais si il y H3 mais que H4 est vide alors ne calculer que la 1ère plage.
J'ai créé un code pour faire le calcul, mais si il manque un horaire dans une plage le calcul ne fonctionne pas.
Pouvez-vous m'aider à résoudre ce problème s'il vous plaît ?
Je vous en remercie par avance

VB:
Sub CalculerTotalHeures()
    Dim Ws As Worksheet
    Dim Tbl As ListObject
    Dim Cell As Range
    Dim TotalHeures As Double
    Dim Start1 As Variant, Dep1 As Variant
    Dim Start2 As Variant, Dep2 As Variant
    Dim Start3 As Variant, Dep3 As Variant
    
    ' Définir la feuille et le tableau structuré
    Set Ws = Sheets("Tab_Pointage")
    Set Tbl = Ws.ListObjects("t_Saisie") ' Nom du tableau structuré
    
    
    ' Parcourir chaque ligne du tableau structuré
    For Each Cell In Tbl.ListColumns(1).DataBodyRange
        TotalHeures = 0
        ' Récupérer les heures des différentes colonnes
        Start1 = Cell.Offset(0, 5).Value
        Dep1 = Cell.Offset(0, 6).Value
        Start2 = Cell.Offset(0, 7).Value
        Dep2 = Cell.Offset(0, 8).Value
        Start3 = Cell.Offset(0, 9).Value
        Dep3 = Cell.Offset(0, 10).Value
        
        ' Calculer les heures si les plages sont complètes
        If IsNumeric(Start1) And IsNumeric(Dep1) Then
            TotalHeures = TotalHeures + (Dep1 - Start1)
        End If
        
        If IsNumeric(Start2) And IsNumeric(Dep2) Then
            TotalHeures = TotalHeures + (Dep2 - Start2)
        End If
        
        If IsNumeric(Start3) And IsNumeric(Dep3) Then
            TotalHeures = TotalHeures + (Dep3 - Start3)
        End If

        ' Afficher le résultat dans la colonne 12
        Cell.Offset(0, 11).Value = TotalHeures
    Next Cell
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CalculerTotalHeures
End Sub
 

Pièces jointes

@NONO14

Je te propose la V2

Merci de ton retour
Bonjour Phil69970, bonjour le fil,
J'espère que vous allez bien.
Phil, je testé ton fichier mais ça ne va pas tout à fait. En effet, si les deux cellules d'une plage sont vides pas de soucis, mais si une des deux cellule contient une heure et pas l'autre, j'ai une erreur dans la colonne total.
Regarde ton fichier, j'ai mis un exemple.
Merci par avance
 

Pièces jointes

@NONO14

On peut se servir de la colonne commentaire en inscrivant par exemple "il manque x plages" en fonction de ce qu'il manque
J'avais commencé un essai hier dans ce sens et puis j'ai fait marche arrière en pensant que la colonne commentaire était prévu pour autre chose....

Edit : @NONO14 ==> Ajout fichier
 

Pièces jointes

Dernière édition:
@NONO14

On peut se servir de la colonne commentaire en inscrivant par exemple "il manque x plages" en fonction de ce qu'il manque
J'avais commencé un essai hier dans ce sens et puis j'ai fait marche arrière en pensant que la colonne commentaire était prévu pour autre chose....

Edit : @NONO14 ==> Ajout fichier
J'ai testé le fichier et j'ai un message d'erreur "La méthode Range de l'objet_Worksheet a échoué" dès que l'on intervient sur une cellule.
Petite précision, il peut y avoir qu'une plage ou deux ou trois de saisies sans que pour cela il y ait une anomalie, dès lors que la plage soit complète, une entrée + une sortie.
J'aurai pu le préciser dès le départ de cette discussion.
 
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Réponses
3
Affichages
563
Réponses
1
Affichages
447
Réponses
0
Affichages
364
Retour