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

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
Bonjour,
J'ai reçu un mail de la directrice décrivant ce qui se passe exactement depuis l'ouverture du fichier.
Voici ce qu'elle écrit:
Elle ouvre le fichier Base.xlsm et elle obtient le message si elle veut mettre à jour les liaisons avec d'autres classeurs.
J'ai trouvé la raison qui tient à mon inadvertance à moi: j'avais copié les titres des colonnes dans Database depuis un autre fichier, et comme il y a 2020 et 2021 dedans, valeurs prises à un autre endroit, le tour est joué.

Puis elle appuie sur le bouton dans SAISIES et elle obtient immédiatement le message d'erreur.

Lorsqu'elle clique sur Débogage, elle reçoit le message d'erreur
"Erreur d'exécution 9: L'indice n'appartient pas à la sélection"
et le code est bloqué à l'instruction de la copie d'écran ci-annexée.
Je suppose que cela signifie que ces fiches n'existent pas dans le fichier qu'Excel vient d'ouvrir.
Je vais lui demander de vérifier cela.
Il faudrait peut-être, pour éviter cela, ajouter une instruction amenant Excel à vérifier si ces fiches sont présentes, de les supprimer (ou, mieux, ignorer) si c'est le cas et de continuer s'ils n'existent pas.

Elle utilise Excel 2016 en français, donc pas de problème de ce côté-là.
A+
Aloha
 

Pièces jointes

  • Erreur 9.JPG
    84.2 KB · Affichages: 9
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Est-ce que ces 3 feuille, Codes, Résumé, et Tableau, existent normalement dans les fichiers source mensuels ?

1) Si oui, toujours, il faut laisser cette ligne de code et trouver le vrai motif correspondant à ce message d'erreur.
2) Si parfois, oui, parfois, non, il faut effectivement ajouter une ou des lignes vérifiant leur présence
3) Si jamais, il suffit de supprimer cette ligne (ou de mettre une apostrophe devant)

Dans la macro, on liste les une après les autres toutes les feuilles de tous les fichiers contenus dans Tobecopied. Seules nous intéressent les feuilles correspondant à chaque personne, pas les autres. Par conséquent, on supprime ces dernières, s'il y en a (ce qui semblait être le cas, d'après ce qui est écrit dans ta macro initiale (celle avec des noms/abréviations en allemand)).

Dis moi dans quel cas on se trouve. Dans le cas 2, je ferai les modifications correspondantes.

@ plus
 

Aloha

XLDnaute Accro
Re,
J'étais étonné que ces feuilles n'existent pas, ce qui est le cas dans la situation normale.
En tout cas, les fichiers mensuels renvoyés remplis les contiennent; donc il faut partir de cette situation et dans ce cas il n'y a rien à modifier.
L'alternative serait de les ignorer au lieu de les supprimer, mais, comme le fichier n'est pas enregistré à la fin, cela revient au même.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

On peut faire, en mettant à la place de la ligne de code en jaune, les lignes suivantes :
On Error Resume Next
Fichierouvert.Sheets("Codes").Delete
Fichierouvert.Sheets("Résumé").Delete
Fichierouvert.Sheets("Tableau").Delete
On Error GoTo 0


@ plus
 

CISCO

XLDnaute Barbatruc
Bonsoir

J'ai fait quelques erreurs de déclaration des variables.

Comme tu as 130 personnes, le fichier final va comporter environ 130 x 365 = 47450 lignes, et comme les Integer vont de -32 768 à 32 767, cela n'ira pas lorsque vous chargerez les fichiers correspondants aux derniers mois de l'année.
Il faut donc remplacer la plupart des Integer par des Long, comme ci-dessous :

Dans le module 3

__________________________

____________________________

____________________________


@ plus
 

Pièces jointes

  • Database Aloha.JPG
    16.1 KB · Affichages: 7
  • Couleur Aloha.JPG
    18.4 KB · Affichages: 106
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Encore une petite modification, dans la macro Calculs.

