1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
| Dim mois_courant
Dim témoin, Début, Fin
Private Sub UserForm_Initialize()
Dim décal
If ActiveCell = "" Then
mois_courant = Date
Else
mois_courant = ActiveCell
End If
affiche_calendrier (mois_courant)
décal = Weekday(DateSerial(Year(mois_courant), Month(mois_courant), 1), vbMonday) - 1
End Sub
Sub affiche_calendrier(dt)
Dim premier_jour_mois, premier_jour_mois_suiv, décal, nb_jours, I
premier_jour_mois = DateSerial(Year(dt), Month(dt), 1)
premier_jour_mois_suiv = DateAdd("m", 1, premier_jour_mois)
nb_jours = premier_jour_mois_suiv - premier_jour_mois + 1
décal = Weekday(premier_jour_mois, vbMonday) - 1
I = 1
Do While I < nb_jours
Me("texte" & I + décal).Caption = I
If EstFérié(DateSerial(Year(dt), Month(dt), I)) = True Then Me("texte" & I + décal).BackColor = vbGreen
sem = NoSemaine(DateSerial(Year(dt), Month(dt), I))
K = (I + décal - 1) \ 7 + 1
Me("Label" & K) = " " & sem
I = I + 1
Loop
Me("texte" & Day(dt) + décal).BackColor = 255
Me.Caption = Format(dt, "mmmm yy")
'Me DateSerial(Year(dt), Month(dt), Day(dt))
End Sub
Private Sub raz_tot()
Dim I
For I = 1 To 37
Me("texte" & I).BackColor = vbWhite
Me("texte" & I).Caption = ""
Next I
For I = 1 To 35 Step 7
Me("texte" & I + 5).BackColor = vbGreen
Me("texte" & I + 6).BackColor = vbGreen
Next I
For K = 1 To 6: Me("label" & K) = "": Next K
End Sub
Private Sub raz()
Dim I
For I = 1 To 37
If Me("texte" & I).BackColor = 65535 Then
Me("texte" & I).BackColor = vbWhite
End If
Next I
For I = 1 To 35 Step 7
Me("texte" & I + 5).BackColor = vbGreen
Me("texte" & I + 6).BackColor = vbGreen
Next I
For K = 1 To 6: Me("label" & K) = "": Next K
End Sub
Private Sub moins_Click()
mois_courant = DateAdd("m", -1, mois_courant)
raz_tot
'Me.Date_début = mois_courant
témoin = 0
affiche_calendrier (mois_courant)
End Sub
Private Sub plus_Click()
mois_courant = DateAdd("m", 1, mois_courant)
raz_tot
affiche_calendrier (mois_courant)
End Sub
Function pression(no_cellule)
Dim K, décal
décal = Weekday(DateSerial(Year(mois_courant), Month(mois_courant), 1), vbMonday) - 1
raz_tot
affiche_calendrier (mois_courant)
Me("texte" & no_cellule).BackColor = 65535
Début = no_cellule
'Me.Date_début = DateSerial(Year(mois_courant), Month(mois_courant), Début - décal)
ActiveCell.Value = DateSerial(Year(mois_courant), Month(mois_courant), Début - décal)
Unload Me
End Function
Private Sub texte1_Click()
pression (1)
End Sub
Private Sub texte2_Click()
pression (2)
End Sub
Private Sub texte3_Click()
pression (3)
End Sub
Private Sub texte4_Click()
pression (4)
End Sub
Private Sub texte5_Click()
pression (5)
End Sub
Private Sub texte6_Click()
pression (6)
End Sub
Private Sub texte7_Click()
pression (7)
End Sub
Private Sub texte8_Click()
pression (8)
End Sub
Private Sub texte9_Click()
pression (9)
End Sub
Private Sub texte10_Click()
pression (10)
End Sub
Private Sub texte11_Click()
pression (11)
End Sub
Private Sub texte12_Click()
pression (12)
End Sub
Private Sub texte13_Click()
pression (13)
End Sub
Private Sub texte14_Click()
pression (14)
End Sub
Private Sub texte15_Click()
pression (15)
End Sub
Private Sub texte16_Click()
pression (16)
End Sub
Private Sub texte17_Click()
pression (17)
End Sub
Private Sub texte18_Click()
pression (18)
End Sub
Private Sub texte19_Click()
pression (19)
End Sub
Private Sub texte20_Click()
pression (20)
End Sub
Private Sub texte21_Click()
pression (21)
End Sub
Private Sub texte22_Click()
pression (22)
End Sub
Private Sub texte23_Click()
pression (23)
End Sub
Private Sub texte24_Click()
pression (24)
End Sub
Private Sub texte25_Click()
pression (25)
End Sub
Private Sub texte26_Click()
pression (26)
End Sub
Private Sub texte27_Click()
pression (27)
End Sub
Private Sub texte28_Click()
pression (28)
End Sub
Private Sub texte29_Click()
pression (29)
End Sub
Private Sub texte30_Click()
pression (30)
End Sub
Private Sub texte31_Click()
pression (31)
End Sub
Private Sub texte32_Click()
pression (32)
End Sub
Private Sub texte33_Click()
pression (33)
End Sub
Private Sub texte34_Click()
pression (34)
End Sub
Private Sub texte35_Click()
pression (35)
End Sub
Private Sub texte36_Click()
pression (36)
End Sub
Private Sub texte37_Click()
pression (37)
End Sub
Function EstFérié(dt)
Static j(11), m(11), témoinjf, pâques, I
j(1) = 1: m(1) = 1
j(2) = 1: m(2) = 5
j(3) = 8: m(3) = 5
j(4) = 14: m(4) = 7
j(5) = 15: m(5) = 8
j(6) = 1: m(6) = 11
j(7) = 11: m(7) = 11
j(8) = 25: m(8) = 12
pâques = Round(DateSerial(Year(dt), 4, (234 - 11 * (Year(dt) Mod 19)) Mod 30) / 7, 0) * 7 - 6
j(9) = Day(pâques + 1): m(9) = Month(pâques + 1)
j(10) = Day(pâques + 39): m(10) = Month(pâques + 39)
j(11) = Day(pâques + 50): m(11) = Month(pâques + 50)
témoinjf = False
For I = 1 To 11
If Day(dt) = j(I) And Month(dt) = m(I) Then
témoinjf = True
End If
Next
EstFérié = témoinjf
End Function
Function NoSemaine(MyDate As Date) As Integer
NoSemaine = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If NoSemaine > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then NoSemaine = 1
End If
End Function |
Partager