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

XL 2021 Intégration vacances scolaires à mon calendrier

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes et tous,

Je peine encore sur mon calendrier pour la création d'une ou plusieurs boucles.
Pour la création du calendrier automatique c'est bon (sur la feuil Calendrier), sur la feuille Vacances j'ai les dates des vacances scolaires par zone, du coup sur mon calendrier, j'ai rajouté 3 colonnes pour chaques zones, mon soucis c'est qu'à la création du calendrier (depuis le module Mod_Calendrier), j'aimerai pouvoir si la date est comprise entre les dates de la colonne "D" et "E" de la feuille Vacances, ça me colore la colonne correspondande du jour automatiquement sur ma feuille Calendrier.

Feuille Calendrier


Feuille Vacances


J'espère être assez compréhensif.
Merci à tous.
Nicolas

Et bonne fête de fin d'année
 

Pièces jointes

  • Calendrier Ephéméride Marée Vacances.xlsm
    465.3 KB · Affichages: 4

wDog66

XLDnaute Occasionnel
Bonjour,
Pourquoi ne pas avoir continuer sur votre précédent fil
Les solutions proposées ne vous convenaient pas !?
Alors dites le... au lieu de laisser tomber le fil en question
 

fanfan38

XLDnaute Barbatruc
Bonjour
Je t'ai fait la zone A avec des mfc
Pour ce faire j'ai ajouté une colonne date avant les vacances scolaire (colonnes masquées)

A+ François
 

Pièces jointes

  • Calendrier Ephéméride Marée Vacances.xlsm
    392.5 KB · Affichages: 3

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous et toutes et bonnes année 2025 et meilleurs codes .

J'ai revu la position des vacances sur mon calendrier, au lieu de mettre en colonne, j'ai mi en ligne, plus estétique.
Je remercie fanfan38 pour sa proposition de mise en forme conditionnel mais je suis pas un as avec ça non plus, le but est de l'intégrer par macro.
J'ai fais une approche, mais ça ne colle pas toute a fait, il y a un truc que j'ai du mal faire encore, voici le code:

