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
Bonsoir

Cf. en pièce jointe, dans les plages L6:L8, P6: P8 et T6:T8. La formule dans L6 peut être tirée vers le bas. Idem pour celles dans P6 et T6. Ce sont presque les mêmes formules à chaque fois.

Dans J11, N11 et R11, tu as les formules matricielles qu'il faudrait mettre dans L6, P6 et T6 pour traiter le cas dans cette feuille, et pas l'exemple mis dans le tableau du haut avec 3 j de congé supp..

@ plus
 

Pièces jointes

  • Feuille annuelle valeurs 16.12.2017bis.xls
    740 KB · Affichages: 27

CISCO

XLDnaute Barbatruc
Bonjour

Cette dernière proposition ne prend peut être pas bien en compte :
* les cas où tu n'attribuerais qu'un ou deux jours de congé supplémentaires (et non trois comme dans ton exemple)
* l'enchainement des données d'une année à la suivante.

Je n'ai pas traité non plus les P à la fin.

A compléter donc.

@ plus
 

Aloha

XLDnaute Accro
Bonjour

Cette dernière proposition ne prend peut être pas bien en compte :
* les cas où tu n'attribuerais qu'un ou deux jours de congé supplémentaires (et non trois comme dans ton exemple)

Je ne comprends pas trop ce que tu veux dire: J'ai placé tes formules matricielles au bon endroit, et il n'y a donc plus qu'un seul jour supplém., mais tout semble fonctionner! J'ai juste ajouté, dans les formules calculant les heures, une vérification s'il y a une valeur dans la colonne des jours correspondante pour éviter les #DIV/O dans le cas où il n'y a pas de valeur.

Bonne journée
Aloha

P.S.: voudrais-tu bien, si tu me renvoies le fichier, lui donner le même nom, en adaptant l'heure.
 

Pièces jointes

  • Feuille annuelle valeurs 18.12.2017 1025.xls
    686 KB · Affichages: 28

CISCO

XLDnaute Barbatruc
Bonjour

Bonjour
Je ne comprends pas trop ce que tu veux dire...
Bonne journée
Aloha

Je voulais juste dire que je n'avais pas pris en compte ces possibilités (0, 1 ou 2 jours de congés, et non trois comme dans ton exemple) dans les formules, ce qui signifie que cela ne fonctionnerait peut être pas correctement si L6, N6 ou R6 étaient vides. Si cela fonctionnait mal, il aurait fallu rajouter dans la colonne L quelque chose du genre SI(J$6="";"";......) (aucun jour de repos), dans la colonne P, quelque chose du genre SI(N$6=0;"";.....) (1 seul jour de congé uniquement), et dans la colonne T, SI(R$6="";"";...) (deux jours de congés uniquement).

J'essaye de trouver une solution pour ce qui est des P.

@ plus
 
Dernière édition:

Aloha

XLDnaute Accro
Re,

Je voulais juste dire que je n'avais pas pris en compte ces possibilités (0, 1 ou 2 jours de congés, et non trois comme dans ton exemple) dans les formules, ce qui signifie que cela ne fonctionnerait peut être pas correctement si L6, N6 ou R6 étaient vides. Si cela fonctionnait mal, il aurait fallu rajouter dans la colonne L quelque chose du genre SI(J$6="";"";......) (aucun jour de repos), dans la colonne P, quelque chose du genre SI(N$6=0;"";.....) (1 seul jour de congé uniquement), et dans la colonne T, SI(R$6="";"";...) (deux jours de congés uniquement).

Jusqu'à la preuve du contraire (!) les formules que j'ai mises devraient fonctionner.

Je me répète: je n'ai toujours pas trouvé une solution pour INDIRECT. La fonction EXT.INDIRECT semble être assez incertaine (surtout pour l'utilisation avec une version récente d'Excel) et même difficile à trouver.

A+
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir

