XL 2010 Détecter les périodes de <44 h. libres pendant 7 jours

Aloha

XLDnaute Accro
Bonjour,
Le titre est un peu compliqué; je l'explique.
Le contexte: des salariés ont droit à 1 jour de congé supplémentaire lorsque pendant 7 semaines consécutives ou non ils ne sont pas libres pendant 44 h. de suite par semaine.

Ils remplissent chacun une fiche mensuelle où ils saisissent toutes les heures en relation avec le contrat de travail, heure par heure, en inscrivant dans les cellules le type d'heure : travail ("X"), congé ("C"), maladie ("M"), heures supplémentaires (6 sortes, de "S1" à "S6"), réunions ("R"), etc. Ces fiches sont regroupées dans un classeur dont le nom se compose du nom du service, du mois et de l'année ([Mois] [Année] [SERVICEX].XLSX)

Admettons que je sois arrivé à regrouper ces données mois par mois et salarié par salarié (pour l'instant je le simule dans le fichier ci-joint; je dois m'occuper de ce problème par après) dans une base de données, en y copiant (de préf. par VBA, sinon par formule), les données requises de toutes les fiches de tous les mois et de tous les services.

Ce qui donne, en gros, un fichier comme celui qui est ci-joint.

J'ai donc compté jour par jour dans les fichiers remplis par les salariés les cases horaires (00:00 à 24:00, puisque le service fonctionne nuit et jour tous les jours de l'année) où il y a une inscription (colonne D) et j'ai retranché ce chiffre de 24, ce qui me donne donc les heures libres par période de 24 heures (colonne E). La colonne F tient compte de la date d'engagement et ne reprend les valeurs de la colonne E que pour la période du contrat de travail, sinon "HC" (hors contrat) est inscrit dans la case correspondante.

Il s'agit donc à présent de détecter, 7 jours par 7 jours, les périodes où dans la colonne F l'addition de 2 cellules superposées ne donne pas au moins 44, en commençant, pour déterminer les périodes de 7 jours, par le 1er janvier, resp. par la date d'engagement si le salarié a été engagé pendant l'années en cours,
 

Pièces jointes

  • 44 h. libres.xlsx
    18 KB · Affichages: 50

CISCO

XLDnaute Barbatruc
Bonjour

En pièce jointe, deux fichiers avec deux macros chacun :
* l'une calculant la durée max de repos de chaque période de 7 jours (semblable à la version précédente, si ce n'est quelques déclarations de variables différentes)
* l'autre calculant les congés supplémentaires à accorder à cause des permanences marquées d'un P (Si je me souviens bien de la règle, c'était "Toute période de permanence <= 24 h donne droit à 0:30 de congé supplémentaire". Exemple : 28 h de permanence sans interruption --> 0:30 +0:30. Autre exemple, 12 h --> 0:30 de congé)

Dans le fichier 29 03 2018, ces macros affichent les résultats dans les colonnes AG et AO.
Dans le fichier 29 03 2018 bis, idem dans les colonnes AB et AE. J'y ai supprimé certaines colonnes qui me paraissent maintenant inutiles, ainsi que certains noms dans le gestionnaire de noms. On peut aussi supprimer la colonne AA si cela te va mieux.

Il faut tester tout cela et revoir la partie L13:Y13 qui affiche #NA.

@ plus
 

Pièces jointes

  • Salarié 4 29 03 2018.xlsm
    159.6 KB · Affichages: 19
  • Salarié 4 29 03 2018bis.xlsm
    88.7 KB · Affichages: 30
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Et puisque les deux macros utilisent le même tableau et les mêmes boucles, pourquoi ne pas tout mettre ensemble, dans une seule macro ?

@ plus
 

Pièces jointes

  • Salarié 4 30 03 2018bis.xlsm
    81.3 KB · Affichages: 35

Aloha

XLDnaute Accro
Bonjour,
Merci beaucoup pour tout ce travail.
La procédure est ultrarapide à présent!
J'ai ajouté une saisie dans une cellule et ai redémarré la macro. Le chiffre dans AB n'est pas mis à jour. Pour qu'il le soit il faut d'abord effacer tous les chiffres de cette colonne. En réalité il suffirait d'ajouter cette opération au début de la macro.
A partir de dimanche je serai parti pendant 2 semaines.
A+
Aloha
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Rebonjour

Pour le moment, la macro démarre en dessous des dernières valeurs des colonnes AB et AE et va jusque la dernière date de la colonne A. Donc si tu changes une valeur dans les lignes déjà existantes, cela ne fonctionne pas, comme déjà écrit dans mon post #285. C'est une amélioration à faire...

@ plus
 

Aloha

XLDnaute Accro
Re,
ok
Pour l'instant, si cette situation se présentait où il faudrait apporter une modification aux saisies copiées il suffirait d'effacer toutes les données en AB.
Cependant, je ne comprends pas comment la macro recalcule dans ce cas puisqu'elle s'oriente d'après la colonne A.
A+
Aloha
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

La macro utilise les données entre les lignes :
* premlig, n° de ligne donnée par le min des dernières lignes contenant quelque chose dans les colonnes AB et AE
* et dernlig, la n° de la dernière ligne de la colonne A (les dates) contenant quelque chose

Pour le moment, si tu rajoutes quelque chose en dessous de ce qui existe déjà, premlig correspond au bas des colonnes AB et AE, donc aux dernières valeurs dans ces colonnes, et dernlig à la date la plus basse écrite en colonne A.

Si tu dois modifier des données dans ce qui existe déja, on peut très bien demander à la macro d'ouvrir une fenêtre où l'utilisateur indiquera à partir de quelle date il faut recommencer les calculs (ce qui modifiera premlig). Le code à écrire n'est pas très compliqué. la macro d'importation des données peut aussi donner cette information.

On peut aussi faire le nécessaire pour que la macro constate que de nouvelles données ont été écrites dans le tableau, et qu'elle recalcule premlig en fonction de la position de celles-ci.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Bonjour
...
Si tu dois modifier des données dans ce qui existe déja, on peut très bien demander à la macro d'ouvrir une fenêtre où l'utilisateur indiquera à partir de quelle date il faut recommencer les calculs (ce qui modifiera premlig). Le code à écrire n'est pas très compliqué.
...

@ plus

Si on adopte cette solution, il faudra faire le nécessaire pour que cette fenêtre ne s'ouvre que si une ou des lignes ont été changées dans l'ancienne partie. Si toutes les nouvelles données sont en dessous des anciennes, il ne faudra pas que la fenêtre s'ouvre. Sinon, si on ne prend pas cette précaution, elle s'ouvrirait pour chaque nouveau fichier, 180 fois si j'ai bien compris !!!

@ plus
 

Aloha

XLDnaute Accro
Bonjour,

Je suis tout à fait d'accord avec toi.
J'ai abandonné d'automatiser les opérations à 100%, puisque c'est trop lent.
Le jour où "notre" fichier (point de vue boulot c'est clairement le tien!) sera vraiment au point, il pourra servir à récolter les informations (j'avais pensé ajouter une feuille contenant les infos concernant les 44 h et la permanence de tous les salariés). Les gens qui s'en occupent n'auront plus qu'à saisir manuellement les données (il n'y en aura pas des tonnes) en vue de la production des fiches mensuelles vides.
Ce sera toujours un gain, parce que maintenant ils doivent tout vérifier manuellement.

A+
Aloha
 
Dernière édition:

Discussions similaires