C'est toi qui est maître du Lbound mais pas entièrement et pas dans tous les cas.
Si tu déclares un array, le Lbound est zéro.
va désigner un tableau à une dimension. Ce tableau aura pour Lbound 0 et pour Ubound 2. Ce tableau aura donc
3 éléments : t(0), t(1) et t(2).
Si tu mets l'option
Option base 1 en tête du module, Dim t(2) créera un tableau à une dimension. Ce tableau aura pour Lbound 1 et pour Ubound 2. Ce tableau aura donc
2 éléments :t(1) et t(2).
Pour plus de clarté, on peut abandonner l'
option Compare, et écrire Dim t(0 to 2) ou bien Dim t(1 to 2). Ainsi on sait ce qu'on fait.
Quand on utilise :
dim T
T = range("A1:C2")
VBA crée un tableau à
deux dimensions dont Lbound pour les deux dimensions
est toujours 1. Et ceci
quelque soit la valeur de
Option Compare (pour l'exemple on a un tableau à deux lignes et trois colonnes)
Une exception quand il n'y a qu'une cellule : :
Dim T
t=range("A1")
Dans ce cas, T n'est pas un tableau mais une variable
simple. Lbound(T) et Ubound(T) aboutissent à une erreur.
Il faudra donc tester (si on peut n'avoir qu'une seule cellule) si T est un tableau ou non par IsArray(T) et faire le traitement idoine suivant le cas.
On peut aussi prendre une ligne supplémentaire (en général une ligne vide) et boucler sur les n-1 lignes du tableau:
derlig = cells(rows.count,"a").end(xlup).row
+1
T=range("a" & derlig)
For i = Lbound(t) to Ubound(T)
-1
...
...
Next i