Ulala2
Messages postés86Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention10 décembre 2006
-
22 sept. 2006 à 09:22
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 2008
-
22 sept. 2006 à 14:41
Bonjour,
J'ai un listbox, ou je charge via .additem une liste de 268 nom déjà trié alphabétiquement qui sont toujours les mêmes mais c'est relativement long (environ 1 seconde et demie dans le meilleur des cas).
J'ai mis la propriété .sorted = false car je n'ai pas besoin que la listbox re-trie les noms quand je les ajoute.
J'envoie avant un message pour forcer l'auto-redraw à no avant d'ajouter :
lReturn = SendMessage(frmPres.ListConstructeur.hWnd, WM_SETREDRAW, False, 0&)
Mais rien n'y fait, même si cela améliore la rapidité de chargement c'est toujours lent.
Avant je faisais une boucle (de 0 à 267) en prenant les noms sur un objet OLE excel mais la c'était 4 fois plus lent. Alors j'ai décidé de "dérouler" ma boucle.
Ulala2
Messages postés86Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention10 décembre 2006 22 sept. 2006 à 09:36
Bonjour,
Penses-tu vraiement que retirer l'index permet d'accélérer l'ajout ?
Moi je me disais que définir explicitement l'index permettait au composant de ne pas avoir à rechercher le prochain.
Pour le .visible = false, j'ai aussi essayé sans résultat prometteur.
En, fait je viens de trouver mon erreur (je dois avoir besoin de vacances) : ca fait une semaine que mes références à l'ancien objet OLE que j'utilisais été encore déclarées ! et libérées ensuite ! !
Set objExcel = frmPres.OLEExcel.object.Parent
Set objWB = frmPres.OLEExcel.object
Set objSheet = objWB.ActiveSheet
'puis chargement via .additem ... 268 lignes
'et je libérais les objets créés
Set objSheet = Nothing
Set objWB = Nothing
Set objExcel = Nothing
pffff et croyez moi, maintenant l'ouverture du formulaire est instantanée, mais si je déclare les références ci-dessus alors il faut environ 2 secondes pour créer les objets en mémoire.
je viens de recevoir ton message rentfield, merci de conseil pour le .with
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 22 sept. 2006 à 14:41
casy > Il me semble aussi que tu vois juste. Pas de paramètre Index, donc pas de recherche de l'endroit où placer l'objet. Il est mis directement à la fin.
S'il y a un index, le composant vérifie que cet index est valide ( positif ou nul ET inférieur au nombre d'éléments +1) et l'insère au bon endroit. Cette insertion consiste sans doute à prendre une partie du tableau de données (jusque l'indice Index-1), à y coller le nouvel élément, et à coller ensuite la fin du tableau de données (de Index à ListCount).
Bref, ajouter en queue directement, çà va beaucoup plus vite.
Manu --------------------------------------------------------------------------------------------
Avant de poster un message, n'oubliez pas de consulter le reglement.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 22 sept. 2006 à 09:28
Evite de mettre l'index auquel rajouter ton élément déjà.
Et essaye en masquant le listbox avant de le remplir, et le remettre visible dès que tu as fini :
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 sept. 2006 à 14:34
Personellement je dirais qu'à priori lorsque tu nemet pas d'index, la listbox bataille pas, l'item est simplement ranger à la suite des précédents.
Tandis que lorsque tu met un index, la listbox est obligé d'aller rechercher l'endroit ou mettre l'item, pour conserver l'ordre des index. Donc un peu de tri et de traitement en plus.
Cependant, il n'est pas certain que j'ai juste.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #