Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Aloha

XLDnaute Accro
Bonjour,
Comme il s‘agit d‘un tableau indépendant de celui qui est rempli par les salariés, il ne faut pas des lignes vides.

Oui, le travail principal c‘est la macro qui fait la copie.
Je suis capable moi-même d‘enregistrer la macro (bien que, pour l‘instant, dans Excel Mac il y a comme un bug: l‘enregistrement n‘engistre ni l‘ouverture d‘un fichier ni le changement de fichier; j‘ai demandé assistance mais je n‘ai pas encore eu une réponse concluante), et même de trouver la première ligne vide, mais cet enregistrement ne concerne qu‘un seul salarié. Ce dont je ne suis pas capable, c‘est de rendre la macro globale, c.-à-d. de lui donner la faculté de faire la même opération pour tous les salariés d‘un service et pour tous les services ainsi que de créer une nouvelle fiche si un nouveau nom apparaît dans la liste des salariés d‘un service.

A la limite, mais ce n‘est pas bien élégant et gaspilleur de ressources, je peux -je l‘ai fait dans le passé et cela fonctionnait- dupliquer la macro pour chaque salarié, ce qui me fait plus de 100 macros alors qu’une seule suffirait.

Il s’en suit que j‘aurai besoin d‘aide pour cette tâche.

Après je dois encore transformer les jours de congé supplémentaires en heures, chose pas si facile dans les cas pas rares où un salarié change une ou même plusieurs fois de tâche hebdomadaire au cours d‘une année.
P.ex.: un salarié travaille 40 heures par semaine du 1.1. au 31.1. et le 15.1. (au cas où les calculs ne redémarrent pas à 0 chaque 1.1: je ne suis pas encore fixé sur cette question qui pourrait encore nécessiter une adaptation de formules dans le fichier annuel) il y a 8 cycles complets et donc un jour de congé. Après il travaille 20 heures par semaine jusqu‘au 31.12.. Il est évident qu‘à partir du 1.2. un jour ne vaut plus 8 mais seulement 4 heures et je dois donc calculer les heures au prorata.
En réalité j‘ai déjà une solution, mais il faut que je réétudie son fonctionnement.

A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Je ne suis pas assez à l'aise en VBA pour pouvoir t'aider facilement :
Trouver la première ligne vide, ça, il ni a pas de problème. Jongler avec plusieurs fichiers..., c'est nettement moins évident pour moi.
Mais bon, en cherchant sur le forum et sur le net...

Comment veux-tu procéder, avec un fichier par service, et une feuille par salarié de ce service dans le fichier correspondant ?

@ plus
 

Aloha

XLDnaute Accro
Re,
Oui, c‘est exactement comme cela que je veux procéder.
La macro actuelle, qui copie les données dans la BD trouve les fichiers à copier dans un dossier nommé „A copier“. Lorsque c‘est fait ils sont rangés dans les dossiers des services.
La nouvelle macro doit „profiter“ de la présence des fichiers dans le dossier „A copier“ pour faire son travail en même temps.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Je vais y réfléchir mais, vu mon niveau en VBA, cela m'est beaucoup moins "évident" que les formules. De plus, comme je fais 3 choses à la fois...

Ne te reste plus qu'à (beaucoup) patienter, sauf si un autre forumeur se penche sur le problème.

@ plus
 

Aloha

XLDnaute Accro
Bonjour,
Pour ne pas travailler sur le mauvais fichier: le dernier fichier annuel est bien celui de ton post #101?
Je me mets à enregistrer la macro. Mon problème avec Mac Excel relaté plus haut, je l'i contourné en enregistrant une macro avec un très vieux Mac et Excel 2003 qui enregistre bien toutes les opérations. Je copie les lignes concernant l'ouverture et le changement de fichier dans la macro d'Excel 2016.
Bonne journée
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir

Bonjour,
Pour ne pas travailler sur le mauvais fichier: le dernier fichier annuel est bien celui de ton post #101?
....
Bonne journée
Aloha

