Accès indirect aux variables publics en VBA [Résolu]

Signaler
Messages postés
3
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
15 août 2012
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
PS : Ton lien correspond à de la syntaxe Word et non Excel.
Messages postés
3
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
15 août 2012

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