XL 2021 Intégration vacances scolaires à mon calendrier

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nicolas JACQUIN

XLDnaute Accro
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
Capture d’écran 2024-12-30 203237.jpg


Feuille Vacances
Capture d’écran 2024-12-30 203258.jpg


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

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

Pièces jointes

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:
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

re bonsoir nicolas
teste ça dans un fichier vierge
et dis moi si les dates son bonnes on recréera le tableau si c'est bon
regarde dans le debug
VB:
'patricktoulon
'dateLibelle dLibelle taille25
Sub test2()
url = "https://vacances-scolaires.education/"
getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If

    With CreateObject("htmlfile")

    .body.innerhtml = code
    For Each element In .all
    'If element.classname Like "zone zA" Then Debug.Print element.NextSibling.innertext
    'Debug.Print "-------------------------------------------------"
    If element.classname = "dateLibelle dLibelle taille25" Then
            codeB = codeB & element.innertext & vbCrLf & element.NextSibling.innertext
            codeB = codeB & vbCrLf & "-------------------------------------------------" & vbCrLf
            
        
    End If
   Next

End With
 
re bonsoir nicolas
teste ça dans un fichier vierge
et dis moi si les dates son bonnes on recréera le tableau si c'est bon
regarde dans le debug
VB:
'patricktoulon
'dateLibelle dLibelle taille25
Sub test2()
url = "https://vacances-scolaires.education/"
getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If

    With CreateObject("htmlfile")

    .body.innerhtml = code
    For Each element In .all
    'If element.classname Like "zone zA" Then Debug.Print element.NextSibling.innertext
    'Debug.Print "-------------------------------------------------"
    If element.classname = "dateLibelle dLibelle taille25" Then
            codeB = codeB & element.innertext & vbCrLf & element.NextSibling.innertext
            codeB = codeB & vbCrLf & "-------------------------------------------------" & vbCrLf
          
      
    End If
   Next

End With

Bonjour Patrick
J'ai rien du tout
J'ai modifié un peu

VB:
'patricktoulon
'dateLibelle dLibelle taille25
Sub test2()
    Dim url As String
    url = "https://vacances-scolaires.education/"

    Call getdatevac(url)
End Sub

Function getdatevac(url As String)
    Dim req As Object
    Dim html As Object
    Dim element As Object
    Dim code As String
    Dim codeB As String
   
    Set req = CreateObject("MSXML2.XMLHTTP")
    req.Open "GET", url, False
    req.send

    If req.Status <> 200 Then
        Debug.Print "Erreur: Impossible de récupérer les données"
        Exit Function
    End If

    code = req.responseText

    Set html = CreateObject("htmlfile")
    html.body.innerHTML = code

    For Each element In html.getElementsByTagName("div")
        If element.className = "dateLibelle dLibelle taille25" Then
            codeB = codeB & element.innerText & vbCrLf
        End If
    Next

    Debug.Print codeB

    Set req = Nothing
    Set html = Nothing
End Function

et obtient ça

Code:
Rentrée scolaire 2024
Vacances de la Toussaint 2024
Vacances de Noël 2024
Vacances d'hiver 2025
Vacances de printemps 2025
Pont de l'Ascension 2025
Grandes vacances 2025

Merci
 
voila ce que tu devais obtenir
VB:
Rentrée scolaire 2024
A
B
C
Jour de reprise : lundi 2 septembre 2024
-------------------------------------------------
Vacances de la Toussaint 2024
A
B
C
Fin des cours : samedi 19 octobre 2024
Jour de reprise : lundi 4 novembre 2024
-------------------------------------------------
Vacances de Noël 2024
A
B
C
Fin des cours : samedi 21 décembre 2024
Jour de reprise : lundi 6 janvier 2025
-------------------------------------------------
Vacances d'hiver 2025
Zone B
Fin des cours :
samedi 8 février 2025

Jour de reprise :
lundi 24 février 2025
-------------------------------------------------
Vacances de printemps 2025
Zone B
Fin des cours :
samedi 5 avril 2025

Jour de reprise :
mardi 22 avril 2025
-------------------------------------------------
Pont de l'Ascension 2025
A
B
C
Fin des cours : mercredi 28 mai 2025
Jour de reprise : lundi 2 juin 2025
-------------------------------------------------
Grandes vacances 2025
A
B
C
Fin des cours : samedi 5 juillet 2025
-------------------------------------------------
 
re, j'ai repris ta méthode mais en changeant l'explorateur, mais comme toi, si tu prends hivers et printemps, tu n'as que la zone "B"

