Bonjour à tous,
he bien oui c'est encore moi ; décidément je suis nul
Cette fois-ci mon code fonctionne mais il est bien trop lent.
J'ai le flexgrid2 dans lesquels j'inscris les date (il me sert d'entête de colonne, et si la date correspond à un weekend ou un jour férié, je colore les colonnes du flexgrid1 (2 colonne à chaque fois car le tableau est en 1/2 journée)
le hic c'est qu'il faut au moins 10 bonnes secondes pour effectuer l'oppération et le tableau n'a que 40 lignes, quand je l'aurais agrandi à 200, j'aurais le temps d'aller boire le café

voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
Private Sub DTPicker1_Click()
Dim D As Date, W As String
Dim h As Integer, m As Integer, J As Integer, fJourFerie, l As Integer, cl As Long
    Dim tmpDate
 
 
MSFlexGrid2.Row = 0
MSFlexGrid2.Col = 3
D = Me.DTPicker1
 
MSFlexGrid2.Text = Format$(Me.DTPicker1 - 1, "dd/mm/yy")
 
Dim A As Long, B As Long
A = 4
For A = 4 To 52
If A > 4 Then
cl = A - 4 + A
Else
cl = 4
End If
 
'incrémentation de la date
 
'adresse de la date
MSFlexGrid2.Row = 0
MSFlexGrid2.Col = A
'extraction du jour (lettre)
W = WeekdayName(Weekday(D))
'extraction de l'année, du mois et du jour (nombre)
h = Year(D): m = Month(D): J = Day(D)
'calcul du lundi de pâque
 tmpDate = fLundiPaques(h)
'si l'on est un samedi ou un dimanche je colore en jaune les entêtes et les colonnes du tableau
If W = "samedi" Or W = "dimanche" Then
MSFlexGrid2.CellBackColor = &HFFFF&
'j'inscrit samedi ou dimanche en entête
MSFlexGrid2.Text = Format$(W, "dd/mm/yy")
'coloriage du tableau
B = cl
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
 
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
 
Next l
 
 
'1er janvier
ElseIf m = 1 And J = 1 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'1ermai
ElseIf m = 5 And J = 1 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'8 mai
ElseIf m = 5 And J = 8 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'14 juillet
ElseIf m = 7 And J = 14 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'15 aout
ElseIf m = 8 And J = 15 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'tousaint
ElseIf m = 11 And J = 1 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'11 novembre
ElseIf m = 11 And J = 11 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
'noel
ElseIf m = 12 And J = 25 Then
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
Next l
 
 
ElseIf D = tmpDate Then
 
MSFlexGrid2.CellBackColor = &HFFFF&
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
For l = 1 To 39
 
MSFlexGrid1.Row = l
MSFlexGrid1.Col = B
MSFlexGrid1.CellBackColor = &HFFFF&
If l = 39 And B = cl Then
l = 0
B = B + 1
End If
 
Next l
Else
MSFlexGrid2.Text = Format$(D, "dd/mm/yy")
 
End If
D = D + 1
Fin = Format$(D, "dd/mm/yy")
Next A
End Sub
bien sur c'est du boulot d'amateur, mais au lieu de faire une boucle, s'il y avait moyen de sélectionner la plage de cellule, je pense que ça accélérerait le processus. Mais je n'ai pas trouvé comment faire...

merci pour votre aide


cordialement