Les "P" me mènent la vie dure... J'arrive à compter le nombre de P dans chaque "bloc", sur chaque ligne, mais j'ai du mal à les mettre "bout à bout", lorsque qu'une série s'étale sur deux journées, sans arrêt à minuit.
Je cherche, je cherche...

Pour ce qui est transférer des données à partir d'un fichier fermé, normalement, cela doit être faisable en VBA. Il me semble avoir vu des sujets là dessus sur le forum.

@ plus
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Pour ce qui est des P, cf. en pièce jointe en colonne AR.

Dans les colonnes AL, AM et AN, les formules calculent le nombre de P successifs (3 groupes possibles par jour donc).
Dans les colonnes AO, AP et AQ, les formules reprennent ces valeurs en en décalant certaines lorsqu'une permanence est à cheval sur deux jours.

Je n'ai donc traité que le cas avec 3 groupes max par jour, et chevauchement d'un groupe sur deux jours au max, pas sur trois jours donc.

Est-ce que tu peux faire des tests à ce sujet pour voir si cela fonctionne bien.

@ plus

P.S : Je n'ai pas pris en compte le passage du 31/12/2016 au 01/01/2017 à ce sujet.
 

Pièces jointes

  • Feuille annuelle valeurs 19.12.2017 1008.xls
    1.1 MB · Affichages: 19

CISCO

XLDnaute Barbatruc
Rebonjour

Pour ce qui est du transfert de données à partir d'un fichier fermé, tu peux peut être adapter des propositions faites sur ce fil.

J'ai essayé avec une des propositions de Job75 dans ce fil, sans VBA (Je ne connaissais pas cette possibilité). Pas hyperpratique, mais pas mal quand même.

Pour fabriquer cela,
* tu ouvres les deux fichiers, ton fichier destination et ton fichier source
* dans le fichier destination, tu sélectionnes une plage, tu écris =
* tu sélectionnes la plage correspondante dans le fichier source, aussi grande que la plage dans le fichier destination
* et tu valides en matriciel dans le fichier destination après avoir cliqué dans la barre de formule.

Tu fais ça pour toutes les plages qui t'intéressent. Tu peux refermer les deux fichiers, réouvrir le fichier source, y faire des modifications, le fermer... Ensuite, tu réouvres le fichier destination. Pour actualiser les données, et c'est là que ce n'est pas hyperpratique, il faut resélectionner chaque plage, et les valider les unes après les autres en matriciel.

Je l'ai fait sur les deux fichiers en pièce jointe, et ça fonctionne. Déjà mieux que rien.

@ plus
 

Pièces jointes

  • source.xlsx
    8.6 KB · Affichages: 20
  • destination.xlsx
    11.2 KB · Affichages: 19

Aloha

XLDnaute Accro
Bonjour,

Bonjour

Pour ce qui est des P, cf. en pièce jointe en colonne AR.

Dans les colonnes AL, AM et AN, les formules calculent le nombre de P successifs (3 groupes possibles par jour donc).
Dans les colonnes AO, AP et AQ, les formules reprennent ces valeurs en en décalant certaines lorsqu'une permanence est à cheval sur deux jours.

Je n'ai donc traité que le cas avec 3 groupes max par jour, et chevauchement d'un groupe sur deux jours au max, pas sur trois jours donc.

Est-ce que tu peux faire des tests à ce sujet pour voir si cela fonctionne bien.

@ plus

P.S : Je n'ai pas pris en compte le passage du 31/12/2016 au 01/01/2017 à ce sujet.

J'ai testé cela. Ta solution fonctionne à la merveille!
...sauf pour le dernier jour d'un certain nombre de jours (>2?) de P consécutifs

Ainsi, du 16.7. 5:00 - 17.7. 5:00 = 24 = 0:30, alors que la formule renvoie 1:00.
C'est le seul cas (testé!) où les formules n'ont pas donné un résultat correct.
Je vais me procurer des fiches réelles pour tester dans des situation "vécues".

A+
Aloha
 

