Bonjour à toutes et à tous,
Lorsque je manipule les variables tableaux je m'appuie beaucoup sur l'excellente note explicative faite par SilkyRoad sur le sujet.
https://silkyroad.developpez.com/vba/tableaux/
Ci-dessous, 2 extraits de cette note qui permettront d'illustrer mon problème :
- Pour vous affranchir des particularités d'Option Base, vous pouvez aussi utiliser la clause To, afin de contrôler la plage des indices d'un tableau.
- La limite inférieure d'une dimension peut être:
- 0 ou 1, en fonction de la valeur de l'instruction Option Base (Consultez le chapitre Option Base pour plus de détails).
- N'importe quelle valeur pour les dimensions définies à l'aide de la clause To.
Je travaille en Option base 1.
J'ai défini une variable tableau "Tab_chro" à 2 dimensions par la méthode suivante :
ReDim Tab_chro(7 To 220, 2 To 7)
Puis je l'alimente par un range de taille identique.
Tab_chro = Range(Cells(7, 2), Cells(220, 7)).Value
En exécutant mon code en mode pas à pas au passage de ces deux lignes, je constate que juste après la ligne "Redim", ma variable tableau "Tab_chro" (vide) a bien les indices min et max suivants:
- Dimension 1 : 7 --> 220
- Dimension 2 : 2 --> 7
Par contre, l'affectation des valeurs du range vers mon tableau abaisse les indices min et max :
- Dimension 1 : 1 --> 214
- Dimension 2 : 1 --> 6
J'ai fait le test en basculant en mode Option Base 0 et j'obtiens exactement la même chose, avec les mêmes indices que précédemment.
Plus bas dans mon code, si par exemple j'appelle la valeur de Tab_chro(218,7), ça plante car les limites des indices ont été abaissés (à mon insu) par l'affectation des valeurs du range et donc ces indices n'existent plus...
Est-ce que quelqu'un comprend pourquoi VBA fait ça (quelle subtilité m'a échappée) ?
Je vous remercie d'avance pour vos explications.
Partager