Tu peux y remplacer la formule dans AG6 par
Code:
SI(AF7="";"";SI((AF6<>AF7)*(AA6="");AF7-MAX(AD$5:AD5);SI(AF6=AF5;SI(AC6="";"";AC6-MAX(AF$5:AF5;AD$5:AD5));0)))

A tout hasard, la fonction SIERREUR n'existe pas dans Excel 2003.

@ plus
 

Aloha

XLDnaute Accro
Bonjour,

Nous n'utilisons plus la version 2003.
Je vais remplacer la formule.

En ce qui concerne la macro, je viens de créer un nouveau sujet:
"VBA: Copier des feuilles d'un fichier dans un autre".
J'ai construit un exemple tout simple, se limitant, pour l'instant, à l'équivalent d'un seul service.
On verra ce que cela donnera.
Bonne nuit
Aloha
 

Aloha

XLDnaute Accro
Bonjour,
J‘ai constaté que si je colle les valeurs d’un fichier mensuel dans le fichier annuel (Post #101), alors les formules ne fonctionnent pas correctement.
Bon dimanche
Aloha

 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonsoir

Pas très pratiques, les copies d'écran pour travailler...
Est-ce que tu pourrais mettre le fichier posant problème en pièce jointe, en ne gardant que le haut du tableau, en dépassant juste de 4 ou 5 lignes le première ligne affichant une erreur ?

@ plus
 

Aloha

XLDnaute Accro
Bonsoir,
Tu as raison! Je m'en doutais.
Voici un fichier avec les formules et avec des données copiées.

D'ailleurs, j'ai le code qui doit commander le tout; malheureusement il y a encore un hic avec une fonction Offset. ... s'il y avait quelqu'un qui s'y connaît pour y jeter un coup d'oeil je le posterais.
Bonne soirée
Aloha

P.S.: il y a des trucs bizarres qui se passent sur mon PC avec un nouveau SSD sur lequel Windows a été fraîchement installé pas plutôt qu'hier soir: mon mot de passe pour les mails n'est pas accepté, je tape sur des lettres qui se trouvent loin de la lettre "i" et il y a plusieurs i, j'ajoute un fichier ici et le nom manque, pour ne pas parler d'un mystérieux PC non identifiable connecté par Wlan à mon router....
 

Pièces jointes

  • Données copiées.xls
    512.5 KB · Affichages: 24

CISCO

XLDnaute Barbatruc
Bonjour

Quels sont les problèmes :
* le #NA dans AE18 ?
* les 00/01/1900 00:00 au début de la colonne AE ? Avez vous décidé de commencer la première période le 01/01/2017, ou voulez vous que cela dépende de la dernière période de l'année précédente ?

@ plus
 

Aloha

XLDnaute Accro
Bonsoir,
Oui, c'est le NA mais aussi la durée du repos qui ne peut être exacte puisque ce ne sont pas toujours des heures entières.
Désolé, mais je ne sais toujours pas définitivement si les calculs recommencent tous les 1.1. ou si c'est un calcul continu, pour ainsi dire jusqu'à la retraite du salarié.
Je pense, moi, qu'il faut continuer à calculer au-delà du 31.12., e.a. parce que ce n'est pas de la faute du salarié s'il accumule des périodes sans les 44 heures et dans cette optique les périodes amassées ne peuvent se perdre le 31.12. Mais cette interprétation reste à être confirmée.
Cependant, là il y aura encore le problème de transférer les données requises d'une année à l'autre.
Bonne nuit
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Est-ce que tu peux faire des tests avec cette pièce jointe, pour voir si le début est correct ? Si tu veux que la première période commence le 01/01, il suffit d'écrire dans AF12 la date 25/12/2016. Il faut essayer en changeant les valeurs dans les cellules vertes et en mettant un jour de travail à cheval sur le 31/12 et le 01/01.

@ plus
 

Pièces jointes

  • Données copiées alohabis.xls
    537 KB · Affichages: 20
Dernière édition:

Discussions similaires

Réponses
4
Affichages
396
Réponses
9
Affichages
247
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…