Bonjour,
J'ai créé un fichier qui permet d'établir chaque mois les avis d'échéance de toutes les personnes à qui nous louons un appartement.
Il est construit tel que :
- Le premier onglet "MODELE" est un avis d'échéance vierge qui sert de trame.
- Le deuxième onglet "SORTIE" est la même chose mais pour la sortie des locataires.
- Le troisième onglet "LISTE" est une base de données de tous les logements que nous avons avec les données des personnes qui l'occupent (le(s) nom(s)/prénom(s), l'adresse du logement, l'antenne qui s'en occupe -je travaille au siège-, la date d'entrée, éventuellement celle de sortie, le montant du loyer, des charges, et toutes les éventualités comme les régules de charges, les facturations de travaux suite aux dégradations, etc etc).
Chaque ligne dans la feuille correspond à une personne dans un logement.
Ensuite, en appuyant sur un bouton, Excel me crée pour chaque ligne affichée (en tenant compte donc des filtres), un onglet qui reprend la trame du modèle et en la complétant avec les données des personnes concernées.
Lorsque j'ai commencé à créer ce fichier, il était relativement rapide à la création des avis d'échéance (instantané en fait). Puis en le modifiant petit à petit, il a nettement perdu de sa rapidité ^^. Il faut dorénavant entre 2 et 5 secondes pour créer chaque feuille.
Voici le code que j'utilise pour la création des avis d'échéance :
Je précise qu'il y a sans doute un paquet de choses "bizarres", je ne fais que du bidouillage à partir de ce que je trouve sur Internet. A vrai dire, j'ai même découvert l'existence du VBA en créant ce fichier.
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
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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325 Public Sub CreerFeuilles() Dim c As Object Dim CELLULE As Object 'Efface "User :" dans les commentaires For Each c In ActiveSheet.Comments c.Text Text:=Replace(c.Text, Application.UserName & ":" & Chr(10), "") Next c 'Copie les commentaires dans des cellules For Each c In Range("AK2:CE10000", [X65000].End(xlUp)) If Not c.Comment Is Nothing Then c.Offset(0, 132) = c.Comment.Text End If Next c 'Sub Créer Feuilles Dim oShModele As Worksheet Dim oShSortie As Worksheet Dim oShListe As Worksheet Dim oShMenus As Worksheet Dim iLigFin As Integer Dim iLig As Integer Dim oShNew As Worksheet Dim sNomOnglet As String Set oShModele = Worksheets("MODELE") Set oShSortie = Worksheets("SORTIE") Set oShListe = Worksheets("LISTE") Set oShMenus = Worksheets("MENUS") iLigFin = oShListe.Range("E" & Rows.Count).End(xlUp).Row For iLig = 2 To iLigFin If oShListe.Range("E" & iLig).Rows.Hidden = False Then If oShListe.Range("E" & iLig).Value <> "" Then sNomOnglet = oShListe.Range("B" & iLig).Value & "-" & oShListe.Range("NA" & iLig).Value If OngletExist(sNomOnglet) Then Set oShNew = Worksheets(sNomOnglet) Else If oShListe.Range("DK" & iLig).Value = 1 Then oShSortie.Copy After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = sNomOnglet Set oShNew = Worksheets(Worksheets.Count) oShNew.Range("L5").Value = oShListe.Range("N" & iLig).Value 'Date de sortie Else oShModele.Copy After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = sNomOnglet Set oShNew = Worksheets(Worksheets.Count) End If End If oShNew.Range("K1").Value = oShListe.Range("C" & iLig).Value 'Dispositif oShNew.Range("J15").Value = oShListe.Range("D" & iLig).Value 'Antenne oShNew.Range("K8").Value = oShListe.Range("E" & iLig).Value 'Nom If oShListe.Range("F" & iLig).Value <> "" Then oShNew.Range("K9").Value = oShListe.Range("F" & iLig).Value 'Nom 2 End If If oShListe.Range("G" & iLig).Value <> "" Then oShNew.Range("I11").Value = oShListe.Range("G" & iLig).Value 'Adresse End If oShNew.Range("I12").Value = oShListe.Range("H" & iLig).Value 'Adresse 2 oShNew.Range("I13").Value = oShListe.Range("I" & iLig).Value 'Adresse 3 If oShListe.Range("J" & iLig).Value <> "" Then oShNew.Range("L3").Value = oShListe.Range("J" & iLig).Value 'Réf. CAF End If oShNew.Range("L4").Value = oShListe.Range("K" & iLig).Value 'Date d'entrée If oShListe.Range("N" & iLig).Value <> "" Then oShNew.Range("I5").Value = "Sortie réelle :" oShNew.Range("L5").Value = oShListe.Range("N" & iLig).Value 'Date de sortie End If oShNew.Range("L15").Value = oShListe.Range("M" & iLig).Value 'Date de facture If oShListe.Range("O" & iLig).Value <> "" Then oShNew.Range("A19").Value = oShListe.Range("O" & iLig).Value 'Message 1 End If If oShListe.Range("P" & iLig).Value <> "" Then oShNew.Range("A20").Value = oShListe.Range("P" & iLig).Value 'Message 2 End If If oShListe.Range("Q" & iLig).Value <> "" Then oShNew.Range("A21").Value = oShListe.Range("Q" & iLig).Value 'Message 3 End If If oShListe.Range("BS" & iLig).Value <> "" Then oShNew.Range("E27").Value = oShListe.Range("BS" & iLig).Value 'Solde au 31/12 End If oShNew.Range("K23").Value = oShListe.Range("DM" & iLig).Value 'Mois 'Mois en cours oShNew.Range("L30").Value = oShListe.Range("ES" & iLig).Value 'Loyer If oShListe.Range("IH" & iLig).Value <> "" Then oShNew.Range("L32").Value = oShListe.Range("IH" & iLig).Value 'Valeur 2 oShNew.Range("H32").Value = oShListe.Range("II" & iLig).Value 'Intitulé 2 End If If oShListe.Range("IJ" & iLig).Value <> "" Then oShNew.Range("L34").Value = oShListe.Range("IJ" & iLig).Value 'Valeur 3 oShNew.Range("H34").Value = oShListe.Range("IK" & iLig).Value 'Intitulé 3 End If If oShListe.Range("IL" & iLig).Value <> "" Then oShNew.Range("L36").Value = oShListe.Range("IL" & iLig).Value 'Valeur 4 oShNew.Range("H36").Value = oShListe.Range("IM" & iLig).Value 'Intitulé 4 End If If oShListe.Range("IN" & iLig).Value <> "" Then oShNew.Range("L38").Value = oShListe.Range("IN" & iLig).Value 'Valeur 5 oShNew.Range("H38").Value = oShListe.Range("IO" & iLig).Value 'Intitulé 5 End If If oShListe.Range("IP" & iLig).Value <> "" Then oShNew.Range("L40").Value = oShListe.Range("IP" & iLig).Value 'Valeur 6 oShNew.Range("H40").Value = oShListe.Range("IQ" & iLig).Value 'Intitulé 6 End If If oShListe.Range("IR" & iLig).Value <> "" Then oShNew.Range("L42").Value = oShListe.Range("IR" & iLig).Value 'Valeur 7 oShNew.Range("H42").Value = oShListe.Range("ID" & iLig).Value 'Intitulé 7 End If If oShListe.Range("IT" & iLig).Value <> "" Then oShNew.Range("L44").Value = oShListe.Range("IT" & iLig).Value 'Valeur 8 oShNew.Range("H44").Value = oShListe.Range("IU" & iLig).Value 'Intitulé 8 End If 'Récapitulatif des loyers If oShListe.Range("FB" & iLig).Value <> 0 Then oShNew.Range("E28").Value = oShListe.Range("FB" & iLig).Value '1 End If If oShListe.Range("FC" & iLig).Value <> 0 Then oShNew.Range("E34").Value = oShListe.Range("FC" & iLig).Value '2 End If If oShListe.Range("FD" & iLig).Value <> 0 Then oShNew.Range("E38").Value = oShListe.Range("FD" & iLig).Value '3 End If If oShListe.Range("FE" & iLig).Value <> 0 Then oShNew.Range("E42").Value = oShListe.Range("FE" & iLig).Value '4 End If If oShListe.Range("FF" & iLig).Value <> 0 Then oShNew.Range("E46").Value = oShListe.Range("FF" & iLig).Value '5 End If If oShListe.Range("FG" & iLig).Value <> 0 Then oShNew.Range("E50").Value = oShListe.Range("FG" & iLig).Value '6 End If If oShListe.Range("FH" & iLig).Value <> 0 Then oShNew.Range("E54").Value = oShListe.Range("FH" & iLig).Value '7 End If If oShListe.Range("FI" & iLig).Value <> 0 Then oShNew.Range("E58").Value = oShListe.Range("FI" & iLig).Value '8 End If If oShListe.Range("FJ" & iLig).Value <> 0 Then oShNew.Range("E62").Value = oShListe.Range("FJ" & iLig).Value '9 End If If oShListe.Range("FK" & iLig).Value <> 0 Then oShNew.Range("E66").Value = oShListe.Range("FK" & iLig).Value '10 End If If oShListe.Range("FL" & iLig).Value <> 0 Then oShNew.Range("E70").Value = oShListe.Range("FL" & iLig).Value '11 End If 'Récapitulatif des versements If oShListe.Range("FW" & iLig).Value <> 0 Then oShNew.Range("E32").Value = oShListe.Range("FW" & iLig).Value '1 End If If oShListe.Range("FX" & iLig).Value <> 0 Then oShNew.Range("E36").Value = oShListe.Range("FX" & iLig).Value '2 End If If oShListe.Range("FY" & iLig).Value <> 0 Then oShNew.Range("E40").Value = oShListe.Range("FY" & iLig).Value '3 End If If oShListe.Range("FZ" & iLig).Value <> 0 Then oShNew.Range("E44").Value = oShListe.Range("FZ" & iLig).Value '4 End If If oShListe.Range("GA" & iLig).Value <> 0 Then oShNew.Range("E48").Value = oShListe.Range("GA" & iLig).Value '5 End If If oShListe.Range("GB" & iLig).Value <> 0 Then oShNew.Range("E52").Value = oShListe.Range("GB" & iLig).Value '6 End If If oShListe.Range("GC" & iLig).Value <> 0 Then oShNew.Range("E56").Value = oShListe.Range("GC" & iLig).Value '7 End If If oShListe.Range("GD" & iLig).Value <> 0 Then oShNew.Range("E60").Value = oShListe.Range("GD" & iLig).Value '8 End If If oShListe.Range("GE" & iLig).Value <> 0 Then oShNew.Range("E64").Value = oShListe.Range("GE" & iLig).Value '9 End If If oShListe.Range("GF" & iLig).Value <> 0 Then oShNew.Range("E68").Value = oShListe.Range("GF" & iLig).Value '10 End If If oShListe.Range("GG" & iLig).Value <> 0 Then oShNew.Range("E72").Value = oShListe.Range("GG" & iLig).Value '11 End If 'Récapitulatif des versements CAF If oShListe.Range("GJ" & iLig).Value <> 0 Then oShNew.Range("E31").Value = oShListe.Range("GJ" & iLig).Value '1 End If If oShListe.Range("GK" & iLig).Value <> 0 Then oShNew.Range("E35").Value = oShListe.Range("GK" & iLig).Value '2 End If If oShListe.Range("GL" & iLig).Value <> 0 Then oShNew.Range("E39").Value = oShListe.Range("GL" & iLig).Value '3 End If If oShListe.Range("GM" & iLig).Value <> 0 Then oShNew.Range("E43").Value = oShListe.Range("GM" & iLig).Value '4 End If If oShListe.Range("GN" & iLig).Value <> 0 Then oShNew.Range("E47").Value = oShListe.Range("GN" & iLig).Value '5 End If If oShListe.Range("GO" & iLig).Value <> 0 Then oShNew.Range("E51").Value = oShListe.Range("GO" & iLig).Value '6 End If If oShListe.Range("GP" & iLig).Value <> 0 Then oShNew.Range("E55").Value = oShListe.Range("GP" & iLig).Value '7 End If If oShListe.Range("GQ" & iLig).Value <> 0 Then oShNew.Range("E59").Value = oShListe.Range("GQ" & iLig).Value '8 End If If oShListe.Range("GR" & iLig).Value <> 0 Then oShNew.Range("E63").Value = oShListe.Range("GR" & iLig).Value '9 End If If oShListe.Range("GS" & iLig).Value <> 0 Then oShNew.Range("E67").Value = oShListe.Range("GS" & iLig).Value '10 End If If oShListe.Range("GT" & iLig).Value <> 0 Then oShNew.Range("E71").Value = oShListe.Range("GT" & iLig).Value '11 End If 'Récapitulatif - Date des versements If oShListe.Range("HJ" & iLig).Value <> "" Then oShNew.Range("F32").Value = oShListe.Range("HJ" & iLig).Value '1 End If If oShListe.Range("HK" & iLig).Value <> "" Then oShNew.Range("F36").Value = oShListe.Range("HK" & iLig).Value '2 End If If oShListe.Range("HL" & iLig).Value <> "" Then oShNew.Range("F40").Value = oShListe.Range("HL" & iLig).Value '3 End If If oShListe.Range("HM" & iLig).Value <> "" Then oShNew.Range("F44").Value = oShListe.Range("HM" & iLig).Value '4 End If If oShListe.Range("HN" & iLig).Value <> "" Then oShNew.Range("F48").Value = oShListe.Range("HN" & iLig).Value '5 End If If oShListe.Range("HO" & iLig).Value <> "" Then oShNew.Range("F52").Value = oShListe.Range("HO" & iLig).Value '6 End If If oShListe.Range("HP" & iLig).Value <> "" Then oShNew.Range("F56").Value = oShListe.Range("HP" & iLig).Value '7 End If If oShListe.Range("HQ" & iLig).Value <> "" Then oShNew.Range("F60").Value = oShListe.Range("HQ" & iLig).Value '8 End If If oShListe.Range("HR" & iLig).Value <> "" Then oShNew.Range("F64").Value = oShListe.Range("HR" & iLig).Value '9 End If If oShListe.Range("HS" & iLig).Value <> "" Then oShNew.Range("F68").Value = oShListe.Range("HS" & iLig).Value '10 End If If oShListe.Range("HT" & iLig).Value <> "" Then oShNew.Range("F72").Value = oShListe.Range("HT" & iLig).Value '11 End If 'Récapitulatif des régules If oShListe.Range("IW" & iLig).Value <> 0 Then oShNew.Range("E33").Value = oShListe.Range("IW" & iLig).Value '1 End If If oShListe.Range("IX" & iLig).Value <> 0 Then oShNew.Range("E37").Value = oShListe.Range("IX" & iLig).Value '2 End If If oShListe.Range("IY" & iLig).Value <> 0 Then oShNew.Range("E41").Value = oShListe.Range("IY" & iLig).Value '3 End If If oShListe.Range("IZ" & iLig).Value <> 0 Then oShNew.Range("E45").Value = oShListe.Range("IZ" & iLig).Value '4 End If If oShListe.Range("JA" & iLig).Value <> 0 Then oShNew.Range("E49").Value = oShListe.Range("JA" & iLig).Value '5 End If If oShListe.Range("JB" & iLig).Value <> 0 Then oShNew.Range("E53").Value = oShListe.Range("JB" & iLig).Value '6 End If If oShListe.Range("JC" & iLig).Value <> 0 Then oShNew.Range("E57").Value = oShListe.Range("JC" & iLig).Value '7 End If If oShListe.Range("JD" & iLig).Value <> 0 Then oShNew.Range("E61").Value = oShListe.Range("JD" & iLig).Value '8 End If If oShListe.Range("JE" & iLig).Value <> 0 Then oShNew.Range("E65").Value = oShListe.Range("JE" & iLig).Value '9 End If If oShListe.Range("JF" & iLig).Value <> 0 Then oShNew.Range("E69").Value = oShListe.Range("JF" & iLig).Value '8 End If If oShListe.Range("JG" & iLig).Value <> 0 Then oShNew.Range("E73").Value = oShListe.Range("JG" & iLig).Value '8 End If If oShListe.Range("MX" & iLig).Value <> 0 Then oShNew.Range("E29").Value = oShListe.Range("MX" & iLig).Value 'Récap Caution End If If oShListe.Range("MY" & iLig).Value <> 0 Then oShNew.Range("E30").Value = oShListe.Range("MY" & iLig).Value 'Récap FSL End If 'lien hypertext oShNew.Hyperlinks.Add Anchor:=oShListe.Range("E" & iLig), Address:="", SubAddress:= _ "'" & sNomOnglet & "'!A1", TextToDisplay:=oShListe.Range("E" & iLig).Value Set oShNew = Nothing End If End If Next iLig oShListe.Select Set oShListe = Nothing Set oShModele = Nothing Set oShSortie = Nothing Set oShMenus = Nothing End Sub
Il y aurait-il, justement dans mes bidouillages, un moyen pour que l'éxecution du code soit plus rapide ? Par exemple des raccourcis à ce que j'ai pu écrire ? Ou est-ce qu'il y a des commandes que j'ai utilisé qui pourraient être la cause du ralentissement ?
Merci
Partager