VBA : Nom relatif de variable ?

Besnard68

XLDnaute Occasionnel
Bonjour le Forum,

Sans utiliser les cellules d'une feuille excel (et donc en restant purement VBA), est-il possible, dans une procédure, de formuler le nom d'une variable à partir de 2 composantes ?

Je souhaiterais ainsi alléger l'écriture de la procédure en utilisant, par exemple, une boucle For / Next.

Je m'explique avec un exemple :

J'ai 5 variables (F10, F11, F12, F13 et F14)
Je souhaite leur affecter à chacune et respectivement, la valeur des cellules C10, C11, C12, C13 et C14.

Peut-on donc simplifier les lignes suivantes en faisant 'jouer' le F, qui reste fixe, et l'autre partie, qui varierait de 10 à 14 :

F10 = sheets("Feuil1").range("C10").value
...
F14 = sheets("Feuil1").range("C14").value.

Ici l'exemple ne comporte que 5 variables et c'est gérable en l'état, mais plus, ça devient relativement lourd à traiter.


Merci pour votre aide.

Cordialement
 

Papou-net

XLDnaute Barbatruc
Re : VBA : Nom relatif de variable ?

Bonjour Besnard68,

Dans ton cas, il me paraît plus simple de créer un tableau de variables :

Dim F(5) as variant

puis de les exploiter dans une boucle :

For n = 0 To 4
F(n) = Range("C" & n + 10).Value
Next

Pour simplifier la boucle, tu pourrais dimensionner ton tableau avec le nombre correpondant à l'indice maximal de tes cellules (Dim F(14)), mais tu risques alors de créer un tableau surdimensionné inutilement. Exemple :

Dim F(14) as variant

For n = 10 To 14
F(n) = Range("C" & n).Value
Next

Espérant t'avoir aidé.

Cordialement.
 

Besnard68

XLDnaute Occasionnel
Re : VBA : Nom relatif de variable ?

Bonsoir Staple1600 et Papou-net,

Je ne peux que m'incliner devant votre perspicacité.

Un grand merci à vous deux

Ce qu'il y a de bien, c'est que celui qui s'en donne la peine, peux vraiment progresser avec l'aide du forum.
Vous nous donnez les clés d'accès et nous motivez pour comprendre et surtout approfondir les cas.

Alors j'ai approfondi et je précise 2 choses :

- La 1ère : Pour ta solution Staple : Il faut bien penser à définir la dimension du tableau avec Dim, sinon ça ne marche pas [ dans mon exemple : Dim Tablo(14) ],

- La 2ème : Pour répondre à ta réflexion, Papou-net, de tableau qui serait surdimensionné inutilement, pour y palier et faire juste ce qu'il faut, j'ai vu que l'on peux formuler comme ceci : Dim Tablo(10 to 14).

En tous cas, encore un grand merci parce que ça marche du feu de Dieu.

Bonne soirée à vous 2

Cordialement
 

Papou-net

XLDnaute Barbatruc
Re : VBA : Nom relatif de variable ?

Merci pour ta précision, Besnard68,

Je n'étais pas certain que cette possibilité existe (pour ne l'avoir jamais utilisée), mais je l'appliquerai à l'avenir.

Tu illustres parfaitement ma devise personnelle :

"Apprendre pour savoir, savoir pour comprendre, comprendre pour partager !"

Encore merci.
 

Spitnolan08

XLDnaute Barbatruc
Re : VBA : Nom relatif de variable ?

Bonjour le fil,

Une précision pour les dimensions d'un tableau. Il est possible de modifier dynamiquement la dernière dimension d'un tableau en utilisant les instructions :
Redim Tablo(0 to 5) ou Redim Tablo(6) qui remet le tablau vierge

RedimPreserve
Tablo(0 to 5) ou RedimPreserve Tablo(6)qui conserve les données déjà entrées

A condition que le tableau ait été déclaré ainsi :
Dim Tablo() as ... sans indication de la dimension

Cordialement
 

Besnard68

XLDnaute Occasionnel
Re : VBA : Nom relatif de variable ?

Bonjour Spitnoland08, bonjour le forum,

Merci pour cette information.

Cependant, une petite question :

Cela signifie t'il que l'instruction 'Redim Tablo(0 to 5)' serait non fonctionnelle si elle était positionnée après une précédente instruction 'RedimPreserve Tablo (0 to 5)' ?



Bonjour le fil,

Une précision pour ....

....

RedimPreserve
Tablo(0 to 5) ou RedimPreserve Tablo(6)qui conserve les données déjà entrées

A condition que le tableau ait été déclaré ainsi :
Dim Tablo() as ... sans indication de la dimension


Merci d'avance pour ta réponse.

Cordialement


PS : Comme le retranscrit si bien Papou-net, le partage sur ce forum n'est vraiment pas un vain mot.
 

Spitnolan08

XLDnaute Barbatruc
Re : VBA : Nom relatif de variable ?

Re,
Cela signifie t'il que l'instruction 'Redim Tablo(0 to 5)' serait non fonctionnelle si elle était positionnée après une précédente instruction 'RedimPreserve Tablo (0 to 5)' ?
Non, mais mon propos n'était pas d'être exhaustif sur ces instructions mais de vous les faire connaître pour que vous sachiez qu'il existe des possibilités plus étendue et que vous ayez la curiosité d'aller voir l'aide VBE dont voici un extrait :
L'instruction ReDim permet de dimensionner et de redimensionner un tableau dynamique ayant déjà été déclaré de manière formelle par le biais d'une instruction Private, Public ou Dim suivie de parenthèses vides (sans indices de dimension).
Vous pouvez utiliser l'instruction ReDim à plusieurs reprises pour modifier le nombre d'éléments et de dimensions d'un tableau. Cependant, vous ne pouvez changer a posteriori le type d'un tableau à l'aide de l'instruction ReDim, sauf si ce tableau est contenu dans une variable de type Variant. Dans ce cas, le type des éléments est modifiable en utilisant une clause As type, sauf si vous utilisez le mot clé Preserve. Aucun changement de type de données n'est alors possible.
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau. Vous ne pouvez en aucun cas modifier le nombre de dimensions. Par exemple, si votre tableau n'a qu'une dimension, vous pouvez la modifier puisqu'il s'agit de la dernière et seule dimension. Toutefois, si le tableau compte plusieurs dimensions, seule la taille de la dernière dimension est modifiable si vous souhaitez préserver le contenu du tableau. L'exemple suivant montre comment augmenter la taille de la dernière dimension d'un tableau dynamique sans effacer les données qu'il contient :
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
De même, le mot clé Preserve ne permet de redimensionner un tableau qu'en modifiant la limite supérieure ; toute modification de la limite inférieure provoque une erreur.
Bonne lecture.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 267
Membres
103 168
dernier inscrit
isidore33