VB:
Sub GetVacancesScolaires()
    Dim ie As Object
    Dim doc As Object
    Dim elements As Object
    Dim element As Object
    Dim result As String

    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = False
    ie.navigate "https://vacances-scolaires.education/"
  
    Do While ie.ReadyState <> 4 Or ie.Busy
        DoEvents
    Loop
  
    Set doc = ie.Document
  
    Set elements = doc.getElementsByClassName("dateLibelle dLibelle taille25")
  
    If elements.Length = 0 Then
        MsgBox "Aucun élément trouvé. Vérifiez si la page charge bien.", vbExclamation, "Alerte"
        ie.Quit
        Exit Sub
    End If
  
    For Each element In elements
        result = result & element.innerText & vbCrLf
        result = result & element.NextSibling.innerText & vbCrLf
        result = result & "-------------------------------------------------" & vbCrLf
    Next
  
    Debug.Print result
  
    ie.Quit
    Set ie = Nothing
End Sub

Code:
Rentrée scolaire 2024

A

B

C
Jour de reprise : lundi 2 septembre 2024
-------------------------------------------------
Vacances de la Toussaint 2024

A

B

C
Fin des cours : samedi 19 octobre 2024
Jour de reprise : lundi 4 novembre 2024
-------------------------------------------------
Vacances de Noël 2024

A

B

C
Fin des cours : samedi 21 décembre 2024
Jour de reprise : lundi 6 janvier 2025
-------------------------------------------------
Vacances d'hiver 2025
Zone B

Fin des cours :
samedi 8 février 2025

Jour de reprise :
lundi 24 février 2025
-------------------------------------------------
Vacances de printemps 2025
Zone B

Fin des cours :
samedi 5 avril 2025

Jour de reprise :
mardi 22 avril 2025
-------------------------------------------------
Pont de l'Ascension 2025

A

B

C
Fin des cours : mercredi 28 mai 2025
Jour de reprise : lundi 2 juin 2025
-------------------------------------------------
Grandes vacances 2025

A

B

C
Fin des cours : samedi 5 juillet 2025
-------------------------------------------------
 
en voila une autre
VB:
'dateLibelle dLibelle taille25
Sub test2()
    url = "https://www.vacances-scolaires-education.fr/vacances-scolaires-2024-2025.html"
    getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If

    With CreateObject("htmlfile")
        .body.innerhtml = code
        Set tables = .body.getelementsbytagname("table")
        Set Table = tables(0)
        Set trs = Table.getelementsbytagname("tr")
        For i = 2 To trs.Length - 1
            Debug.Print trs(i).innertext
            Debug.Print "-------------------------------------------"
        Next
    End With
End Function
 
re
et ca regarde
VB:
'patricktoulon
Sub test2()
    url = "https://www.vacances-scolaires-education.fr/vacances-scolaires-2024-2025.html"
    getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object, zoneA, zoneB, zoneC, tables, table, trs, tds
          
    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If

    With CreateObject("htmlfile")
        .body.innerhtml = code
        Set tables = .body.getelementsbytagname("table")
        Set table = tables(0)
        Set trs = table.getelementsbytagname("tr")
        For i = 2 To trs.Length - 2
            Set tds = trs(i).getelementsbytagname("td")
            zoneA = "": zoneB = "": zoneC = ""
            titrevacance = trs(i).Children(0).innertext
            zoneA = trs(i).Children(1).innertext
            If tds.Length >= 2 Then

                zoneA = "zoneA  " & trs(i).Children(1).innertext
                zoneB = "zoneB  " & trs(i).Children(2).innertext
                zoneC = "zoneC  " & trs(i).Children(2).innertext
            End If
            Debug.Print titrevacance & vbCrLf & zoneA & vbCrLf & zoneB & vbCrLf & zoneC
            Debug.Print "--------------------------------------- "
        Next
    End With
End Function
 