VB:
Function create_calendrier(année, Mois)
    Dim i As Long, L As Long, col As Long, lig As Long, nbjour As Long, difeuro As Long, j, k, Jférié, Jfériéstring, coulférié, paques, pentecote, lunpentecote, ascension, Jfête, Jfêtestring
    Dim a, M
    Dim vdate As Date
    Dim zoneA As Range, zoneB As Range, zoneC As Range
    Dim cell As Range

    Application.ScreenUpdating = False

    ' Calcul des fêtes mobiles
    paques = Format(CDate(((Round(DateSerial(année, 4, (234 - 11 * (année Mod 19)) Mod 30) / 7, 0) * 7) - 6)), "dd/mm/") ' Calcul du lundi de Pâques
    ascension = Format(CDate(paques & année) + 39, "dd/mm/") ' Calcul du jeudi de l'Ascension
    pentecote = Format(CDate(paques & année) + 49, "dd/mm/") ' Calcul du dimanche de Pentecôte
    lunpentecote = Format(CDate(paques & année) + 50, "dd/mm/") ' Calcul du lundi de Pentecôte

    ' Liste des jours fériés
    Jférié = Array("25/12/", "01/01/", "14/02/", paques, ascension, pentecote, lunpentecote, IIf(année > 1973, "01/05/", ""), IIf(année > 1944, "08/05/", ""), "14/07/", "15/08/", "01/11/", "11/11/")
    Jfériéstring = Array("NOËL", "Jour de l'an", "Saint-Valentin", "Pâques", "Ascension", "Pentecôte", "Lundi de Pentecôte", IIf(année > 1973, "Fête du travail", ""), IIf(année > 1944, "Victoire 1945", ""), "Fête nationale", "Assomption", "Toussaint", "Armistice 1918")

    ' Nombre de jours dans le mois
    nbjour = Day(DateSerial(année, Mois + 1, 0))
    col = Weekday(DateSerial(année, Mois, 1), vbMonday) + 1 ' Index du jour de la semaine
    If Weekday(DateSerial(année, 1, 1), vbMonday) > 4 Then difeuro = 1

    lig = Range("Calendrier").row + 1 ' Ligne de départ pour le calendrier

    ' Définir les plages de la Feuille B pour les zones A, B et C
    With Worksheets("Vacances")
        Set zoneA = .Range("A2:A" & .cells(.rows.Count, "A").End(xlUp).row)
        Set zoneB = .Range("B2:B" & .cells(.rows.Count, "B").End(xlUp).row)
        Set zoneC = .Range("C2:C" & .cells(.rows.Count, "C").End(xlUp).row)
    End With

    ' Génération du calendrier
    With Worksheets("Calendrier")
        .Range("Calendrier").ClearContents
        .Range("Calendrier").Offset(1, 1).Interior.Color = xlNone
        .Range("Calendrier").Offset(1, 1).ClearComments

        .Range("B17:B18").ClearContents
        .Range("B20").ClearContents
        .Range("D17:E17").ClearContents
        .Range("G17").ClearContents

        For i = 1 To nbjour
            If col = 9 Then lig = lig + 5: col = 2
            .cells(lig, col).Interior.Color = 15395562
            .cells(lig, col) = i

            ' Calcul de la date actuelle
            a = Year(Range("B1")): M = Month(Range("B1")): j = i
            vdate = DateSerial(a, M, j)

            ' Vérification des zones (A, B, C) et application de couleurs
            For Each cell In zoneA
                If cell.Value = vdate Then
                    .cells(lig + 2, col).Interior.Color = RGB(255, 200, 200) ' Rouge clair pour zone A
                    Exit For
                End If
            Next cell

            For Each cell In zoneB
                If cell.Value = vdate Then
                    .cells(lig + 3, col).Interior.Color = RGB(200, 255, 200) ' Vert clair pour zone B
                    Exit For
                End If
            Next cell

            For Each cell In zoneC
                If cell.Value = vdate Then
                    .cells(lig + 4, col).Interior.Color = RGB(200, 200, 255) ' Bleu clair pour zone C
                    Exit For
                End If
            Next cell

            ' Vérification des jours fériés
            For j = 0 To UBound(Jférié)
                If CDate(Jférié(j) & année) = DateSerial(année, Mois, i) Then
                    .cells(lig + 1, col).Interior.Color = 10092441 ' Couleur pour jour férié
                    .cells(lig + 1, col) = Jfériéstring(j)
                End If
            Next j

            ' Coloration du jour actuel
            If Date = DateSerial(année, Mois, i) Then
                .cells(lig, col).Interior.Color = 65280
            End If

            col = col + 1
        Next i

        ' Ajout du titre et des jours de la semaine
        .Range("B1") = UCase(Format(DateSerial(année, Mois, 1), "mmmm yyyy"))
        .Range("A2").Resize(1, 8) = Array("Semaine", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
    End With

    Algorithme année, Mois, 12
    Call recup_phase
End Function



Sur chaque mois, ça n'a pas l'air de coller comme il faut

Merci
Nicolas
 

Pièces jointes

  • Calendrier Ephéméride Marée V2.777.xlsm
    414.3 KB · Affichages: 2
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
C'est vraiment indispensable d'avoir une feuille qui va jusqu'à la 16135e colonne ?
Bon, OK, ça ne fait augmenter le poids du fichier que de 45 ko, mais quel en est réellement l'intérêt ?


Quant à ton pb des VS, puisque l'idée de la MFC te plait, tu dois pouvoir l'appliquer puis recopier en couleur de fond la couleur mise par la MFC.


C'est formidable : sur ton gif on voit les VS en haut de journée mais quand j'e crée un mois avec ton fichier, chez moi les VS sont en bas de journée ! C'est prodigieux !


Et si tu ajoutais les jours qui sont fériés en France voire en Alsace et Moselle... ne serait-ce pas une bonne idée ?
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD

Bonjour Jacky,

J'ai fais des rectif entre temps,



1- Pour le nombre de colonne je comprends pas
2- Les MFC je connais pas, c'est pour ça que je passe par mon module
3- Alsace, Moselle on verra, chaque chose en son temps

Là pour l'instant mon problème, c'est que suis obligé de créer 2x mon calendrier pour que les jours de VS corresponde au jour, je comprends pas
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Je pense avoir trouvé

Code:
Function create_calendrier(année, Mois)
    Dim i As Long, col As Long, lig As Long, nbjour As Long, difeuro As Long, j
    Dim Jférié, Jfériéstring, paques, pentecote, lunpentecote, ascension, vdate As Date
    Dim zoneA As Range, zoneB As Range, zoneC As Range, cell As Range

    Application.ScreenUpdating = False

    ' Calcul des fêtes mobiles
    paques = CDate(((Round(DateSerial(année, 4, (234 - 11 * (année Mod 19)) Mod 30) / 7, 0) * 7) - 6))
    ascension = paques + 39
    pentecote = paques + 49
    lunpentecote = paques + 50

    ' Liste des jours fériés
    Jférié = Array(DateSerial(année, 12, 25), DateSerial(année, 1, 1), DateSerial(année, 2, 14), paques, ascension, pentecote, lunpentecote)
    Jfériéstring = Array("NOËL", "Jour de l'an", "Saint-Valentin", "Pâques", "Ascension", "Pentecôte", "Lundi de Pentecôte")

    ' Nombre de jours dans le mois
    nbjour = Day(DateSerial(année, Mois + 1, 0))
    col = Weekday(DateSerial(année, Mois, 1), vbMonday) + 1
    If Weekday(DateSerial(année, 1, 1), vbMonday) > 4 Then difeuro = 1

    lig = Range("Calendrier").row + 1

    ' Définir les plages des zones (A, B, C)
    With Worksheets("Vacances")
        Set zoneA = .Range("A2:A" & .cells(.rows.Count, "A").End(xlUp).row)
        Set zoneB = .Range("B2:B" & .cells(.rows.Count, "B").End(xlUp).row)
        Set zoneC = .Range("C2:C" & .cells(.rows.Count, "C").End(xlUp).row)
    End With

    ' Génération du calendrier
    With Worksheets("Calendrier")
        .Range("Calendrier").ClearContents
        .Range("Calendrier").Offset(1, 1).Interior.Color = xlNone

        For i = 1 To nbjour
            If col = 9 Then lig = lig + 5: col = 2
            .cells(lig, col).Interior.Color = 15395562
            .cells(lig, col) = i
            .cells(lig, 1) = Val(Format(DateSerial(année, Mois, i), "WW", vbMonday)) - difeuro
            vdate = DateSerial(année, Mois, i)

            ' Coloration par zones
            For Each cell In zoneA
                If IsDate(cell.Value) And cell.Value = vdate Then
                    .cells(lig + 1, col).Interior.Color = RGB(255, 200, 200)
                    Exit For
                End If
            Next cell

            For Each cell In zoneB
                If IsDate(cell.Value) And cell.Value = vdate Then
                    .cells(lig + 2, col).Interior.Color = RGB(200, 255, 200)
                    Exit For
                End If
            Next cell

            For Each cell In zoneC
                If IsDate(cell.Value) And cell.Value = vdate Then
                    .cells(lig + 3, col).Interior.Color = RGB(200, 200, 255)
                    Exit For
                End If
            Next cell

            ' Coloration des jours fériés
            For j = 0 To UBound(Jférié)
                If vdate = Jférié(j) Then
                    .cells(lig + 4, col).Interior.Color = 10092441
                    .cells(lig + 4, col) = Jfériéstring(j)
                End If
            Next j

            col = col + 1
        Next i

        ' Ajout du titre
        .Range("B1") = UCase(Format(DateSerial(année, Mois, 1), "mmmm yyyy"))
        .Range("A2").Resize(1, 8) = Array("Semaine", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
    End With

    Application.ScreenUpdating = True
End Function
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…