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

Messages postés
3
Date d'inscription
lundi 20 avril 2009
Dernière intervention
15 août 2012
- - Dernière réponse : cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
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)

Merci cs_Jack 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
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.

Merci cs_Jack 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
PS : Ton lien correspond à de la syntaxe Word et non Excel.
Commenter la réponse de cs_Jack
Messages postés
3
Date d'inscription
lundi 20 avril 2009
Dernière intervention
15 août 2012
0
Merci
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
Commenter la réponse de jppeignier

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.