Constante Requise

Robix -  
 Robix -
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

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    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
    1. Robix
       
      Merci pour cette info!
      0
  2. Utilisateur anonyme
     
    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