Pièces jointes

  • Feuille annuelle valeurs 19.12.2017 1345.xls
    1.1 MB · Affichages: 16

Aloha

XLDnaute Accro
Re,

Rebonjour

Pour ce qui est du transfert de données à partir d'un fichier fermé, tu peux peut être adapter des propositions faites sur ce fil.

J'ai essayé avec une des propositions de Job75 dans ce fil, sans VBA (Je ne connaissais pas cette possibilité). Pas hyperpratique, mais pas mal quand même.

Pour fabriquer cela,
* tu ouvres les deux fichiers, ton fichier destination et ton fichier source
* dans le fichier destination, tu sélectionnes une plage, tu écris =
* tu sélectionnes la plage correspondante dans le fichier source, aussi grande que la plage dans le fichier destination
* et tu valides en matriciel dans le fichier destination après avoir cliqué dans la barre de formule.

Tu fais ça pour toutes les plages qui t'intéressent. Tu peux refermer les deux fichiers, réouvrir le fichier source, y faire des modifications, le fermer... Ensuite, tu réouvres le fichier destination. Pour actualiser les données, et c'est là que ce n'est pas hyperpratique, il faut resélectionner chaque plage, et les valider les unes après les autres en matriciel.

Je l'ai fait sur les deux fichiers en pièce jointe, et ça fonctionne. Déjà mieux que rien.

@ plus

Merci pour le tuyau!
Cependant, je crains que cette solution, qui correspond en fait à une simple référence fixe à une cellule (ou un ensemble de cellules comme dans ton exemple) dans une feuille bien déterminée dans un autre fichier bien déterminé, ne puisse fonctionner dans mon cas.
Mon problème est que ni le fichier ni la feuille ne sont déterminés mais flexibles: l'opération doit se faire sur toutes les feuilles des fichiers annuels de tous les services.
Il me semble que le plus simple est d'intégrer l'ouverture du fichier qui fait l'objet de la référence dans le code VBA qui dirige le tout. Le seul petit problème: cela dépasse mes capacités d'adapter le code puisqu'il est extrêmement compliqué, avec des procédures ou fonctions que je ne comprends pas du tout.

Mais ça c'est un autre problème et je ne veux pas t'embêter davantage avec ça!

Bonne a.-midi
Aloha
 

CISCO

XLDnaute Barbatruc
Bonjour

Bonjour,
J'ai testé cela. Ta solution fonctionne à la merveille!
...sauf pour le dernier jour d'un certain nombre de jours (>2?) de P consécutifs
A+
Aloha

Ce n'est pas 00:30 pour 24 h de permanence de suite (ex : début à 5:00 inclus, fin à 5:00 non inclus ) ? Chez moi, c'est bien ce que me donne la formule de la colonne AR. Et pour 25 h de suite, on passe à deux unités, donc 1:00.

@ plus
 

Aloha

XLDnaute Accro
Bonsoir,

Ce n'est pas 00:30 pour 24 h de permanence de suite (ex : début à 5:00 inclus, fin à 5:00 non inclus ) ? Chez moi, c'est bien ce que me donne la formule de la colonne AR. Et pour 25 h de suite, on passe à deux unités, donc 1:00.

Si, bien sûr. Seulement dans le cas en espèce, la longue permanence (qui peut correspondre à la réalité; il s'agit d'ailleurs d'une simple permanence téléphonique) commence le 12.7 à 5:00 (pas très réaliste, mais soit) et la première tournée va jusqu'à 5:00 du lendemain et ainsi de suite, et à 5:00 le 16.7. commence la dernière permanence et elle comprend 24 heures et équivaut donc à 00:30 et non pas 1:00.

Bonne nuit
Aloha
 

CISCO

XLDnaute Barbatruc
Bonsoir

Oui, mais justement, chez moi, la formule donne bien 00:30.

ex 24h.JPG


@ plus
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 914
Membres
103 036
dernier inscrit
Greg33091