Accès indirect aux variables publics en VBA

Résolu
jppeignier Messages postés 3 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 15 août 2012 - 14 août 2012 à 23:51
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 16 août 2012 à 00:45
Sous VBA Excel, existe-t-il une collection regroupant les variables où l'on pourrait les utiliser de façon indirecte ?

Je cherche à écrire et à relire le contenu de multiples variables utilisés dans un programme VBA afin de paramétrer simplement mon programme via une feuille de calcul où j'aurais en colonne 1 l'intitulé de la variable et en colonne 2 sa dernière valeur.

Exemple : à travers une case à cocher d'un UserForm, je donne à l'utilisateur la possibilité de choisir un mode de fonctionnement de mon programme (par exemple afficher les prix en TTC). Je vais donc affecter la valeur True à une variable (ici PrixTTC) déclarée comme public. Pour que l'utilisateur retrouve ce contexte à la prochaine ouverture, je vais le noter dans un onglet « paramètres » et le relire à chaque ouverture.
Pour l'instant, j'ai écrit deux fonctions permettant pour l'une d'écrire et pour l'autre de relire mes valeurs pour chaque variable. Et j'appelle ces fonctions avec l'intitulé de la variable comme paramètre. Ceci pour chaque variable. Donc plus de 100 fois dans certaines applications. Il serait plus judicieux de balayer mon onglet « paramètres » et de charger les variables lignes par ligne avec une routine du type
For ligne = 1 to 50
xxx.variables(cells(ligne,1)) = cells(ligne,2)
Next
J'aurais bien entendu déclaré avec la même orthographe chaque variable comme public dans le programme VBA et sur une ligne de mon onglet « paramètres ».

Je lis sur le site http://msdn.microsoft.com/en-us/library/office/aa212463(v=office.11).aspx
des choses sur le sujet :
MsgBox Documents("Sales.doc").Variables.Count & " variables"
Ou
ActiveDocument.Variables.Add Name:="Temp", Value:="12"
Ou
ActiveDocument.Variables("NomVariable").Value = 6

J'en ai rêvé, mais ça ne fonctionne pas sous VBA.

JPP

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 août 2012 à 01:02
Pas bonjour non plus.

Oui et non.
Non, on ne peut pas accéder aux variables indirectement par leur nom.
Oui, on peut transférer le contenu d'un ensemble de cellules vers un ensemble de variables, mais à condition qu'elles soient indexées et donc, portent toutes le même nom, juste repérées par leur index.
A ce compte-là, mieux vaut rester avec tes cellules :
Si tu prends encore 30 minutes pour nommer (*) chaque cellule de ta feuille avec un nom de variable, tu peux facilement y accéder depuis un programme avec
LaFeuilleDesVariables.Range("LeNomDeVariable").Value

(*) Nommer : mettre un nom (unique dans tout le classeur) dans la zone de texte située juste au dessus du "A" de la colonne A.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 août 2012 à 00:45
Oui, une collection est capable de stocker des noms (avec le Key) et de les rappeler facilement :
maCollection.Item("LeKeyAssocié")
ici, "LeKeyAssocié" sera le nom de ta variable.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 août 2012 à 01:55
PS : Ton lien correspond à de la syntaxe Word et non Excel.
0
jppeignier Messages postés 3 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 15 août 2012
15 août 2012 à 11:20
Merci beaucoup pour ces informations.
Je vais en effet continuer à passer la demi-heure nécessaire pour chaque appli.
Cependant, je vais étudier la possibilité de passer par la création d'un type personnalisé ou une classe (où, avec les propriétés, je dois pouvoir reproduire la souplesse des variables).

Bonne journée
0
Rejoignez-nous