XL 2019 Générer liste des jours de classe (L-M-J-V) en retirant vacances et jours fériés

FredMa

XLDnaute Nouveau
Bonjour,

Je cherche à générer la liste des jours de classes d'une année scolaire en retirant :
- les mercredis, samedis, dimanches,
- les jours de vacances,
- les jours fériés.
J'arrive avec la formule =SERIE.JOUR.OUVRE à exclure les we et jours fériés...
=SERIE.JOUR.OUVRE(B2;1;A2:A10)
ou la plage A2:A10 correspond à la liste des jours fériés.

Mercredi-Samedi-Dimanche : OU(JOURSEM(H3)=4;JOURSEM(H3)=7;JOURSEM(H3)=1)

Par contre, je ne vois pas comment exclure en plus les mercredis et zones de vacances.
J'avais pensé utiliser JOURSEM() et RECHERCHEV() mais je n'arrive à rien ;(

Un petit fichier pour être plus clair.

Merci de votre aide
Fred
 

Pièces jointes

  • Test.xlsx
    12 KB · Affichages: 14

FredMa

XLDnaute Nouveau
Bonsoir,
J'ai fait quelques modifications dans la macro pour distinguer dans le planning global les jours fériés, les mercredis, les we et les vacances afin de faciliter ensuite les découpages par semaine et période scolaire.

J'avance quelques pistes dans la macro pour faire ces découpages mais pas certain que cela soit les bonnes solutions...
 

Pièces jointes

  • Test4.xlsm
    168.9 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Vraiment pas tout compris à l'imbrication de vos macros, et leur logique.
Donc en PJ un essai de construction du planning par périodes et semaines.
La macro se lance avec le bouton "Construit planning par Périodes et Semaines."
La macro Module3/DécoupeParPériode construit la trame du calendrier, la macro MiseEnFormeCalendrier fait la mise en forme ( fusion cellules, couleurs, encadrement ... )
A vous de réintégrer ces macros dans votre contexte, en les bidouillant ou non suivant vos besoins.
 

Pièces jointes

  • Test4 (V3).xlsm
    170.1 KB · Affichages: 5

FredMa

XLDnaute Nouveau
Super, merci.
Par contre le test pour le découpage de semaine ne fonctionne pas quand il y a un jour férié dans la semaine puisqu'il découpe la semaine ;(
VB:
If Weekday(TabloCalendar(i, 1), 2) = 1 Or TabloCalendar(i - 1, 2) = "Férié" Then      'Lundi ou début semaine suivante
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans ce planning, où figure le Mercredi 8 Mai 2019 qui est férié ?
1699425512349.png


Donc soyez plus précis, les YaKaFoKon n'ont jamais fait avancer les choses. XLD reste un site d'entraide, non un magasin à solutions.
 

FredMa

XLDnaute Nouveau
Bonjour,
J'ai essayé de retravailler mon projet mais n'arrive à rien de concluant :
- Avec la macro TableauPeriode (reprise du code de la macro DecoupePeriode pour ne pas tout casser),
j'essaye de ventiler le planning sur 5 colonnes (5 périodes) mais je perds la mise en forme qui générée par la macro MiseEnFormeTableauPeriode. Je ne vois pas où est le probème...
- Je n'ai pas trouvé comme géré l'erreur de découpage de semaine quand il y a un jour férié isolé dans la semaine (cas du 8 mai).
Un petit coup de pouce ?

Fred
 

Pièces jointes

  • Test4 (V4).xlsm
    101.4 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Votre PJ est boguée, les 3,4,5 janvier sont gris. Vous l'avez bidouillée ? :)
En PJ je suis reparti de ma dernière PJ. Avec cette modif :
VB:
Sub CopierCollerPériodes()
' Effacement tableau présent
Rows("9:50").Delete Shift:=xlUp
Application.ScreenUpdating = False
' Tableau des lignes qui contiennent "Période"
Dim Tpériodes(1 To 10)
For i = 1 To 10
    With Sheets("TBL")
        If Application.CountIf(.[J:J], "Période" & i) = 1 Then
            Tpériodes(i) = Application.Match("Période" & i, .[J:J], 0)
        Else
            Tpériodes(i) = .Cells(.Cells.Rows.Count, "K").End(xlUp).Row+1
            Exit For
        End If
    End With
Next i
' Copier coller des périodes
For i = 1 To 10
    If Tpériodes(i + 1) = "" Then [A1].Select: Columns.AutoFit: Exit Sub
    Colonne = 3 * i - 1
    CopierColler Tpériodes(i), Tpériodes(i + 1) - 1, Colonne
Next i
Columns.AutoFit
End Sub
Sub CopierColler(Deb, Fin, Colonne)
Sheets("TBL").Range("J" & Deb & ":K" & Fin).Copy
Cells(9, Colonne).Select
ActiveSheet.Paste
End Sub
 

Pièces jointes

  • Test4 (V5).xlsm
    175.4 KB · Affichages: 4
Dernière édition:

FredMa

XLDnaute Nouveau
Merci, merci...
Même si l'effet n'est pas satisfaisant, j'ai effectivement pas mal bidouillé ;)
J'avais notamment essayé de modifier les conditions pour éviter la découpage de semaine quand il y a un jour férié isolé dans la semaine (cas du 8 mai et cas du pont de l'ascension). J'avais résolu le pb pour le pont de l'ascension (il pose par exemple problème l'année 2021/2022).
Les 3 jours grisés début janvier apparaissent pour certaines années, même avec votre version 5 (année 2022-2023).

VB:
For i = 1 To UBound(TabloCalendar)
    If TabloCalendar(i, 2) = "" Then                        ' Si vide : jour de classe
        On Error Resume Next
        If Weekday(TabloCalendar(i, 1), 2) = 1 Or TabloCalendar(i - 1, 2) = "Férié" Then      'Lundi ou début semaine suivante
            Cells(Ligne, "J") = "S " & Semaine
            Cells(Ligne, "K") = TabloCalendar(i, 1)
            Semaine = Semaine + 1: Ligne = Ligne + 1
        Else                                                ' Donc pas début de semaine
            Cells(Ligne, "K") = TabloCalendar(i, 1)
            Ligne = Ligne + 1
        End If
    Else
        If TabloCalendar(i, 2) = "Vacances" And TabloCalendar(i - 1, 2) <> "Vacances" And TabloCalendar(i + 1, 2) = "Vacances" And Période < 5 Then
        'Fred Ajout dans le If : And TabloCalendar(i + 1, 2) = "Vacances" pour exclure le pont d'ascension
        'Fred Ajout dans le If : And Période < 5 pour éviter le Période 6
 

FredMa

XLDnaute Nouveau
Merci de la patience...
En 2021-2022, le pont de l'ascension fait la découpe car il est considéré comme "Vacances"
1705686892048.png

1705687019254.png

C'est pour cela que j'avais rajouté
VB:
If TabloCalendar(i, 2) = "Vacances" And TabloCalendar(i - 1, 2) <> "Vacances" And TabloCalendar(i + 1, 2) = "Vacances" And Période < 5 Then
        'Fred Ajout dans le If : And TabloCalendar(i + 1, 2) = "Vacances" pour exclure le pont d'ascension
        'Fred Ajout dans le If : And Période < 5 pour éviter le Période 6
En 2022-2023, toutes les semaines qui démarrent par un mardi sont grisées. Il n'y avait que la première semaine de janvier avec la version V5
1705687171414.png

1705687303764.png


En 2023-2024, le 8 mai fait la découpe
1705686483457.png


Un vrai casse tête...
 

FredMa

XLDnaute Nouveau
Pour les jours grisés, peut-être :
VB:
If Weekday(TabloCalendar(i, 1), 2) = 1 Or TabloCalendar(i - 1, 2) = "Férié" _
            And (TabloCalendar(i - 2, 2) = "Férié" Or TabloCalendar(i - 2, 2) = "Vacances" Or TabloCalendar(i - 2, 2) = "Week-end") Then      'Lundi ou début semaine suivante

Bon après au bout de quelques lancements de la macro, celle-ci s'emballe
1705692122212.png

et la macro plante
1705692166033.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Essayez cette PJ, mais vous risquez encore de trouver une config non prévue pour une certaine année. :)
Pour simplifier l'écriture j'ai défini des conditions, puis ensuite il suffit de faire :
VB:
If Condition1 Or Condition2 Or Condition3 Then
J'ai l'impression d'avoir résolu certains problèmes, mai peut être pas tous.
 

