Optimisation d'une boucle. - VB/VBA/VBS - Programmation
Marsh Posté le 14-07-2005 à 15:18:09
Et comme ça ?
'---
Clients(1) As utClientDef
Dim x as Integer
x = 0
While Not RS.EOF
ReDim Preserve Clients(x) As utClientDef
Clients(x).lClientID = RS!Client_ID
Clients(x).sDepositAccount = RS!Client_Deposit
Clients(x).sExtension = RS!Client_Extension
Clients(x).sFullName = RS!Client_FName
Clients(x).sShortName = RS!Client_SName
Clients(x).iImageRetention = RS!Client_ImageRetention
x = x + 1
RS.Movenext
Wend
'---
Marsh Posté le 14-07-2005 à 19:41:58
Vu comme ça oui. Très pessimiste
Très cher vu que tu as dû tester ....
En fait il te faut un module et un Sub
En amont de ton Sub (c'est à dire tout en haut de la feuille), tu définis ton Type
'---
Public utClientDef
lClientID As ...
sDepositAccount As ...
sExtension As ...
sFullName As ...
sShortName As ...
iImageRetention As ...
End Type
' Puis tu définis ici ton Clients
Dim Clients() As utClientDef
'---
Voilà pour avant le Sub
après, dans le sub, il y a le reste
'---
Dim x as Integer
x = 0
While Not RS.EOF
ReDim Preserve Clients(x) As utClientDef
Clients(x).lClientID = RS!Client_ID
Clients(x).sDepositAccount = RS!Client_Deposit
Clients(x).sExtension = RS!Client_Extension
Clients(x).sFullName = RS!Client_FName
Clients(x).sShortName = RS!Client_SName
Clients(x).iImageRetention = RS!Client_ImageRetention
x = x + 1
RS.Movenext
Wend
'---
Et normalement tout va pour le mieux ...
Marsh Posté le 15-07-2005 à 15:38:29
NullDragon a écrit : Bonjour |
le redimentionnement d'un tableau est qqch de très peu couteux en perfs, s'il y a qqch à optimiser, c'est plutot au niveau de la requête qui te renvoit le recordset (voir les paramétrages du recordset lui même mais c'est plus pointus).
Marsh Posté le 15-07-2005 à 17:19:20
Une ouverture en ForwardOnly serait l'idéal si tu ne fais rien d'autre de ton recordset
Marsh Posté le 14-07-2005 à 14:41:57
Bonjour
Est-ce qu'il y aurait moyen d'optimiser ceci ?
J'utilise un integer x pour redimensionner mon tableau à mesure qu'il trouve quelque chose dans le Recordset mais il me semble que je pourrais faire ça mieux ??
Car si j'utilise L/UBound il me renvoit une erreur car au départ mon tableau est vide.
Dim x as Integer
x = -1
While Not RS.EOF
x = x + 1
ReDim Preserve Clients(x) As utClientDef
Clients(x).lClientID = RS!Client_ID
Clients(x).sDepositAccount = RS!Client_Deposit
Clients(x).sExtension = RS!Client_Extension
Clients(x).sFullName = RS!Client_FName
Clients(x).sShortName = RS!Client_SName
Clients(x).iImageRetention = RS!Client_ImageRetention
RS.Movenext
Wend