Microsoft 365 Récupérer dates de congés suivant matricule VBA

  • Initiateur de la discussion Initiateur de la discussion David
  • Date de début Date de début

David

XLDnaute Occasionnel
Bonjour à tous,

J'ai un fichier avec des dates de congés qui est jour par jour et j'ai besoin de regrouper ses jours par période, j'arrive à regrouper les jours, mais cela me pose problème si les dates ne se suivent pas.
j'ai des dates du 02/08/21 au 20/08/21 je les reçois sans les samedis et dimanches, jusque la c'est sans problème je tri sur le matricule et je récupère la première et dernière date, cela se complique s'il y a plusieurs périodes, exemple le 06 et le 12 aout sur le même matricule, à faire comme je fais ça me marque du 06 au 12 (2 jours), alors que je veux le 06 et le 12 (1 jour sur chaque date).

Pas sur que cela soit hyper clair, je vous joins un fichier d'exemple.

Merci.
 

Pièces jointes

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Par requête powerquery dans la feuille 'Résultat'.
Votre attendu est faux pour le premier matricule (83768). Ses dix jours de CP sont sur deux périodes, du 9 au 13 et du 16 au 20 août.

Quand les données changent, actualisez la requête

J'en profite pour vous joindre un autre exemple que j'avais fait pour un xldnaute et qui ajoute un regroupement par type de congé.



Cordialement
 

Pièces jointes

David

XLDnaute Occasionnel
Bonjour Hasco,

Mon attendu pour le premier matricule est bon, comme j'ai essayé de l'expliquer et dans mon fichier exemple si entre 2 dates c'est des samedis et un dimanches ça doit faire une seule période, soit du 09/08/21 au 20/08/21 10 jours de CP.
Je n'ai pas compris comment marchait votre fichier.
Merci
 

David

XLDnaute Occasionnel
Je pense que j'ai trouvé, je vais voir si je peux tenir compte des jours fériés qui ne seront pas dans le fichier d'origine, mais qui ne doit pas scinder les périodes

Si, quelqu'un a une idée, je prends.


VB:
 If Sheets("Base CP").Range("A" & CptDate + 1).Value - Sheets("Base CP").Range("A" & CptDate).Value <= 3 Or (Weekday(Sheets("Base CP").Range("A" & CptDate + 1).Value) = 2 And Sheets("Base CP").Range("A" & CptDate + 1).Value - Sheets("Base CP").Range("A" & CptDate).Value <= 3) Then
    CptDate = CptDate + 1
    Else
    CptDate = CptDate + 1
        GoTo suite
    End If

Merci
 

David

XLDnaute Occasionnel
Bonjour David

Version revue et corrigée qui tient compte des samedi, dimanche et jours fériés et les changements d'année de 2020 à 2039 :p:p:p

*J'ai fait des essais en modifiant les dates dans le fichier

*Merci de ton retour

@Phil69970
Merci beaucoup.
J'ai regardé la première version et il y avait un problème aussi bien sur la mienne que sur la tienne, j'ai simulé la prise de CP un 02 août, il est revenu travaillé le 03/08 et est reparti en CP le 04/08, ça génère la période du 02 au 04/08.

Avec cette version cela a l'air de marcher parfaitement, je regarde ce soir dans les détail.

Merci encore et bonne journée.
 

Discussions similaires

Réponses
4
Affichages
255
Réponses
2
Affichages
433
Réponses
3
Affichages
295
Réponses
4
Affichages
683
Réponses
1
Affichages
188
Réponses
14
Affichages
633
Réponses
3
Affichages
267

Statistiques des forums

Discussions
315 284
Messages
2 118 017
Membres
113 408
dernier inscrit
FITAS