Pièces jointes

  • Test4 (V7).xlsm
    179.3 KB · Affichages: 3

FredMa

XLDnaute Nouveau
Les années se suivent et ne se ressemblent pas mais on est bien avec cette V7 ;)
Me voici débloqué et prêt à intégrer vos codes dans mon projet.
J'ai de quoi bidouiller et apprendre à partir de vos macros...
Je reviendrai présenter une version V8 prochainement

Mille merci
 

FredMa

XLDnaute Nouveau
Voici l'intégration dans mon projet des différentes macros.
J'arrive bientôt au bout. L'onglet Paramétrage indique les quelques coquilles ou points à revoir.
Je ne sais pas ce qui se passe mais les jours fériés ne s'affichent plus en bleu dans les calendriers annuels. Un pb avec les règles conditionnelles ? J'ai également regardé du côté du "Gestionnaire des noms" mais je ne vois.
J'ai généré la liste des semaines travaillées mais je n'arrive pas via la macro à supprimer les cellules vides.

1706528748296.png
 

Pièces jointes

  • Générateur calendrier scolaireV1.xlsm
    157.2 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Le problème des semaines semble résolu, j'ai testé de 2020 à 2025 ça m'a l'air correct;
Le souci des MFC vient du fait que vous avez déclaré Fériés avec une portée unique sur la feuille au lieu du classeur :
1706540807917.png

Votre fichier est devenu trop complexe pour pouvoir analyser un problème vraiment spécifique.
La prochaine fois, donnez juste un petit fichier test, ce sera plus simple à appréhender. :)
 

Pièces jointes

  • Générateur calendrier scolaireV2.xlsm
    144.6 KB · Affichages: 2

FredMa

XLDnaute Nouveau
Merci une fois de plus @sylvanu !
Voici un fichier épuré où je cherche à afficher les semaines en colonne L sans les cellules vides et sans retour à la ligne lorsque je renseigne le numéro de Période.
Je voulais profiter de la macro "DécoupeParPériode" qui génère les colonnes J, K pour afficher sur la colonne L la liste des semaines mais ce n'est peut-être pas le plus pertinent.
1706547152206.png
 

Pièces jointes

  • SemaineV1.xlsm
    45.9 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin