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 :

Travailler de manière DYNAMIQUE sur des variables [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Travailler de manière DYNAMIQUE sur des variables
    Bonjour à tous,



    Je cherche désespérément comment utiliser dynamiquement une variable, mes recherches Internet sont totalement infructueuses.



    Je m'explique. J'ai 5 variables, nommées comme ceci (il s'agit juste d'un exemple) :

    - Var16_A_ch
    - Var16_B_ch
    - Var16_C_ch
    - Var16_D_ch
    - Var16_E_ch



    On veut travailler sur le type personnalisé, caractérisé par les lettres "A", "B", "C", "D" et "E". Il y a donc une variable "Type_perso", qui prendra la valeur d'une de ces 5 lettres.



    Mon objectif est d'obtenir la valeur de la variable qui contient cette lettre.
    Selon mon idée, cela donnerait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Var16_A_ch = 30
    Var16_B_ch = 50
    Var16_C_ch = 10
    Var16_D_ch = 40
    Var16_E_ch = 20
    Type_perso = "D"
    MsgBox FONCTION("Var16_" & Type_perso & "_ch")
    FONCTION serait une fonction de VBA existante qui permettrait de travailler dynamiquement sur une variable. Le message afficherait donc la valeur de 40 (correspondant à la lettre "D").



    Plus généralement, je veux utiliser une variable de manière dynamique via une autre variable. Cela se fait dans un UserForm, dans lequel on peut obtenir la valeur d'un contrôle en le déclarant de manière dynamique, via la fonction "Controls".



    Je ne cherche pas de solutions de secours. Je cherche uniquement à répondre à cette problématique, et savoir si cela est faisable ou pas, et si oui, comment ?



    J'espère avoir été assez clair, en vous remerciant par avance du prendre du temps pour me répondre.



    Bonne soirée à tous.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    voir Switch peut-être

  3. #3
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 816
    Points : 2 954
    Points
    2 954
    Billets dans le blog
    10
    Par défaut
    Bonsoir,
    Ne sachant pas s'il vaux mieux dire une grosse bêtise plutôt que d'omettre une piste, je me lance et dis peut être une énormité...
    Ce que vous décrivez ressemble, pour moi, à une simple variable tableau. Non?
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Tablo As Variant
    Tablo = Array("a", "b", "c")
        MsgBox Tablo(0) 'Renvoie "a"
        MsgBox Tablo(1) 'Renvoie "b"
        'etc...
    Ce qui peux effectivement s'adapter aux contrôles d'un USF non?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    peut-être que tu peux l'utiliser de cette manière
    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
     
    Function variable(var)
    variable = ("Var16_" & var & "_ch")
    Select Case variable
    Case "Var16_A_ch"
     variable = 30
    Case "Var16_B_ch"
     variable = 50
    Case "Var16_C_ch"
     variable = 10
    Case "Var16_D_ch"
     variable = 40
    Case "Var16_E_ch"
     variable = 20
    End Select
    End Function
     
    Sub test()
    Type_perso = "D"
    MsgBox variable(Type_perso)
    End Sub
    ça a l'air de correspondre a ce que tu recherche

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox FONCTION("Var16_" & Type_perso & "_ch")
    Le fait d'utiliser des doubles quotes force Excel à interpréter cela comme une chaine de caractère et non une variable.

    Philippe

  6. #6
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je pense que le mieux serait d'utiliser un dictionnaire dont les clés serait le type perso :
    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 Dictionnaire()
     
        Dim Dico As Object
        Dim Type_perso As String
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        Dico.Add "A", 30
        Dico.Add "B", 50
        Dico.Add "C", 10
        Dico.Add "D", 40
        Dico.Add "E", 20
     
        Type_perso = "D"
     
        MsgBox FONCTION(Dico(Type_perso))
     
    End Sub
    Hervé.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Bonjour à tous,


    Merci à tous ceux qui ont proposé des solutions.


    De mon côté, j'ai utilisé un tableau comme pijaku l'a suggéré. Il est certain qu'il y a quelques solutions de contournement, mais il n'y a pas de réponses exactes correspondant à la problématique.


    Dois-je en conclure qu'il est impossible de travailler dynamiquement sur des variables ?


    Au regard de la diversité des solutions proposées, cela semble peut-être inutile.

  8. #8
    Expert éminent
    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
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Ce que tu veux faire est impossible en VB (dans un autre language peut être), tu ne peux pas construire le nom d'une variable durant l'exécution du code. Il y a après une multitude de possibilités comme un dictionnaire, une collection, un tableau à deux entrées, un Type End Type, etc...

    Hervé.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    n'as tu tester que le tableau de pijaku ?
    en quoi le code que je t'ais fais ne correspond pas à ta recherche ?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    A priori pour moi aussi c'est impossible en VBA et pour info ça existe en PHP. On peut entre autres y appeler des fonctions avec des variables String.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par alsimbad Voir le message
    n'as tu tester que le tableau de pijaku ?
    en quoi le code que je t'ais fais ne correspond pas à ta recherche ?
    Non, j'ai testé aussi cette méthode mais j'ai préféré utiliser un tableau.


    Ce que tu as indiqué est une très bonne solution.


    Ce que je voulais savoir, c'est s'il est possible de travailler dynamiquement avec des variables et la réponse semble être NON.



    Voilà, merci à tous pour vos réponses et vos renseignements.



    Bon week-end.

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

Discussions similaires

  1. Travail sur des variables incrémentables
    Par pratick dans le forum Langage
    Réponses: 3
    Dernier message: 05/01/2014, 20h59
  2. [Tableaux] Fonction extract() sur des variables NULL
    Par Tchupacabra dans le forum Langage
    Réponses: 7
    Dernier message: 21/05/2008, 23h34
  3. Appliquer des liens sur des variables PHP
    Par sasaas dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2008, 17h27
  4. Réponses: 2
    Dernier message: 11/10/2006, 12h21
  5. Réponses: 4
    Dernier message: 15/12/2002, 05h19

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