Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Calcul de plages horaires

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

  • Classeur1.xlsm
    18.5 KB · Affichages: 5

NONO14

XLDnaute Impliqué
@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

  • Calcul sur TS V2.xlsm
    43.4 KB · Affichages: 1

Phil69970

XLDnaute Barbatruc
@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

  • Calcul sur TS V4.xlsm
    26.1 KB · Affichages: 3
Dernière édition:

NONO14

XLDnaute Impliqué
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.
 

Discussions similaires

Réponses
1
Affichages
432
Réponses
0
Affichages
352
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…