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é
Je me suis trompé, ça fonctionne bien. J'ai voulu modifier les en-têtes et c'est pour cette raison que j'avais ce message d'erreur.
Toutes mes excuses
 

NONO14

XLDnaute Impliqué
Cependant je cherche à modifier ton code dans les cas où il n'y a pas une entrée et une sortie d'enregistrées par plages. Le message ne doit apparaître que s'il manque un pointage de sortie car c'est la seule erreur qu'il puisse y avoir. Dans mon formulaire, j'ai mis en place un code qui interdit toute nouvelle entrée si la sortie n'a pas été pointée.
Merci par avance
 

NONO14

XLDnaute Impliqué
J'ai résolu le problème par cette formule dans la colonne commentaire
VB:
=SI(ET([@[Arrivée 1]]<>0;[@[Départ 1]]=0);"Il manque un pointage";SI(ET([@[Arrivée 2]]<>0;[@[Départ 2]]=0);"Il manque un pointage";SI(ET([@[Arrivée 3]]<>0;[@[Départ 3]]=0);"Il manque un pointage";"")))
 

Phil69970

XLDnaute Barbatruc
Re

@NONO14
De retour après une petite absence, peux tu sur le fichier de la V4 par exemple mettre dans la colonne P (hors tableau) les commentaires et couleur que tu veux avoir dans le tableau suivant les différents cas et si besoin rajoute des cas parce j'avoue j'ai du mal à suivre ce que tu veux exactement
 

NONO14

XLDnaute Impliqué
Si sur une ligne il manque un pointage de départ alors qu'il a une arrivée de saisie, alors on met un commentaire "Il manque un pointage". A chaque arrivée doit correspondre un départ pour une même plage, soit Arrivée 1/Départ 1, ou, Arrivée 2/Départ 2, ou, Arrivée 3/Départ3. Arrivée 2 ne pourra jamais être remplie si Départ 1 n'est pas rempli, et Arrivée 3 si départ 2 n'est pas rempli (blocage du bouton dans le formulaire).
Je mets cette procédure en place dans l'hypothèse où un agent partirait sans pointer, comme ça le lendemain il y aura un message dans la ListBox du formulaire, car je vais reprendre le commentaire dans la ListBox.
N'hésites pas à revenir vers moi si je ne suis pas clair.
 

Phil69970

XLDnaute Barbatruc
@NONO14

perso j'ai un problème ici



Et aussi ici



Explication différentes en rouge pour les lignes 1, 2 et 3 identiques

Et encore ici



De plus les couleurs colonnes M sont en rouge pourquoi ne sont elles pas noires

Cela fait beaucoup d'incompréhension ????
Il manque un peu de rigueur, non !!!!!
 

NONO14

XLDnaute Impliqué
Je n'ai pas modifié les couleurs de la colonne qui émanaient du code que tu avais mis.
Voici le fichier tel qu'il devrait être selon les différents pointages
 

Pièces jointes

  • Calcul sur TS V5.xlsm
    18 KB · Affichages: 2

TooFatBoy

XLDnaute Barbatruc
Tu cherches des trucs trop compliqués.
Fais au plus simple.

Une proposition :
Formule pour la MFC : =(G3<>"")*(H3="")
S'applique à : =$H$3:$H$14;$J$3:$J$14;$L$3:$L$14
 

Pièces jointes

  • Calcul sur TS V5.xlsm
    23.6 KB · Affichages: 1

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…