Microsoft 365 Compter les WE libres

Aloha

XLDnaute Accro
Bonsoir,
Dans le document ci-attaché se trouvent les données (heures) en rapport avec le contrat de travail de DUPONT Marie et DURAND Germaine.
Dans la ligne en haut les 24 heures de la journée + nuit
Colonne A: Date
Colonne B: Jour semaine
Colonne C: Nom et prénom de l'agent
Colonne D: le service dans lequel l'agent travaille
Colonnes E à AB: les heures en rapport avec le contrat de travail

Signification des symboles rencontrés:
X = 1 heure de travail
C = 1 heure de congé
RS = 1 heure réunion de service comptée comme heure de travail
T = Tutorat
HS = heure supplémentaire
...et il y en a d'autres

Double problème:

* le premier:

La règle: le repos ininterrompu hebdomadaire de 44 heures doit coïncider avec le week-end au moins 20 fois par an. Le week-end s’étend sur une période de deux jours consécutifs situés entre 6 heures le samedi matin et 6 heures le mardi matin.

Les périodes samedi 6h à mardi 6h sont en jaune.

Il s'agit donc de vérifier quand la personne avait un WE de libre suivant les règles ci-dessus
et de les mettre dans un compteur pour faire le bilan à la fin de l'année.

* le second:

Chaque salarié a droit à un repos ininterrompu de 44 heures par semaine. Dès la fin d’un repos hebdomadaire, le prochain repos hebdomadaire doit intervenir endéans les prochains sept jours. Les salariés qui n’ont pas pu jouir dudit repos auront droit à un jour de congé supplémentaire pour chaque période entière de 8 semaines, successives ou non, pendant laquelle le repos ininterrompu de 44 heures par semaine n’est pas accordé.

Il faut donc compter les périodes de 7 jours où la condition est remplie (donc pas 44 heures libres consécutives)

