Re : Boucle If dans une routine for
Bonsoir,
Je continue ce post puisque j’ai pu faire progresser mon code, de manière à ce qu’il me bâtisse un tableau du 1/5/2013 au 30/4/2014, en insérant une date puis en laissant une cellule vide avant la prochaine et en colorisant les week-end sur fond bleu (Merci ROGER).
Pour affiner, j’ai introduit la notion de jour férié sur fond vert avec la contrainte suivante : si le jour férié tombe un week-end, je souhaite que mon fond reste bleu.
J’ai même pu récupérer une fonction qui me calcule la date de pâques pour l’année afin de pouvoir en déduire le lundi de pâques, l’ascension et la pentecôte. (cf dPaques dans mon code que je tiens éventuellement à votre disposition).
Mon problème est le suivant : Malgré le traitement du jour férié qui tombe un week-end, mon code s’obstine à me renvoyer un fond vert.
Voici ci-dessous le code. Merci pour vos suggestions.
Cordiales salutations.
Philippe
Sub cal()
Dim an%, nbj%, i%, c%, dateDébut As Date, dep As Range, mois, jour As Long
Dim pâques, Lundi_de_Pâques, Ascension, Pentecôte As Variant
'
dateDébut = "1/5/2013" 'Première date
Set dep = [A1] 'Coin supérieur gauche du calendrier.
pâques = dPaques(Year(dateDébut))
Lundi_de_Pâques = Format((pâques + 1), "mm/dd")
Ascension = Format((pâques + 39), "mm/dd")
Pentecôte = Format((pâques + 50), "mm/dd")
nbj = DateSerial(Year(dateDébut) + 1, Month((dateDébut)), Day(dateDébut)) - dateDébut
For i = 1 To nbj
With dep.Offset(2 * (Day(dateDébut) - 1), c)
.Value = dateDébut
Select Case Month(dateDébut)
Case "5", "6", "7", "8", "9", "10", "11", "12"
mois = Month(dateDébut) - 4
Case "1", "2", "3", "4"
mois = Month(dateDébut) + 8
End Select
jour = Day(dateDébut)
Select Case Format((dateDébut), "dddd")
Case "samedi", "dimanche"
.Interior.Color = RGB(0, 176, 240)
Cells(jour * 2, mois).Interior.Color = RGB(0, 176, 240)
Case Else
.Interior.Color = RGB(255, 255, 255)
End Select
Select Case Format((dateDébut), "mm/dd")
Case "01/01", "05/01", "05/08", "06/01", "07/14", "08/15", "09/01", "11/01", "11/11", "12/25", Lundi_de_Pâques, Ascension, Pentecôte
If Format((dateDébut), "dddd") <> "samedi" Then
.Interior.Color = RGB(146, 208, 80)
Cells(jour * 2, mois).Interior.Color = RGB(146, 208, 80)
ElseIf Format((dateDébut), "dddd") <> "dimanche" Then
.Interior.Color = RGB(146, 208, 80)
Cells(jour * 2, mois).Interior.Color = RGB(146, 208, 80)
Else
.Interior.Color = RGB(0, 176, 240)
Cells(jour * 2, mois).Interior.Color = RGB(0, 176, 240)
End If
End Select
End With
If Month(dateDébut) <> Month(dateDébut + 1) Then c = c + 1
dateDébut = dateDébut + 1
Next
End Sub