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

1) 2 ou 3 minutes, juste pour 300 lignes !
2) Vu la méthode utilisée, le temps nécessaire final ne sera pas proportionnel au nombre de lignes

Juste pour comparé, j'ai fait un essai avec une petite macro avec la fonction replace sur le tableau initial, sur la feuille, pour obtenir des 1 à la place des cellules vides, et des 0 pour les autres. On obtient ainsi quelque chose qui ressemble au tableauUn cité ci-dessus, mais sans avoir classé les données par personne. Et c'est... "INSTANTANE".

@ plus
 
Dernière édition:

Aloha

XLDnaute Accro
Bonjour

Une possibilité avec macro en pièce jointe.

Colonne AH : Une formule à tirer vers le bas (Actuellement, il peut y avoir jusqu'à environ 150 noms).
Les colonnes AI et AJ sont remplies automatiquement par la macro en fonction du contenu de la colonne AH, macro à lancer avec le smiley "Macro repos".

Il faut bien sûr tester tout cela.
Je ne suis pas certain d'avoir prévu tous les cas particuliers et d'avoir bien traité les cas limites (repos de 44 h finissant le mardi matin à 6 h, repos de 44 h suivant un autre repos juste à la limite des 7 jours, repos à la fin de l'année...).
Je n'ai pas fait de vérification par rapport au second problème (La macro donne un résultat, mais je n'ai pas fait d'exemple particulier pour voir si ce résultat est correct).
Je regarderai tout cela plus tard.

@ plus

P.S : D'ailleurs, comment est-ce qu'on fait pour le second problème, pour les 7 jours suivants la dernière période de repos de 44 h ? Si par ex, tu as une période de 44 h finissant le 25/12 à 12 h, puis plus de période de repos de 44 h ou plus après. On n'a pas 7 jours d'ici au 31/12 à minuit. Donc, est-ce qu'on tient compte de cette période ou pas ?
Il n'y a pas de fichier joint!

J'ai réussi à fabriquer une macro qui importe les données.
La colonne B, avec le nom des jours, est-elle utilisée?
 

CISCO

XLDnaute Barbatruc
Bonsoir

Pour ce qui est de la rapidité d'exécution, regarde le fichier en pièce jointe, et, sur la seconde feuille clique sur le bouton Tri 3 clés. Tu verras ce qu'on peut appeler un tri rapide...
C'est la macro de Donald L.Shell, modifiée pour s'adapter à ton fichier. Il faudrait que je la comprenne mieux pour :
* Remplacer les vides par des uns, les autres valeurs par des 0
* et pourquoi pas, mettre une seule ligne par personne.

@ plus
 

Pièces jointes

  • Aloha ShellSort.zip
    147.5 KB · Affichages: 5

Aloha

XLDnaute Accro
Bonjour

La colonne B n'est pas indispensable, puisqu'on peut obtenir le jour de la semaine, aussi bien par formule qu'en VBA, à partir de la colonne A.

@ plus
Bonjour,

Après avoir réussi à faire copier les données je me suis cassé les dents justement pour insérer la formule par VBA et la tirer vers le bas. Mon problème est que ce que Excel considère comme dernière ligne n'est pas la dernière contenant une valeur et je n'ai toujours pas compris comment lui dire de ne considérer que les cellules avec valeurs. Il considère les lignes vides copiées restant après le tri comme lignes non vides.

Si je comprends bien, la détermination du jour peut se faire en arrière-plan dans le code? Uniquement pour les calculs, donc de façon invisible ou bien aussi pour les afficher dans la colonne B?
S'ils sont aussi affichés il devrait y avoir moyen de colorier (par formatage conditionnel ou VBA?) les heures des WE tels que définis (samedi 6:00 - mardi 6:00) pour faciliter la tâche aux gestionnaires du système en relevant les WE par colorisation.

Bonne journée
Aloha
 

Aloha

XLDnaute Accro
Re,
J'ai réussi à remplir la colonne B comme il faut!
Ce qui signifie que le travail avant les calculs est fait.
Le code n'est pa bien élégant et il y aurait matière à amélioration, mais comme il tourne je m'en contente pour l'instant.
A+
Aloha
 

chris

XLDnaute Barbatruc
Bonjour à tous

Je n'ai pas tout lu donc je ne sais sous quelle forme doit apparaitre le résultat

Une proposition PowerQuery (en addon sur 2010 et 2013, intégré à partir de 2016)
 

Pièces jointes

  • Repos5_PQ.xlsx
    58.1 KB · Affichages: 10

Aloha

XLDnaute Accro
Re bonsoir,

Lorsque je lance la macro du fichier du post #37 en appuyant sur le bouton rigolo, j'obtiens un message d'erreur à l'instruction suivante:
VB:
            tableauUnfinal(ligbis * 24 + col - 5) = WorksheetFunction(tableauUnfinal(ligbis * 24 + col - 6), 1) + 1

Lorsque j'intègre la macro dans mon fichier réel, j'ai le même problème.

Le message:
Erreur d'exécution 438: Propriété ou méthode non gérée par cet objet.

Il devrait aussi être possible de démarrer dans une prochaine étape la macro par l'action de copier des données.

Bonne soirée
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir

Une autre méthode pour faire le "tri", pour obtenir une seule colonne par personne, avec des 1 à la place des vides et des 0 à la place des autres valeurs (colonnes BP et BQ du fichier ci-joint, pour deux personnes seulement, après avoir lancé la macro Tri 3 clés en cliquant sur le smiley).

En réalité, on n'a pas besoin d'afficher les tableaux intermédiaires, commencant ici en AL3 et en BP3. Je les ai mis juste pour voir les résultats.

Après, c'est facile de faire les calculs nécessaires pour compte les WE corrects et les "semaines" manquantes. JE ferai ça demain dans la macro, dans les boucles qui existent déjà.

@ plus
 

Pièces jointes

  • Aloha Saisies nouvelle méthode VBA1_.zip
    130.3 KB · Affichages: 4

Statistiques des forums

Discussions
312 299
Messages
2 086 998
Membres
103 425
dernier inscrit
alainPontonnier