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:

Aloha

XLDnaute Accro
Re,
Si tu fusionnes A2 et A3 ensemble, B2 et B3, C2 et C4, il ni a plus de problème avec la macro tri par rapport aux lignes 3 et 4
J'avais soupçonné que cela pourrait être le problème, seulement, comme je ne comprends rien du tout à ta macro, je n'étais pas à même de l'analyser.
Ces cellules, je les ai déliées parce que je n'arrivais pas à définir la ligne 4 comme première ligne, puisque la ligne 3 était vide, le texte se trouvant dans la ligne 2.
La solution ne pourrait-elle pas consister à mettre quelque chose en A2, B2,...? J'avais cette idée, mais je ne l'ai pas poursuivie.

=IF(@testWEcolAG*(RC[...
Faut trouver pourquoi...
Est-ce que cela ne tient pas à l'aérobase que j'ai vu se mettre toute seule dans le passé. Je pense en avoir parlé ici, dans un autre thème.

Si je voulais mettre les formules par macro, ce qui ne devrait présenter aucun problème si c'est fait correctement, c 'est pour économiser les ressources en n'ayant qu'un strict minimum de formules. Je voulais donc -et hier je l'ai vu fonctionner impeccablement- coller les formules, les tirer vers le bas jusqu'à la dernière ligne avec des données, puis remplacer les formules par leurs valeurs, ainsi toutes les gourmandes formules disparaissent à nouveau pour céder la place à d'anodines valeurs.

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...
On pourrait les stoquer à droite des tableaux, mais es-tu sûr qu'on peut copier de cette manière-là? Est-ce que ce sont vraiment les formules qui sont insérées? Il faudrait l'expérimenter.
Cependant la méthode que j'avais choisie fonctionne normalement sans problème et c'est rapide en plus.

Ce qui n'est pas rapide du tout, c'est l'enregistrement du fichier. J'ai appuyé sur ESC et j'ai eu un message me disant qu'il y avait des références circulaires, ce qui est très embêtant.

Bonne nuit
Aloha
 

Aloha

XLDnaute Accro
Bonjour,
Je travaille sur le fichier. Je regarde après cette macro qui doit coller les formules. Au cas où tu voudrais y travailler également fais-moi signe, j'arrêterai et je posterai le fichier si j'y ai apporté des changements.
A+
Aloha
 

Aloha

XLDnaute Accro
La solution ne pourrait-elle pas consister à mettre quelque chose en A2, B2,...? J'avais cette idée, mais je ne l'ai pas poursuivie.
Hélas ce n'est pas la solution: même s'y je mets quelque chose dans A2,B2,C2, la macro, qui est ultra-rapide d'ailleurs, commence à la ligne 3 (cf copie d'écran).

Je viens de mettre les formules dans la ligne 4 avec F8, j'ai ouvert ton dernier fichier en parallèle pour comparer les formules: celles mises par macro sont les mêmes que celles dans ton fichier.

10:30
Dans la définition des noms j'ai trouvé une différence:

* dans "ton" fichier:
testWEcolAG=(6+5/24<JOURSEM(SAISIES!$AG4;2)+SAISIES!DG$2/24)+(JOURSEM(SAISIES!$AG4;2)=7)+(JOURSEM(SAISIES!$AG4;2)=1)+(JOURSEM(SAISIES!$AG4;2)+SAISIES!DG$2/24<2+6/24)

* dans "mon" fichier:
testWEcolAG=SAISIES!$BT$4

J'ai corrigé dans mon fichier.

Ce que j'ai remarqué aussi dans la définition des noms: dans septjoursdébut il y a...$EE:$EE..., alors que la colonne EE est hors du tableau. J'ai changé en $ED:$ED, en espérant que c'est exact ainsi!

Ensuite j'ai trouvé la raison toute bête pour laquelle les formules ne fonctionnent pas: le mode de calcul était sur manuel. Lorsque j'ajoute Application.Calculation = xlCalculationAutomatic alors le code et Excel bloquent à la fin de la routine, lorsque les formules doivent être remplacées par les valeurs, ce qui n'est pas mieux. En remettant en calcul manuel après le collage de toutes les formules ça ne bloque plus.

11:07
Nouveau problème: jusqu'ici la macro tournait. Maintenant elle bloque dès le début avec le message d'erreur 91 "Variable objet ou variable de bloc With non définie".
Lorsque j'ajout un With cela ne change rien. Je ne sais d'ailleurs pas où mettre le End With
VB:
Sub TroisTablaux()
With Worksheets("Saisies")
lastrowA = Range([A:A].Find("*", , , , xlByRows, xlPrevious).Address(0, 0)).Row
lastrowB = Range([B:B].Find("*", , , , xlByRows, xlPrevious).Address(0, 0)).Row
lastrowBI = Range([BI:BI].Find("*", , , , xlByRows, xlPrevious).Address(0, 0)).Row
End With
Application.Calculation = xlCalculationAutomatic

Si je déclare les variables avant:
Code:
Dim lastrowA&, lastrowB&, lastrowBI&
ça ne change rien.

Je joins mon dernier fichier (celui sur lequel il faut donc travailler).
 

Pièces jointes

  • Ligne 3.JPG
    Ligne 3.JPG
    58.6 KB · Affichages: 3
  • Base.xlsm
    576.4 KB · Affichages: 4
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

10:30
Dans la définition des noms j'ai trouvé une différence:

* dans "ton fichier":
testWEcolAG=(6+5/24<JOURSEM(SAISIES!$AG4;2)+SAISIES!DG$2/24)+(JOURSEM(SAISIES!$AG4;2)=7)+(JOURSEM(SAISIES!$AG4;2)=1)+(JOURSEM(SAISIES!$AG4;2)+SAISIES!DG$2/24<2+6/24)

* dans "mon fichier":
testWEcolAG=SAISIES!$BT$4

J'ai corrigé dans mon fichier.
Les noms testWEcolA et testWEcolAG sont utilisées lorsqu'on fait des calculs par rapport aux W.E. ou pour les MFC correspondantes coloriant en jaune les W.E. Ils sont définis tous les deux presque de la même manière, sauf que testWEcolA utilise les dates dans la colonne A, et testWEcolAG, les dates de la colonne AG. Il faut donc utiliser la 1ère formule ci-dessus.

@ plus
 

CISCO

XLDnaute Barbatruc
Bonsoir

Je vois que tu as beaucoup travaillé, et que tout n'est pas simple...

Deux remarques :
1) Une allant dans le bon sens. Nous nous demandions comment gérer facilement les modifications, les corrections apportées après coup au planning des employés, au besoin en relançant la macro Tri ou avec une autre macro ne changeant que les deux ou trois lignes concernées. En fait, il y a beaucoup plus simple : Il suffit de faire ces corrections dans le tableau trié, pas dans le tableau initial. C'est simple (puisque toutes les données concernant une personne X sont regroupées ensemble par ordre chronologique) et rapide.

2) Une autre, moins importante : Pour simplifier les choses, on peut très bien demander à la macro Tri d'écrire le tableau trié à la place du tableau initial, et pas à sa droite. L'ensemble serait tout aussi facile à utiliser ensuite, et un peu plus léger.

@ plus
 

Aloha

XLDnaute Accro
Il faut donc utiliser la 1ère formule ci-dessus.
Bonsoir,
C'est ce que j'ai fait.

Pour simplifier les choses, on peut très bien demander à la macro Tri d'écrire le tableau trié à la place du tableau initial, et pas à sa droite
Cela implique beaucoup de modifications au niveau des formules (les références) et des macros, puisque le tout se décalera vers la gauche de 27 colonnes si je ne me trompe. Mais s'il y a moyen de faire comme ça, pourquoi pas; ça ferait un tableau en moins.

J'avais écrit que la macro qui met les formules bloque à la première ligne. Elle ne bloque plus en ce moment, et je ne comprends pas pourquoi ça bloque des fois et d'autres fois pas.

En ce qui concerne les mises à jour en cas de modification j'avais confectionné une macro qui fonctionne. Je l'ai enlevée et stockée dans un document texte puisqu'elle se mettait tout le temps en route:

Il fallait juste la transformer d'une Private Sub en une Sub normale. Il faudrait juste une MsgBox invitant à lancer la macro après une modification.

Reste le problème que ta macro commence dans "mon" fichier à la ligne 3, qui fait que dans la colonne AC Nom et prénom est trié avec les noms qui, autre problème, ne se trouvent pas en haut mais plus bas.

Enfin, la colonne AD n'affiche que des #VALEUR!.

A+
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

