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
Re
Bonjour,

Entretemps j'ai trouvé une solution pour remplacer les formules par les valeurs, et pour recalculer la ligne sur laquelle on procède à une modification moyennant une Private Sub Worksheet_Change(ByVal Target As Range)
Il y a juste un petit problème: cette Private Sub se met aussi en action -et c'est logique- lorsque les données sont importées et que le contenu des cellules est donc changé!
On peut faire afficher un message dès qu'il y a une modification du tableau initial, message demandant à l'utilisateur de relancer la macro tri (ou une autre, ne changeant que les valeurs des deux ou trois lignes concernées, si la macro tri met trop de temps pour refaire tous les calculs).

@ plus
 

Aloha

XLDnaute Accro
Re

On peut faire afficher un message dès qu'il y a une modification du tableau initial, message demandant à l'utilisateur de relancer la macro tri (ou une autre, ne changeant que les valeurs des deux ou trois lignes concernées, si la macro tri met trop de temps pour refaire tous les calculs).

@ plus
Re,
Donc remplacer la PrivateSub qui se déclenche toute seule par une Sub normale qu'on est invité à lancer après une modification? Oui, cela me semble une solution.
A+
Aloha
 

Aloha

XLDnaute Accro
Re,
Je suppose que tu n'as pas seulement supprimé cette colonne mais que tu as dû changer aussi le code, de sorte que je dois migrer avec mes macros dans ce fichier modifié du post #72?

Il n'y a pas de raison d'écrire qch dans DF!

A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Re,
Je suppose que tu n'as pas seulement supprimé cette colonne mais que tu as dû changer aussi le code, de sorte que je dois migrer avec mes macros dans ce fichier modifié du post #72?
Ça, je l'avais fait dès la première version. C'est d'ailleurs pour cela qu'il y avait une colonne en trop : La macro installait le tableau au bon endroit, à partir de la colonne AG, mais il restait une trace de l'ancien tableau, qui débordait un peu vers la droite.

Je viens de rechanger le fichier du post 72 car j'avais oublié de corriger les plages des tableaux. Elles étaient elles aussi décalées trop à droite d'une colonne.

Le module 1 peut être supprimé.

Pour ce qui est des deux possibilités, Privatesub ou sub, la seconde aurait l'avantage de ne pas être lancée automatiquement lors de la première utilisation de la feuille de calcul.

Il y a au moins 110 évènements pouvant provoquer le lancement automatique de la macro corrigeant les calculs suite à une ou des modifications dans le tableau initial. En cherchant bien, on peut peut-être trouver l'évènement lançant cette macro au bon moment, ni trop souvent, ni trop peu...

Il me semble que cette feuille pourrait être utile, en cours d'année, au service ressource humaine pour voir :
* si certaines personnes n'ont pas eu leur 20 WE avec repos
* contrôler le nombre de repos non suivis dans les 7 jours d'une autre période de repos de 44 h, histoire de ne pas créer des situations trop "déséquilibrées"...

@ plus
 

Aloha

XLDnaute Accro
Bonjour,

Je m'embrouille!
C'est mortel de travailler simultanément à deux sur le même fichier. Tout-à-l'heure j'ai pris le fichier du post #72, avant ta dernière modification et j'y ai migré les macros et corrigé quelques trucs.
Il faut que je recommence avec la dernière version du fichier. Si tu n'as pas changé beaucoup je peux peut-être transporter ces modifications sur le fichier sur lequel j'ai travaillé, ce serait plus simple.

Pour empêcher de telles situations je vais dorénavant te prévenir avant de commencer de changer quoi que ce soit et après avoir fini je poste le fichier sur lequel tu peux continuer alors.
Si tu es d'accord avec cette façon de procéder.

Pour ce qui est des deux possibilités, Privatesub ou sub, la seconde aurait l'avantage de ne pas être lancée automatiquement lors de la première utilisation de la feuille de calcul.

Tout à fait d'accord!
Il me semble que cette feuille pourrait être utile, en cours d'année, au service ressource humaine pour voir :
* si certaines personnes n'ont pas eu leur 20 WE avec repos
* contrôler le nombre de repos non suivis dans les 7 jours d'une autre période de repos de 44 h, histoire de ne pas créer des situations trop "déséquilibrées"...

Tout à fait d'accord!
Le fait est que les salariés doivent être renseignés tous les mois sur cette question de temps libre; il faut que j'intègre ces informations quelque part dans le fichier qu'ils reçoivent tous les mois, mais je ne sais pas où: toute la place est prise.

A+
Aloha
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

J'avais changé la def des tableaux dans le gestionnaire de noms
Tableau.JPG

Lorsque tu cliques, dans le gestionnaire de noms, sur la ligne de définition, il doit y avoir sur la feuille des pointillés autour de la plage correspondante. Avant, ces plages étaient placées une colonne trop à droite (Il y avait pour Tableaurepos, 54 au lieu de 53, et ainsi de suite) (seul était correct Tableauinitial il me semble).


Où en es-tu avec le test d'un fichier un peu plus complet, avec plus de personnes ?

@ plus
 

Aloha

XLDnaute Accro
Re,
Je viens de travailler sur le fichier! Le voici en annexe
J'ai apporté les changements que tu viens d'énumérer. J'ai remarqué que tous les chiffres n'ont pas changé (cf copie d'écran). Est-ce correct?

Je ne suis pas sûr que la macro Copier_Saisies_et_database qui remplit la feuille Database et place les formules etc. dans tes tableaux met les bonnes formules aux bons endroits. Il faut que je vérifie. Tu n'as pas besoin de t'en occuper. Pour l'instant elles ne fonctionnent pas sans que j'aie compris pourquoi. Je vais analyser le problème et y remédier.
Il y a un petit problème concernant ta macro: dans ton fichier (post #72) elle met les dates, noms et services à partir de la ligne 4, comme il faut, dans les colonnes AG, AH et AI, et aussi AC. Par contre, dans mon fichier, qui pour cela est exactement le même que le tien, puisque j'ai pris le tien pour mettre mes macros etc. les données sont mises à partir de la ligne 3.

Dis-le moi stp lorsque tu travailles sur le fichier. J'en ferai autant.
A+
Aloha
 

Pièces jointes

  • Noms.JPG
    Noms.JPG
    101.3 KB · Affichages: 5
  • Base.xlsm
    662.7 KB · Affichages: 3
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

J'ai apporté les changements que tu viens d'énumérer. J'ai remarqué que tous les chiffres n'ont pas changé (cf copie d'écran). Est-ce correct?

Effectivement, les nombres ne changent pas.
Je pense que mon erreur ne posait problème que dans le cas des repos de 44 h finissant en bout de ligne ou dans la première cellule d'une nouvelle ligne, ou en fin de WE. Il faut croire que ces situations n'existaient pas dans l'exemple traité.

@ plus
 

CISCO

XLDnaute Barbatruc
Bonsoir

Ma macro commence aussi en ligne 3, mais normalement, elle n'y écrit que des vides dans AG3, AH3 et AI3, et les nombres de 1 à 24 dans les colonnes AJ à BG. En ligne 4, elle commence dans la colonne AG avec une date.
J'essayerai de résoudre ce problème plus tard.

Quelle macro faut-il lancer pour avoir des formules dans les tableaux de droite ?

@ plus
 

Aloha

XLDnaute Accro
Re,
C'est le module Calculer_les_tableaux.
Cela eût fonctionné, pour parler avec Fernand Reynaud, mais ça ne marche plus.
Les formules semblent exactes (avec F8 on arrive vite à les mettre, à la fin de la Sub il n'y a plus que des valeurs) mais elles ne calculent pas correctement, sans que je comprenne pourquoi.

Les données sont des données réelles d'un service; j'ai anonymisé les noms.
A+
Aloha

Le fichier à utiliser:
 

Pièces jointes

  • Base.xlsm
    583 KB · Affichages: 2
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

1) la macro Sub Troistableaux bugue dès la ligne
ActiveCell.FormulaR1C1 = _
"=IF(@testWEcolAG*(RC[...
Faut trouver pourquoi...

2) S'il y avait moyen de stocker toutes les formules sur une ligne, puis de faire un copier/coller automatique vers le bas, cela serait plus simple...

3) Que veux-tu faire exactement, démarrer avec les 3 tableaux de droite vides, puis les remplir avec les formules, puis sauvegarder les valeurs ? Si c'est cela, pourquoi ne pas démarrer avec toutes les formules déjà en place, sur une plage trop grande ou s'ajustant automatiquement à la hauteur du tableau initial, à gauche, puis sauvegarder les valeurs ? Il suffirait ainsi de redémarrer avec une fichier "vierge", contenant déjà toutes les formules. Ainsi, pas besoin de coller les formules. Il suffit de supprimer celles qu'il y a en trop en bas.

@ plus