Accélération code

gvives

XLDnaute Occasionnel
Bonjour à tous,

J'ai une base de données (BDD_TAB.xslx") composée de 15 colonnes et pouvant atteindre jusqu'à 25 000 lignes voir plus. La première colonne de cette base de données contient des ages.

Cette base de données me permet d'alimenter une listview reprennant l'ensemble des colonnes en fonction de l'age retenu.

Mon code est organisé de la façon suivante :

Dim tab_BDD()
derligneBDD = Workbooks("BDD_TAB.xlsx").sheets("BDD_TAB").range("A65536").end(xlup).row
Redim tab_BDD(derligne -1, 14)

with workbooks("BDD_TAB.xlsx").sheets("BDD_TAB")

for a = 1 to 15

for i = 1 to derligneBDD

tab_BDD(i-1,a-1) = .cells(i,a )

next i

next a

end with

ageretenu = range("A1")

for i = 0 to derligneBDD - 1

if tab_BDD(i,0) = ageretenu then

listview1.listitems.add , , tab_BDD(i,1)
.... (et autres colonnes en list subitems)

End if

next i

Le traitement est long aussi j'aimerai savoir si ce code peut être optimisé et si vous pourriez éventuellement m'aiguiller sur la bonne direction.

Merci beaucoup pour votre aide.

Très bonne journée à tous !!
 
Dernière édition:

sousou

XLDnaute Barbatruc
Bonjour.
2 remarques
1/ pourqoui construits-tu un tableau tab_BDD? tu pourrais travailler directement dans ta feuille (qui est un tableau)
2/ une solution serait de trier ta base de données par age afin que les ages identiques soient consécutif.
Tu tris, tu cherche l'age retenu(find), et tant que l'age est le même tu implémente ta listewiew.....
et n'oublis pas le application.screenupdating=false
 

Dranreb

XLDnaute Barbatruc
bonsoir.
Ben moi au contraire je recommande vivement de commencer par :
VB:
Dim tab_BDD()
tab_BDD = Workbooks("BDD_TAB.xlsx").Sheets("BDD_TAB").UsedRange.Value
Attention: Tab_BDD s'en retrouvera basé 1, les UBound correspondant aux .Rows.Count et .Columns.Count de la UsedRange.
 

gvives

XLDnaute Occasionnel
Bonsoir Dranreb, bonsoir Sousou,

Tous d'abord toutes mes excuses pour le retard de ma réponse impossible de me connecter depuis ce week end.

Merci beaucoup ! Je vais essayer le Used Range, ça m'a l'air d'être une bonne piste pour simplifier le code et l'accélérer.

Très bonne soirée à tous les deux,
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 069
Messages
2 085 040
Membres
102 763
dernier inscrit
NICO26