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
| Option Explicit 'Force le programmeur à déclarer toutes les variables
'Il est préférable de déclarer les variables en précisant leur type,
'sinon VBA utilise des variants et l'aide à la saisie est perdue (pas d'autocomplétion du code) entre autre.
Dim Choix() As String, Rng As Range, Ncol As Integer 'f As Worksheet
'Il n'est pas utile de déclarer une variable pour pointer une des feuilles du classeur
'Un nom lui est déjà attribué d'office par VBA.
'Dans ce classeur par exemple la feuille "DB" est connue sous le nom Feuil2 (modifiable dans les propriétés de la feuille, F4)
Private Sub UserForm_Initialize()
Dim TblTmp As Variant, i As Long, k As Long
'Set f = Sheets("bd")
'Il vaut mieux éviter [] pour pointer une cellule, ça force VBA à faire de l'interprétation de code, ce qui n'est pas utile
'L'utilisation de Rows.count permet de rendre le code compatible entre différente version (Row est un long sur les version actuelle, plus un integer)
Set Rng = feuil2.Range("a3", feuil2.Cells(feuil2.Rows.Count, "F").End(xlUp))
'On met les valeur dans un tableau interne
TblTmp = Rng.Value
'On mémorise le nombre de colonne
'Bien qu'ici, il serait possible de retrouver cette valeur via Choix avec LBound et UBound
Ncol = Rng.Columns.Count
'Puisque la taille du tableau est connue, il vaut mieux le redimensionner en une seule fois.
'Le but est de réduire l'écriture mais surtout d'éviter de morceler le tableau en mémoire
'Chaque appelle à redim preserve réalloue un petit morceau d'espace mémoire,
'VBA doit donc naviguer un peu partout pour retrouver les espaces mémoire
'Dans ce cas preserve, qui permet de conserver le contenu lors du redimensionnement, est retiré car n'est plus utile
ReDim Choix(LBound(TblTmp) To UBound(TblTmp)) 'Preserve
For i = LBound(TblTmp) To UBound(TblTmp)
For k = LBound(TblTmp) To UBound(TblTmp, 2)
Choix(i) = Choix(i) & TblTmp(i, k) & " * "
Next k
Next i
Me.ListBox1.List = Rng.Value
End Sub |
Partager