Je ne sais pas si ces poblèmes sont résolubles par seules formules ou s'il faut du VBA. La base de données retraçant chaque heure de chaque jour de l'année pour quelque 130 salariés (qui n'existe pas encore; les données sont disponibles dans des fichiers mensuels par service regroupant tous les salariés travaillant dans ce service; il faudra copier les données par VBA) sera assez importante: 130 * 365 = beaucoup de lignes

Quelqu'un parmi vous entrevoit-il/elle comment résoudre ce double problème?
Merci d'avance pour tout tuyau et toute aide!

Bien à vous
Aloha
 

Pièces jointes

  • Saisies.xlsx
    19.2 KB · Affichages: 185
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Je ne sais si ce message, lors de l'enregistrement du fichier en .xls, concerne les MFC faites par macro, ou toutes les MFC. Il suffit de tester avec tes MFC, installées à la main, pour voir si elles sont toujours présentent sur le fichier en . xls.

@ plus
 

Aloha

XLDnaute Accro
Bonsoir,
Ce n'est pas bien grave. Il s'agit des MFC mettant en jaune les heures définies comme WE? Et elles se font par macro?
Sinon il y a moyen de les faire sans macro.
Il suffit de tester avec tes MFC, installées à la main, pour voir si elles sont toujours présentent sur le fichier en . xls.
Je vais tester

J'ai transmis le dernier fichier à la directrice avec toutes les instructions nécessaires. Comme elle est une personne très méticuleuse elle trouvera les fautes, s'il y en a.

J'ai réfléchi comment trouver une aide pour vérifier plus aisément les 44h/7jours.
Je vois deux possibilités:
* une formule ajoutant 124 heures (7 jours - 44 heures) à la première heure non libre après un repos; jusqu'ici je n'y ai pas réussi.
* plus élégant et pratique: je clique sur la cellule de la première heure non libre et Excel me montre par message ou en coloriant, quelle est la dernière heure possible où doit commencer le prochain repos, ce qui, si c'est possible, l'est seulement par macro qui devrait donc savoir déterminer à quelle heure correspond la cellule sur laquelle je clique.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir

Si tu cliques n'importe où sur la feuille SAISIES, dans le tableau repos ncp, celui de droite, Excel met en vert les 7 x 24 h suivantes.
Par conséquent, si tu cliques juste à la fin d'une période de travail, s'il y a un 168 dans la plage verte, c'est qu'il y a une période de 7 *24 h sans période de repos de 44 h.

@ plus
P.S : Nouvelle pièce jointe à 9:00 pour résoudre un petit problème lorsqu'on sélectionnait une ligne complète.
 

Pièces jointes

  • Aloha Base 6 avril.xlsm
    226.8 KB · Affichages: 1
Dernière édition:

Aloha

XLDnaute Accro
Re,
J'avais totalement oublié qu'il y a d'autres tableaux où chercher; je m'étais concentré sur le premier! Merci pour le tuyau!
Tu parles du tableau "Tableau repos ncp"? C'est celui tout à fait à droite. Rien ne se met en vert si je clique quelque part.
Est-ce que le fichier que tu viens de poster base sur celui que j'avais joint au post #166?
Es-tu sûr que ça fonctionne correctement? Si tu regardes dans la copie d'écran ci-jointe la plage de gauche, il y a bien >44h le 12, le 13 et le 14.9., mais la plage verte ne montre pas ce repos.

C'est quelle fonction d'Excel qui fait que les prochaines 7*24 heures soient en vert? J'ai pigé: c'est une macro.
A+
Aloha
 

Pièces jointes

  • Plage verte.JPG
    Plage verte.JPG
    149.6 KB · Affichages: 13
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Je viens de modifier le fichier du post 169 pour résoudre un tout petit problème.

Est-ce que le fichier que tu viens de poster base sur celui que j'avais joint au post #166?
Je ne sais plus exactement : J'ai utilisé le fichier Base, soit du post #163, soit du post #166. Si tu as un doute, dans l'éditeur de macro, tu double-cliques sur Feuil 1 (SAISIES). Tu copies toute la Private Sub Worksheet_SelectionChange. Tu ouvres ton fichier, et tu y mets cette Private Sub dans la Feuil 1 (SAISIES), toujours en passant par l'éditeur de macro.

Es-tu sûr que ça fonctionne correctement? Si tu regardes dans la copie d'écran ci-jointe la plage de gauche, il y a bien >44h le 12, le 13 et le 14.9., mais la plage verte ne montre pas ce repos.
La plage verte met en évidence les 7*24 h suivant l'heure sélectionnée. Si tu cliques sur une cellule vide avant un 1 (= 1ère h de repos suivant une autre période de repos d'au moins 44 h), tu vois la durée du repos commençant après la cellule sélectionnée : 1, 2, 3 et ainsi de suite. S'il y a un 168 = 7 * 24 dans cette plage verte, c'est qu'il y a eu au moins 168 h sans repos de 44 h.

Dans ton exemple, un repos de 44 h fini le dimanche 6 à 12 h.
On ne compte pas la nouvelle durée à partir de ce moment là, mais à partir de la fin de ce repos, le lundi 7/9 à 11 h.
La personne travaille 6 h à partir de midi le lundi. Cela nous donne 1, 2 , 3 et ainsi de suite jusqu'à 6... Puis il y a 18 h de repos, pas assez pour arrêter ce compteur, ce qui donne 7, 8... Puis nouvelle période de travail, nouveau repos trop court et ainsi de suite.
A partir du vendredi 11 à 17 h, il y a un repos de plus de 44 h. Ces 44 h de repos sont atteintes le dimanche à 13 h. On arrête le compteur, à 146 ici, valeur inférieure à 168 h. On a donc un repos d'au moins 44 h dans les 7*24 h suivant le repos de 44 h initial.
A la fin de ce nouveau repos de 44 h, on relance le compteur, ici le lundi à 10 h : 1, 2, 3...
Pas évident, hein...

Autrement dit, pour que la succession des périodes de repos soit correcte, il faut que le compteur s'arrête avant la fin, ou la fin de cette plage verte.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re

Re,
J'avais totalement oublié qu'il y a d'autres tableaux où chercher; je m'étais concentré sur le premier! Merci pour le tuyau!

Pour que les macros tournent rapidement, il faut éviter de faire des calculs avec des formules, de lire ou d'écrire sur les feuilles, surtout cellule par cellule. Donc, on fait presque tout de préférence dans des tableaux dans la mémoire (ici nommés Tablo dans la macro Calculs).
Dans le cas présent, la macro Calculs affiche à la fin seulement le contenu des tableaux sur la feuille, et fait quelques calculs avec des formules dans les colonnes AE et AF, en utilisant ces tableaux. On aurait pu faire sans ces formules SOMMEPROD, en modifiant la macro, mais comme il ni y en a pas beaucoup (2 x 130 environ), pour ne pas me compliquer le travail, je les ai laissées.

Tout cela pour te dire que j'ai demandé à la macro Calculs d'afficher ces tableaux Tableau WE, Tableau repos et Tableau repos ncp pour faciliter les vérifications, mais qu'ils ne sont pas vraiment indispensables à l'écran. C'est l'idée du post #71.
Si, sur le vrai fichier, cela prend trop de temps avec 130 personnes pendant 365 jours, on peut encore gagner un peu de temps en modifiant la macro pour ne pas afficher ces tableaux. Mais on ne pourra plus faire les vérifications correspondantes "facilement".

@ plus
 

Aloha

XLDnaute Accro
Si, sur le vrai fichier, cela prend trop de temps avec 130 personnes pendant 365 jours
Je pense que c'est assez rapide: n'oublions pas que ce ne sont que les fichiers d'un mois qui sont injectés à la fois, et encore pas tous à la fois puisqu'ils n'arrivent pas en même temps.
Ce qu'il y aurait encore moyen de faire, mais je ne sais pas si ça gagne beaucoup, c'est de ne pas remplacer que les formules des tableaux par leurs valeurs, mais aussi les deux colonnes affichant les résultats.

Je vais étudier maintenant tes explications en réponse à ma question si tu es sûr que les calculs de ce tableau sont exacts. Bien compliqué tout ça. Tu n'as pas répondu par oui ou non à ma question, mais en expliquant le fonctionnement, ce dont je conclue qu'ils sont exacts. IOl faut juste encore que je les comprenne ;)
A+
 

CISCO

XLDnaute Barbatruc
Re
...Tu n'as pas répondu par oui ou non à ma question, mais en expliquant le fonctionnement, ce dont je conclue qu'ils sont exacts. IOl faut juste encore que je les comprenne ;)
A+
Il y a surtout qu'il faut mieux être deux à vérifier qu'un seul !

Le principe, un compteur qui affiche les heures écoulées à partir de la fin du "premier" repos d'au moins 44 h, et qui s'arrête une fois un nouveau repos de 44 h écoulé, est assez simple à comprendre. Par contre, dans la pratique, sur les tableaux, c'est assez sportif...

Pour "lire" plus rapidement le tableau repos ncp, il suffit de mettre une MFC mettant en valeur toutes les valeurs supérieures ou égales à 168... La plage verte n'est intéressante que pour vérifier des cas où on n'obtient pas le résultat escompté.

@ plus
 

Aloha

XLDnaute Accro
Dans ton exemple, un repos de 44 h fini le dimanche 6 à 12 h.
C'est le lundi 7 à 11h que le repos finit.
La personne travaille 6 h à partir de midi le lundi.
C'est à 11:00 qu'elle commence à travailler.
Pas évident, hein...
En effet, et tellement pas évident que je n'ai toujours pas pigé tout à fait le fonctionnement ;)
Ce qui me pose problème e.a. pour la compréhension, c'est que je ne vois pas une correspondance directe entre une cellule du 1er tableau et la même cellule du dernier: il y a des cellules dans le premier tableau sans valeur qui correspondent à une cellule du dernier avec un chiffre et d'autres cellules avec valeur mais sans chiffre dans le dernier tableau.
Il est plus important que les calculs soient corrects plutôt que moi je comprenne le fonctionnement; néanmoins ce ne serait pas mal si je puisse comprendre le fonctionnement.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Re
C'est le lundi 7 à 11h que le repos finit.

C'est à 11:00 qu'elle commence à travailler.
Les 44 h finissent le dimanche à 12 h, le repos complet le lundi à 11 h (et pas à 12 comme je l'avais écrit).

Cela serait bien que tu comprennes, histoire de pouvoir débusquer les erreurs...

Pour te faciliter la tâche, il faut d'abord comparer le tableau trié (celui le plus à gauche) avec le tableau repos (l'avant dernier à droite). Ce dernier liste la durée de chaque repos.
Et ensuite, il faut comparer ce tableau repos avec le tableau repos ncp (celui le plus à droite). Ce dernier compte le nombre d'heures depuis le premier repos d'au moins 44 h jusqu'au suivant inclus. Une fois ce second repos d'au moins 44 h dépassé, le compteur redémarre à 1 à la fin de la 1ère période de travail rencontrée.

