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

TooFatBoy

XLDnaute Barbatruc
La Saint Valentin est un jour férié chez toi ?

Tu vis au pays des Bisounours ? Quelle chance tu as de ne pas côtoyer comme nous la violence quotidienne de notre monde de fous furieux !


Sur ce, bonne année.
Tschüss
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
La Saint Valentin est un jour férié chez toi ?

Tu vis au pays des Bisounours ? Quelle chance tu as de ne pas côtoyer comme nous la violence quotidienne de notre monde de fous furieux !


Sur ce, bonne année.
Tschüss

Correction:

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

    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, 1, 1), _
        DateSerial(année, 5, 1), _
        DateSerial(année, 5, 8), _
        ascension, _
        pentecote, _
        lunpentecote, _
        DateSerial(année, 7, 14), _
        DateSerial(année, 8, 15), _
        DateSerial(année, 11, 1), _
        DateSerial(année, 11, 11), _
        DateSerial(année, 12, 25) _
    )
    Jfériéstring = Array( _
        "Jour de l'an", "Fête du Travail", "Victoire 1945", _
        "Ascension", "Pentecôte", "Lundi de Pentecôte", _
        "Fête Nationale", "Assomption", "Toussaint", "Armistice", "Noël" _
    )

    ' Nombre de jours dans le mois
    nbjour = Day(DateSerial(année, Mois + 1, 0))
    col = Weekday(DateSerial(année, Mois, 1), vbMonday) + 1 ' Lundi = 2 dans le tableau

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

    ' Définir les plages 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")
        ' Effacer le contenu précédent
        .Range("Calendrier").ClearContents
        .Range("Calendrier").Offset(1, 1).Interior.Color = xlNone
        .Range("Calendrier").Offset(1, 1).ClearComments

        ' Effacer les cellules hors du tableau principal
        .Range("B17:B18").ClearContents
        .Range("B20").ClearContents
        .Range("D17:E17").ClearContents
        .Range("G17").ClearContents

        ' Boucle pour générer les jours du mois
        For i = 1 To nbjour
            If col = 9 Then lig = lig + 5: col = 2
            .cells(lig, col).Interior.Color = 15395562 ' Couleur par défaut pour les jours
            .cells(lig, col).Value = i

            ' Calcul de la date actuelle
            vdate = DateSerial(année, Mois, i)

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

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

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

            ' Vérification des jours fériés
            For j = LBound(Jférié) To UBound(Jférié)
                If vdate = Jférié(j) Then
                    .cells(lig + 4, col).Interior.Color = 10092441 ' Couleur pour jour férié
                    .cells(lig + 4, col).Value = Jfériéstring(j)
                End If
            Next j

            ' Coloration du jour actuel
            If Date = vdate Then
                .cells(lig, col).Interior.Color = RGB(0, 255, 0) ' Vert pour le jour actuel
            End If

            col = col + 1
        Next i

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

    Application.ScreenUpdating = True
End Function

E guets Nöijahr, mine Fründ!
 
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Re tout le monde,

J'ai fait quelque correction mais je but sur un dernier point, les trois zone vacances s'affiche bien au niveau des couleurs à la création du calendrier, mais quand je redémarre le prog, la zone verte (zone B) disparait, je suis obligé de relancer la fonction, si quelqu'un aurait une idée du problème

Nico
 

Pièces jointes

  • Calendrier Ephéméride Marée V2.9999.xlsm
    451 KB · Affichages: 0

Discussions similaires

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