En pièce jointe, un ancien fichier avec le tableau initial, pas encore trié donc, juste comme exemple, pour te montrer :
* ce que cela donnerait si le tableau trié était écrit à la place du tableau initial (à partir de A3 (même si c'est écrit A4 dans la macro Tri)
* une petite macro (6 lignes) (dans le module 3) copiant la plage AG4: DB4 et collant en dessous, jusqu'à la dernière ligne de la colonne A, uniquement les formules.

Tu cliques sur le bouton Macro Tri, et le tableau de gauche est trié.
Tu cliques sur le bouton Ajout de formule, et les 3 tableaux de droite sont remplis avec les bonnes formules.
Seul défaut, on a un triangle message d'erreur dans toutes les cellules remplies, message n'ayant ici pas lieu d'être.

Il faut que je vérifie tout ça (il ni avait pas trois tonnes de changements à faire, mais bon, par précaution, il faut mieux vérifier), supprime automatiquement ce petit triangle...

@ plus
 

Pièces jointes

  • Aloha Saisies tableau trié au début2.xlsm
    503 KB · Affichages: 5

Aloha

XLDnaute Accro
Re,
une petite macro (6 lignes) (dans le module 3) copiant la plage AG4: DB4 et collant en dessous, jusqu'à la dernière ligne de la colonne A, uniquement les formules.
Tu colles chaque fois les formules depuis le haut, même si, lorsqu'on injecte le mois de décembre, on arrive à la 130 salariés * 365 jours = beaucoup de lignes plus bas?
Tu n'as pas de sympathie pour remplacer les formules par leurs valeurs? et pour coller les formules seulement dans les lignes fraîchement fournies?

Je ne vois pas de problèmes avec cette méthode qui présente l'avantage de résoudre en même temps le problème de la mise à jour après modification, à condition que la vitesse d'exécution reste acceptable lorsqu'on arrive à la fin de l'année.

Bonne nuit
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Re,

Tu colles chaque fois les formules depuis le haut, même si, lorsqu'on injecte le mois de décembre, on arrive à la 130 salariés * 365 jours = beaucoup de lignes plus bas?
Dans le "tableau initial", les données sont regroupées par mois. Dans le "tableau trié", elles le sont par personne (A cause de la nécessaire prise en compte des repos à cheval sur deux mois pour la même personne), il faut donc intercaler les nouvelles données entre les anciennes données. Soit on redispose toutes les valeurs depuis le début (C'est ce que fait la macro actuelle), soit il faut glisser les nouvelles entre les anciennes, en modifiant la macro, ce qui n'est intéressant que si cela prend moins de temps de calcul.

Tu n'as pas de sympathie pour remplacer les formules par leurs valeurs? et pour coller les formules seulement dans les lignes fraîchement fournies?
Si, si, si on y gagne quelque chose en temps de calcul ou en place mémoire. Je pensais le faire après, surtout que c'est, il me semble, assez facile à programmer.

Est-ce que tu veux, dois faire un bilan mois par mois, ou seulement en début de l'année suivante (L'utilisation de cette feuille en cours d'année n'étant qu'occasionnelle) ?

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re

Ce que j'ai remarqué aussi dans la définition des noms: dans septjoursdébut il y a...$EE:$EE..., alors que la colonne EE est hors du tableau. J'ai changé en $ED:$ED, en espérant que c'est exact ainsi!
Il faut que ce nom corresponde à une plage débordant d'une colonne trop à droite. Si le tableau finit en colonne ED, septjoursdébut doit finir en EE.

@ plus
 

Aloha

XLDnaute Accro
Bonjour,
Est-ce que tu veux, dois faire un bilan mois par mois, ou seulement en début de l'année suivante
Il faut donner mensuellement les informations aux salariés, donc sur la feuille mensuelle (si j'y trouve un petit coin libre) ou, moins bien, sur une feuille séparée mensuelle par service, donc une nouvelle feuille à faire ajouter par la macro ou à prévoir déjà dans le fichier modèle servant à fabriquer les fichiers mensuels avec les fiches individuelles pour chaque salarié/e.

Il faut que ce nom corresponde à une plage débordant d'une colonne trop à droite. Si le tableau finit en colonne ED, septjoursdébut doit finir en EE.
Je pense qu'il vaut mieux que je n'y touche plus pour l'instant puisque je risque de faire des bêtises; ainsi, dans "mon" fichier j'ai remplacé EE:EE par ED:ED!
Je te laisse faire pour l'instant. Je vais migrer et adapter "mes" macros à la fin.

Dans le "tableau initial", les données sont regroupées par mois. Dans le "tableau trié", elles le sont par personne
Tu avais proposé de laisser tomber l'un de ces tableaux. Tu as main libre.

Si, si, si on y gagne quelque chose en temps de calcul ou en place mémoire. Je pensais le faire après, surtout que c'est, il me semble, assez facile à programmer.
OK. Et c'est tellement facile à programmer que même moi j'y suis arrivé (plus ou moins).

A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Je viens de faire un test sur le dernier fichier, "Aloha Saisies trié au début 2" :
* avec les formules, 688 ko
* avec les valeurs, 533 ko.

Donc, cela semble intéressant de ne garder que les valeurs.
Mais il faut voir comment on peut gérer cela, chaque mois, si on relance les formules à partir de la ligne 5 (Cela risque d'être long, dès qu'il y aura plusieurs mois), ou si on insère les nouvelles données et les nouvelles formules entre les anciennes (Comment est-ce faisable et est-ce que cela sera plus rapide ?).

Au passage, cela serait bien que tu regardes du coté de la méthode proposée par Chris. Celle que je te propose depuis le poste 71 n'est intéressante que s'il faut vérifier les résultats obtenus, puisqu'on y voit tous les calculs intermédiaires (Durée de chaque repos), mais ce n'est certainement pas la méthode la plus rapide.

@ plus
 

Aloha

XLDnaute Accro
Re,
Je viens de faire un test sur le dernier fichier, "Aloha Saisies trié au début 2" :
* avec les formules, 688 ko
* avec les valeurs, 533 ko.
Ce que je visais comme avantage en ne laissant que les valeurs ce n'était pas la taille du fichier mais les ressources utilisées.
Mais il faut voir comment on peut gérer cela, chaque mois, si on relance les formules à partir de la ligne 5 (Cela risque d'être long, dès qu'il y aura plusieurs mois), ou si on insère les nouvelles données et les nouvelles formules entre les anciennes
Si on "glisse" les nouvelles données parmi les existantes, en triant sur la personne et la date, il est plus difficile de garder les valeurs ayant remplacé les formules à jour, à moins que la macro (ou plutôt son auteur) soit capable de ne mettre les formules, puis leurs valeurs, que dans les lignes concernées, où qu'elles se trouvent dans le tableau. Avec mes maigres connaissances je ne vois pas comment faire.
Au passage, cela serait bien que tu regardes du coté de la méthode proposée par Chris
J'ai repris le fichier que Chris a posté dans son message #70. Ce fichier traite donc seulement l'un des deux problèmes.
J'ai expérimenté avec ce fichier et je suis confus de devoir avouer que je ne comprends pas ce système. J'ai allégé les données à traiter (fichier "allégé" en annexe) en ne laissant que AGRO Wendy et je la fais travailler un régime régulier de travail de bureau du lundi au vendredi de 8:00 à 16:00 et je la fais travailler en plus deux samedis de suite; il y a donc du retard pour le temps libre, alors que dans le tableau "Problème de retard hors 7 jours" il n'y a pas d'inscription.
Dans le tableau "Week Ends" les inscriptions correspondent, si j'ai bien compris, aux blocs de 44 heures libres. Ce que je ne comprends pas dans ce tableau: pourquoi ça va des fois jusqu'à 5:00 et des fois jusqu'à 7:00?
A+
Aloha
 

Pièces jointes

  • Copie de ReposV2_PQ-1.xlsx
    64.8 KB · Affichages: 2
Dernière édition:

CISCO

XLDnaute Barbatruc
Rebonjour

Lorsque tu importes les nouvelles données dans cette feuille, est-ce que tu le fais en une seule fois pour toutes les personnes, ou un paquet pour une personne, puis un autre en dessous pour une autre personne, et ainsi de suite ?

@ plus
 

Aloha

XLDnaute Accro
Rebonjour

Lorsque tu importes les nouvelles données dans cette feuille, est-ce que tu le fais en une seule fois pour toutes les personnes, ou un paquet pour une personne, puis un autre en dessous pour une autre personne, et ainsi de suite ?

@ plus
Re,
Voici le fonctionnement du système:
Tous les services (11 ou 12) reçoivent tous les mois un fichier vide (j'avais posté un modèle rempli) qui comporte une fiche identique pour chaque salarié.
A la fin du mois les fichiers remplis sont renvoyés par mail au gestionnaire qui lance une macro qui ouvre un fichier après l'autre (cela peut se faire en 1 ou en plusieurs fois, les fichiers n'arrivant pas en même temps et des fois il y a aussi des retardataires), parcourt toutes les fiches et importe les données fiche par fiche. A la fin de l'opération toutes les saisies se retrouvent donc dans le tableau triées (enfin, triées du fait de la méthode d'importation mois par mois, service par service et salarié par salarié) regroupées par mois, par service et par salarié.
P.ex.: Service 1, mois de janvier, chaque salarié avec toutes les dates du mois, puis Service 2 idem... jusqu'au Service 12.
Puis, le mois d'après: Service 1, mois de février, chaque salarié avec toutes les dates du mois, puis Service 2 idem... jusqu'au Service 12.
etc, jusqu'au mois de décembre
A+
Aloha
 

Statistiques des forums

Discussions
312 309
Messages
2 087 108
Membres
103 472
dernier inscrit
garnoux57