IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Nom de la variable défini dans une cellule [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut Nom de la variable défini dans une cellule
    Bonjour,

    Habituellement j'essaie de me dépatouiller à partir de ce qui a déjà été publié par ici, mais là, je n'arrive pas à trouver les bons mots clefs qui me permettraient d'obtenir des infos...

    En fait, je souhaiterais définir ma variable non pas en l'appellant dans le code VBA, mais en l'appellant via le contenu d'une cellule de worksheet.

    Et je me demandais si cela était possible ?

    Je définis dans mon code les variables var1 et var2

    dans ma worksheet, j'ai la table suivante (cellules A1:B2) :

    var1 - A
    var 2 - B

    je voudrais pouvoir dire : affecter à la variable dont le nom est "contenu de la cellule A1" la valeur A.

    Cela correspondrait à une sorte d'Indirect... mais je ne trouve pas plus d'infos.. pensez-vous que c'est possible ?

    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Comme tu l'entends, c'est pas possible car les variables doivent être déclarées en "dur" dans les modules de façon implicite ou explicite mais tu peux utiliser un tableau du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub Test()
     
        'dimension correspondant à A1:B2
        Dim Tbl(1 To 2, 1 To 2)
     
        'pouvant correspondre à A1
        Tbl(1, 1) = MaValeur1
     
        'pouvant correspondre à B1
        Tbl(1, 2) = MaValeur2
     
        'pouvant correspondre à A2
        Tbl(2, 1) = MaValeur3
     
        'pouvant correspondre à B2
        Tbl(2, 2) = MaValeur4
     
    End Sub
    Hervé.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut
    Merci beaucoup pour ton retour Theze.

    En fait, je souhaite bien conserver la déclaration de la variable en dur dans le code.

    Ce que je voudrais faire c'est une boucle qui affecte la valeur de la colonne B à la variable dont le nom est renseigné en colonne A (ce qui m'éviterait de faire 1 find pour chaque variable ou d'affecter une cellule en dur dans le code ... ) .

    en temps normal, je ferais : Var1 = activeworksheet.range("B1").value

    Là je voudrais remplacer Var1 de sorte que vba interprète activeworksheet.range("A1").value comme le nom de la variable que j'ai préalablement déclaré, et non comme un .value

    J'avais pensé à la solution du tableau, et je te remercie pour l'idée... mais le besoin (comme tu dois t'en douter) est de sortir un maximum les paramétrages de la macro pour les rendre accessibles dans une table excel !

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Dans ce cas, je pense qu'un dictionnaire serait assez bien indiqué mais comme tu dis "
    que j'ai préalablement déclaré
    ", il faut remplir le dictionnaire avec comme nom des clés (valeurs uniques) le nom de tes "variables" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    'en tête de module pour garder en mémoire les valeurs
    Dim Dico As Object
     
    Sub Dictionnaire()
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        'initialise avec 3 "dimensions". Varx est le nom de la clé
        'et "Un mot pour le test !" est l'élément de la clé qui peut être modifié
        Dico.Add "Var1", "Un mot pour le test !"
        Dico.Add "Var2", 0
        Dico.Add "Var3", 0
     
        '"A1 contient le mot Var1
        MsgBox Dico(Range("A1").Value)
     
        'modifie la valeur
        Dico(Range("A1").Value) = 10
     
        'indique la nouvelle valeur
        MsgBox Dico(Range("A1").Value)
     
    End Sub
    Le dictionnaire est assez souple d'utilisation.

    Hervé.

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    sans passer par un tableau je ne voies pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Var(3)
    Public VarCollection As Collection
     
    Sub Init()
        Set VarCollection = New Collection
        VarCollection.Add 0, "Var1"
        VarCollection.Add 1, "Var2"
        VarCollection.Add 3, "Var3"
        VarCollection.Add 4, "Var4"
    End Sub
    Sub test()
    Range("b1") = "Var1"
    Var(VarCollection(Range("b1"))) = 12
    MsgBox Var(VarCollection(Range("b1")))
    End Sub

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 4
    Par défaut
    Haa !!!

    Je crois que la solution du dictionnaire semble fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Dim Dico As Object
     
    Sub Dictionnaire()
     
     Dim var1 As String
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        For Each c In Sheets("paramétrage").Range("A1:A3")
           Dico.Add c.Value, c.Offset(0, 1).Value
        Next c
     
    var1 = Dico.Item("var1")
     
    End Sub
    Et j'ai bien pu affécter la valeur à ma variable en fonction du nom contenu dans la colonne A qui sert de clé au dictionnaire
    Et au passage, j'ai découvert le dico !

    Plus qu'à le mettre en place sur mon vrai fichier ! Merci infiniment pour votre aide et votre réactivité !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Problème pour renommer un fichier à partir d'une variable contenu dans une cellule
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/05/2010, 11h43
  2. Appeler dans une requête des variables définies dans une macro
    Par piflechien73 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/08/2009, 15h12
  3. Réponses: 3
    Dernier message: 01/12/2008, 17h20
  4. [VBA]Séparer le Nom et le Prénom placés dans une cellule unique
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/04/2007, 10h34
  5. [XSLT] Réutiliser une variable définie dans une boucle
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/10/2006, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo