Ben oui, le +1, c'est pour avoir le nombre de ligne (et elles commence à 0, donc faut +1) mais sinon, UBound() retourne la borne maximale du tableau (et LBound() la borne minimale.
Perso, quand je parcours un tableau (en supposant évidement qu'il n'y a pas de trous dans les indices), je fais toujours :
For i = LBound(monTableau) to UBound(monTableau)
monTableau(i) ...
Next
Ainsi, quelque soient les bornes, ce script fonctionne