En pensant au contenu du post 170, j'ai réalisé que je n'avais pas été assez précis dans la rédaction de cette macro.
Le compteur permet de connaitre le nombre d'heures depuis la fin du repos précédent de plus de 44 h : 1, 2, 3 et ainsi de suite. Si il atteint la 44ème heure d'une nouvelle période de repos, il s'arrête. Si ce compteur indique 168 = 7 * 24, c'est qu'on est 7 jours après la fin du précédent repos d'au moins 44 h, sans avoir rencontré une nouvelle période faisant plus de 44 h. Il faut donc compter et/ou mettre en valeur ces 168 dans le tableau reposncp si la cellule correspondante dans le tableau repos ne contient pas un 44 (Si elle contient un 44, la condition est vérifiée de justesse (une heure plus tard, et ce n'était pas bon), mais elle est vérifiée. Si elle contient moins, c'est que la condition n'est pas vérifiée).
Il faut donc modifier la ligne de code tout à la fin de la macro Calculs
Range("AF4:AF" & (3 + nbre_personnes)).FormulaR1C1 = "= SUMPRODUCT((Nometprénomtrié = RC[-3])*(Tableaureposncp=7*24))"
comme suit
Range("AF4:AF" & (3 + nbre_personnes)).FormulaR1C1 = "= SUMPRODUCT((Nometprénomtrié = RC[-3])*(Tableaurepos < 44)*(Tableaureposncp=7*24))"
On n'a pas à considérer les cas où Tableaurepos >44, car alors on a une cellule vide dans le tableau reposncp.

Je vais corriger quelques uns des fichiers précédents sur ce fil en conséquence, au cas où d'autres personnes utiliseraient cette méthode dans des situations similaires.

Il faut encore choisir comment sont pris en compte :
* le début et la fin de l'année. Dans la macro actuelle, la première période de repos de 44 h minimum est considérée comme finissant le 31/12 à minuit. Le compteur est mis en route le 01/01 à 0 h.
* les congés C (Ne pas les prendre en compte me parait bizarre. Il va y avoir des repos de 44 h non suivis d'un autre repos de 44 h dans les 7 jours, car, en réalité, pendant cette période, la personne aura pris des congés).

@ plus
 
Dernière édition:

Aloha

XLDnaute Accro
Bonjour,

Je suis en train d'analyser ton mail et les tableaux.
Dans le module 1
Je ne trouve cette macro nulle part, ni dans ma Base ni dans le dernier fichier que tu as posté!

Dans la Sub Transfer il y a: "DLsource As Double"; dans ton mail c'est déclaré comme Integer, mais tu ne l'as pas relevé en jaune. Je le change en Integer?
A+
Aloha
 
Dernière édition:

Aloha

XLDnaute Accro
Il faut donc modifier la ligne de code tout à la fin de la macro Calculs
Je vais le faire et poster ma version modifiée comme version de travail, pour éviter toute confusion, dès que cette question de la macro que je ne trouve pas sera éclairée.
Je vais corriger quelques uns des fichiers précédents sur ce fil en conséquence, au cas où d'autres personnes utiliseraient cette méthode dans des situations similaires.
Stp, attends que je poste mon fichier modifié pour travailler là-dessus. Il t'est bien évidemment loisible de modifier aussi dans d'autres fichiers à toi si tu le juges utile, mais il faut qu'on fasse gaffe d'avoir toujours un seul fichier qui compte, sinon on s'y perd.

Fichier supprimé
 
Dernière édition:

Aloha

XLDnaute Accro
Bonjour


C'est la macro qui permet l'obtention de la plage verte dans tableau reposncp. Si tu as cette plage, c'est qu'il y a la macro... Elle est dans le module 1.

@ plus
Bonjour,
Je viens de poster mon dernier fichier (le fichier de travail): il n'y a pas la macro! Sinon, il faudra que je nettoie bien mes lunettes!

Dans le module 1 il n'y a que la petite Sub Bouton1_Cliquer() que j'avais fabriquée pour réunir les 3 boutons en un seul.
A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Excuse moi. C'était un essai que j'ai fait dans le module 1, que j'ai ensuite effacé.

Par contre, il faut corriger la macro événementielle servant à faire cette plage verte, sur Feuil1, comme ci-dessous


@ plus
 

Discussions similaires

Réponses
10
Affichages
1 K
Réponses
0
Affichages
379
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…