Constante Requise
Robix
-
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.
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
A voir également:
- Constante Requise
- Ups l'adresse est requise ✓ - Forum Vos droits sur internet
- Action requise sur le compte - Forum Téléphones & tablettes Android
- Problème Action requise sur le compte - Forum Gmail
- Partager un google forms sans connexion requise ✓ - Forum Google Docs
- Word connexion requise ✓ - Forum Word
3 réponses
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.
Si tu veux un tableau dimensionné à l’exécution (dynamiquement) regardes Redim.
Robix
Merci pour cette info!
Bonjour
cela dit, redimensionner des tableaux c'est gourmand en ressources
=> 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
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