Vitesse d'exécution du code
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 :
Code:
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 |
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.
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