Constante Requise

Fermé
Robix - Modifié le 7 avril 2020 à 15:30
 Robix - 20 avril 2020 à 09:18
Bonjour,
Je vous partage mon problème de "Constante Requise" sur VBA.
Celle-ci se déclenche dans le cas suivant:

Dim pas_ext As Long
pas_ext = 360 / t2 'Nombre de points dans le tableau (t2 étant une valeur entre 0 et 1 calculée de sorte à ce que pas_ext soit toujours un entier)
Dim y(pas_ext) As Double 'Initialisation du tableau y
Dim dy(pas_ext) As Double 'Initialisation du tableau dy
Dim ddy(pas_ext) As Double 'Initialisation du tableau ddy

L'erreur se déclare à la ligne 3 (donc à l'initialisation de mon premier tableau). J'ai essayé de jouer avec la fonction VarType afin de voir si la nature de ma variable pas_ext pouvait jouer mais rien...

En revanche si je réalise un tableau dynamique avec les instructions suivantes:

Dim pas_ext As Long
pas_ext = 360 / t2 'Nombre de points dans le tableau
MsgBox VarType(t2)
Dim y() As Double 'Initialisation du tableau y
ReDim y(pas_ext)
Dim dy() As Double 'Initialisation du tableau y
ReDim dy(pas_ext)
Dim ddy() As Double 'Initialisation du tableau y
ReDim ddy(pas_ext)

Là tout marche bien...
D'où ma question: Pourquoi est-il nécessaire de passer par un tableau dynamique alors qu'un tableau aux dimensions pré-définies me suffiraient amplement...
Idem, je ne suis pas un fin connaisseur...
En vous remerciant,
R.

Configuration: Windows / Chrome 80.0.3987.163

3 réponses

NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 343
7 avril 2020 à 16:48
Dimensionner un tableau avec DIM requiert une valeur constance (mot clé const à la place de Dim)
Si tu veux un tableau dimensionné à l’exécution (dynamiquement) regardes Redim.
1
Merci pour cette info!
0
Utilisateur anonyme
8 avril 2020 à 09:51
Bonjour

cela dit, redimensionner des tableaux c'est gourmand en ressources
  • ça créer un nouveau tableau,
  • ça copie toutes les valeurs du tableau d'origine,
  • ça route la variable vers le nouveau tableau
  • ça efface l'ancien tableau

=> du temps et de la RAM dépensés "inutilement".

A la place on peut utiliser des listes chainées, ça permet d'ajouter (à la fin), insérer (où on veut) ou supprimer un item sans dépense de ressources inconsidérée.

En VBA, il y a le type Collection qui implémente les listes chainées.
Voilà 2 tutos sur le sujet
https://riptutorial.com/fr/vba/topic/5838/collections
https://www.commentcamarche.net/faq/10397-vba-et-les-collections-d-objets
1
Un grand merci pour cette info!
0