Bonjour,
J'ai décidé de faire quelques tests sur le remplissage d'un tableau structuré en VBA
Les soucis souvent observés : une grande lenteur si on utilise l'objet ListObject, ListRow ou ListColumn dans le code
Je vous fait un résumé de mes tests parce que je pense que ça peut servir à d'autres
L'idée est de remplir un tableau avec 2 colonnes à partir de la cellule A1
Les 2 colonnes s'appellent a et b
la colonne a devra contenir des nombres entiers de 1 à 10 000 (10 0000 lignes de tableau donc)
la colonne b devra contenir une formule simple : la lettre "z" collée au contenu de la colonne a
Le tableau créé s'appelle Tableau1
Code : Sélectionner tout - Visualiser dans une fenêtre à part ="z"&[@a]
1ère méthode :
désactiver l'affichage écran
ajouter une ligne (Listrows.Add)
écrire dedans en colonne a le nombre
en colonne b la formule
Temps d'exécution chez moi : environ 2 minutes
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 Sub Remplir1() Dim LO As ListObject, LR As ListRow, i As Long With Sheets("Feuil1") Set LO = .ListObjects("Tableau1") Application.ScreenUpdating = False .Range("J2").Value = Now LO.Range.Cells(1, 1).Offset(1, 0).Value = 1 LO.Range.Cells(1, 1).Offset(1, 1).Formula = "=""z""&[@a]" For i = 2 To 10000 Set LR = LO.ListRows.Add LR.Range.Cells(1, 1).Value = i LR.Range.Cells(1, 2).Formula = "=""z""&[@a]" Next i .Range("K2").Value = Now Application.ScreenUpdating = True End With End Sub
méthode 2 : la même en désactivant les calculs en plus
Temps d'exécution chez moi : environ 1 minute 30 sec
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 Sub Remplir2() Dim LO As ListObject, LR As ListRow, i As Long With Sheets("Feuil1") Set LO = .ListObjects("Tableau1") Application.ScreenUpdating = False Application.Calculation = xlCalculationManual .Range("J3").Value = Now LO.Range.Cells(1, 1).Offset(1, 0).Value = 1 LO.Range.Cells(1, 1).Offset(1, 1).Formula = "=""z""&[@a]" For i = 2 To 10000 Set LR = LO.ListRows.Add LR.Range.Cells(1, 1).Value = i LR.Range.Cells(1, 2).Formula = "=""z""&[@a]" Next i .Range("K3").Value = Now Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End With End Sub
Bon je vous passe tous les tests intermédiaires
méthode 5 : on remplit un tableau VBA (Array) de 10000 lignes et 1 colonne avec des nombres de 1 à 10000
on écrit ce tableau à partir de A2 dans la feuille de calcul
on s'assure que le tableau s'est agrandi en lui imposant la bonne taille
on colle la formule en colonne b
temps d'exécution : moins d'1 seconde
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 Sub Remplir5() Dim LO As ListObject, i As Long, Tablo() With Sheets("Feuil1") Set LO = .ListObjects("Tableau1") Application.ScreenUpdating = False Application.Calculation = xlCalculationManual .Range("J6").Value = Now ReDim Tablo(1 To 10000, 1 To 1) For i = 1 To 10000 Tablo(i, 1) = i Next i LO.Range.Offset(1, 0).Resize(10000, 1).Value = Tablo LO.Resize .Range("$A$1:$B$10001") LO.ListColumns("b").DataBodyRange.Formula = "=""z""&[@a]" .Range("K6").Value = Now Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End With End Sub






Répondre avec citation






Partager