et de 3
Code:
'patricktoulon
Sub test2()
    url = "https://www.vacances-scolaires-education.fr/vacances-scolaires-2024-2025.html"
    getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object, zoneA, zoneB, zoneC, tables, table, trs, tds

    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If
    tj = Split("lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche", ",")

    For i = 0 To UBound(tj)
        code = Replace(code, "Du " & tj(i), "")
        code = Replace(code, " au " & tj(i), "||")
    Next
    code = Replace(code, "1er", "01")


    With CreateObject("htmlfile")
        .body.innerhtml = code
        Set tables = .body.getelementsbytagname("table")
        Set table = tables(0)
        Set trs = table.getelementsbytagname("tr")
        For i = 2 To trs.Length - 2
            Set tds = trs(i).getelementsbytagname("td")
            zoneA = "": zoneB = "": zoneC = ""
            titrevacance = trs(i).Children(0).innertext
            zoneA = trs(i).Children(1).innertext
             't = Split(zoneabc, "||"): zoneabc = "zoneABC " & DateValue(Trim(t(0)))
             'If zoneabc Like "*||*" Then zoneabc = zoneabc & " || " & DateValue(Trim(t(1)))

            
            If tds.Length >= 2 Then
                
                zoneA = trs(i).Children(1).innertext
                t = Split(zoneA, "||"): zoneA = "zoneA " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))

                zoneB = trs(i).Children(2).innertext
                t = Split(zoneB, "||"): zoneB = "zoneB " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))
                
                zoneC = trs(i).Children(2).innertext
                t = Split(zoneC, "||"): zoneC = "zoneC " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))
            
            End If
            Debug.Print titrevacance & vbCrLf & zoneA & vbCrLf & zoneB & vbCrLf & zoneC
            Debug.Print "--------------------------------------- "
        Next
    End With
End Function
 
et de 3
Code:
'patricktoulon
Sub test2()
    url = "https://www.vacances-scolaires-education.fr/vacances-scolaires-2024-2025.html"
    getdatevac url
End Sub


Function getdatevac(url)
    Dim req As Object, zoneA, zoneB, zoneC, tables, table, trs, tds

    Set req = CreateObject("microsoft.xmlhttp")
    req.Open "get", url, False
    req.send
    'Debug.Print req.responsetext
    code = req.responsetext
    If req.ReadyState = 4 Then
        If req.Status <> 200 Then
        End If
    End If
    tj = Split("lundi,mardi,mercredi,jeudi,vendredi,samedi,dimanche", ",")

    For i = 0 To UBound(tj)
        code = Replace(code, "Du " & tj(i), "")
        code = Replace(code, " au " & tj(i), "||")
    Next
    code = Replace(code, "1er", "01")


    With CreateObject("htmlfile")
        .body.innerhtml = code
        Set tables = .body.getelementsbytagname("table")
        Set table = tables(0)
        Set trs = table.getelementsbytagname("tr")
        For i = 2 To trs.Length - 2
            Set tds = trs(i).getelementsbytagname("td")
            zoneA = "": zoneB = "": zoneC = ""
            titrevacance = trs(i).Children(0).innertext
            zoneA = trs(i).Children(1).innertext
             't = Split(zoneabc, "||"): zoneabc = "zoneABC " & DateValue(Trim(t(0)))
             'If zoneabc Like "*||*" Then zoneabc = zoneabc & " || " & DateValue(Trim(t(1)))

           
            If tds.Length >= 2 Then
               
                zoneA = trs(i).Children(1).innertext
                t = Split(zoneA, "||"): zoneA = "zoneA " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))

                zoneB = trs(i).Children(2).innertext
                t = Split(zoneB, "||"): zoneB = "zoneB " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))
               
                zoneC = trs(i).Children(2).innertext
                t = Split(zoneC, "||"): zoneC = "zoneC " & DateValue(Trim(t(0))) & " || " & DateValue(Trim(t(1)))
           
            End If
            Debug.Print titrevacance & vbCrLf & zoneA & vbCrLf & zoneB & vbCrLf & zoneC
            Debug.Print "--------------------------------------- "
        Next
    End With
End Function

VB:
Rentrée SCOLAIRE
2024
Lundi 2 septembre 2024
(Prérentrée des enseignants le vendredi 30 août 2024)


---------------------------------------
Vacances TOUSSAINT
2024
19 octobre 2024|| 4 novembre 2024


---------------------------------------
Vacances NOËL
2024
21 décembre 2024|| 6 janvier 2025


---------------------------------------
Vacances HIVER
2025
zoneA 22/02/2025 || 10/03/2025
zoneB 08/02/2025 || 24/02/2025
zoneC 08/02/2025 || 24/02/2025
---------------------------------------
Vacances PRINTEMPS
2025
zoneA 19/04/2025 || 05/05/2025
zoneB 05/04/2025 || 22/04/2025
zoneC 05/04/2025 || 22/04/2025
---------------------------------------
Pont ASCENSION
2025
28 mai 2025|| 2 juin 2025


---------------------------------------
Vacances ÉTÉ
2025
5 juillet 2025|| 1er septembre 2025


---------------------------------------
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
1 K
Retour