Dans l'exemple ci-dessous, j'ai mis :
* en haut, le tableau trié + le tableau repos : En rouge, on a la durée des repos.
* en bas, le tableau repos ncp
Le premier repos fait 56 h, donc plus de 44 h. Le compteur est enclenché (1ère flèche) dans la cellule suivante, à 9 h jour 3. Les deux repos suivants sont trop courts (21 et 22 h). Ils n'arrêtent donc pas ce compteur d'heures... Le 4ème repos fait 44 h. Il arrête donc ce compteur lorsque ces 44 h sont atteintes (2ème flèche), c.-à-d. au bout de 97 h après la fin du premier repos d'au moins 44 h.
97 h < 168 h. Cela convient.
Le compteur est remis en route à 1. Et on compte jusqu'à atteindre un autre repos d'au moins 44 h inclus dans les 168 h suivantes. Si on atteint au compteur ces 168 h sans avoir un repos d'au moins 44 h, c'est que la condition (un repos d'au moins 44 h dans les 7 j suivants) n'est pas respectée... Lorsqu'il y a des cellules vides, c'est que le repos correspondant fait plus de 44 h. Il n'est plus nécessaire d'afficher la valeur du compteur puisque la condition, repos >=44 h, est vérifiée.

Le plus simple, c'est d'installer une mise en forme conditionnelle mettant en valeur ces 168 dans ce tableau, si la cellule correspondante du tableau repos est < 44, ainsi vous pourrez rapidement repérer les plages ne convenant pas, avant ces 168.

Si tu veux, tu me fais un exemple un peu comme ci-dessous, et j'essaye de t'expliquer le résultat qu'on devrait logiquement obtenir...

@ plus

P.S : Pièce jointe changée jeudi matin à 7:52

PS : ncp = ne convient pas
 

Pièces jointes

  • Aloha bis.JPG
    Aloha bis.JPG
    128.1 KB · Affichages: 7
Dernière édition:

Aloha

XLDnaute Accro
Bonsoir,
Je n'avais pas encore le temps de m'occuper de ton dernier message.
Entretemps j'ai reçu une réaction de la directrice qui a testé le fichier: la macro a bloqué avec Erreur 9 et lorsqu'elle a appuyé sur Fin elle avait un fichier Excel de 2019 à l'écran qui n'est en aucun rapport. Mystérieux si par hasard elle n'avait pas elle-même ouvert le fichier avant et qu'elle ne l'avait pas fermé. Je lui ai posé cette question.
Ce que j'ai oublié de demander c'est si la macro a bloqué tout de suite ou bien après un certain temps.
Il se peut qu'elle ai testé avec un Excel en allemand; j'ai demandé ça aussi. Je me souviens que j'ai déjà rencontré des problèmes d'une langue à l'autre.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir
Cela serait c.. que cela ne fonctionne pas juste pour une histoire de langue... Surtout que là, je ne vois pas comment je pourrais vous aider.
Dans le pire des cas, il te faudra essayer de faire un copier/coller des macros d'un fichier vers un autre. Il y a un peu de taf (pas tant que cela), mais le problème, c'est que parfois, il suffit d'une virgule en trop ou manquante pour que cela ne fonctionne pas... Les décalages n'ont pas d'importance (Ce n'est pas du Python, mais du VBA).

J'ai téléchargé Power Query, mais bon, avant que je comprenne comment fonctionne la chose...

@ plus
 

Aloha

XLDnaute Accro
Re,
Si, avec mes nouvelles instructions et mes précisions, ça ne marche toujours pas je vais, après avoir été vacciné, oser prendre le train et me rendre sur place pour essayer moi-même.
Cela ne vaut pas la peine que tu essayes de trouver une autre méthode: celle-ci fonctionne très bien -à condition que les calculs soient corrects, la pratique le révélera et avec tout le travail et le temps que tu as déjà investi!

Si tu le considères cela comme un défi, alors je te dirigerais, le moment venu, plutôt vers un autre problème qu'on n'avait pas résolu à solutionner, celui des fameuses permanences! Pour l'instant elles sont, faute de mieux, surveillées à la main.
A+
Aloha