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 :

Un nom de variable lui-même en variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut Un nom de variable lui-même en variable
    Bonjour.

    Je résume mon problème ainsi :

    J'ai 4 variables A, B, C et D parfaitement déclarées
    J'ai aussi une cellule dans laquelle peut se trouver la valeur "A", "B", "C" ou "D"...

    Comment faire pour qu'en fonction du contenu de la cellule, je puisse agir directement sur la variable qui porte le même nom que le contenu, du genre

    (Variable_qui_porte_le meme_nom_que_le_contenu_de_la_cellule)=12

    et ceci sans faire des multiples IF .. THEN ou des SELECT CASE...

    Merci.

    ------------------------

    Bon, finalement après une première recherche infructueuse dans le forum (d'où ma question), une seconde recherche semble montrer que ce n'est pas possible.

    Tant pis.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Tu peux utiliser Find.
    Un exemple un peu simplet :
    Nom : Forum23.PNG
Affichages : 1488
Taille : 44,3 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub changer_valeur()
        Dim valeur As String
        Dim cellule As Range
        valeur = "A"
        Set cellule = Range("A1:A4").Find(valeur)
        cellule.Value = 12
    End Sub

    EDIT : s'il y a plusieurs cellules avec "A", il faut peut-être utiliser replace ?

  3. #3
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Merci de la réponse mais c'est la variable en mémoire que je veux modifier et pas la cellule.

    J'aurais pu prendre comme exemple aussi le fait de demander à l'utilisateur quelle variable il veut modifier, et suivant sa réponse, on modifie directement la variable dont il a donné le nom, sans passer par IF...THEN ou SELECT CASE

    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If reponse="A" then
              A=12
                 else if reponse ="B" then
                    B=12 etc..
    End if
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select case reponse
     
                Case "A"
                A=12
     
                Case "B"
                B=12 ....
     
    ..
    End select

    Excusez-moi, je ne sais pas comment on fait pour faire apparaitre les lignes en "Code"....

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Je ne vois pas à quoi ça pourrait servir, pourrais tu donner la finalité de ta demande ?

    Si le besoin est avéré, il suffit d'utiliser un tableau (1 to 4).

  5. #5
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Je reçois un tableau qui provient d'un autre service avec une colonne qui contient aléatoirement et pour l'instant les noms suivants :

    AWD, MOED, MOER, MOEA, D33, D63.

    Ce tableau peut faire plusieurs centaines de lignes.

    J'ai donc pour l'instant 6 variables mémoire portant le même nom et à chaque nom rencontré, je dois faire varier cette variable mémoire d'une certain quantité en plus ou en moins, quantité qui évidemment change souvent.

    Sachant que les noms ci-dessus peuvent varier en plus ou en moins à chaque fois, je n'ai pas envie, à chaque réception de tableau de devoir refaire mon code pour qu'à chaque valeur corresponde une variable mémoire.

    Si demain, au lieu de 6 valeurs comme ci-dessus, j'en ai 60, je ne vais pas faire 60 IF THEN ou 60 CASE.

    Donc ce que je voudrais, c'est parcourir cette colonne et qu'à chaque valeur rencontrée, il modifie automatiquement la variable mémoire portant le même nom que le nom rencontré...

    Je précise que ce n'est pas moi qui ai monté ce système, mais c'est celui qui en vigueur dans le service depuis longtemps, et il ne semble pas question d'en changer...

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par lovedann Voir le message
    Je reçois un tableau qui provient d'un autre service avec une colonne qui contient aléatoirement et pour l'instant les noms suivants :
    AWD, MOED, MOER, MOEA, D33, D63.
    Ce tableau peut faire plusieurs centaines de lignes.
    J'ai donc pour l'instant 6 variables mémoire portant le même nom et à chaque nom rencontré, je dois faire varier cette variable mémoire d'une certain quantité en plus ou en moins, quantité qui évidemment change souvent.
    Ce ne sont pas des variables mais des valeurs !
    Une seule variable suffit, soit une collection, soit un dictionnaire.

  7. #7
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Je vais essayer avec un exemple...

    Colonne en question du tableau au jour J (avec une quantité à ajouter de 10) :

    MOED
    AWD
    MOED
    D33

    A la fin du traitement, les VARIABLES mémoires correspondantes MOED, AWD, et D33 doivent valoir respectivement 20 (puisqu'il y a deux fois MOED dans la colonne), 10 et 10...

    Colonne en question du tableau au jour J+3 (avec une quantité à ajouter de 15) :

    AWD
    AWD
    D33
    D63
    AWD
    D63

    A la fin du traitement, les VARIABLES mémoires correspondantes AWD, D33 et D63 doivent valoir respectivement 45 (puisqu'il y a 3 fois AWD dans la colonne), 10 et 20 (D63 apparait 2 fois)...

    Donc à chaque contenu de cellule de la 1e colonne doit correspondre une variable mémoire de même nom, et à l'ouverture du tableau, je ne connais pas la liste des valeurs présentes dans cette colonne.

    Et ainsi de suite au fil des jours. Ne me demandez pas pourquoi ça a été fait comme ça, je n'en sais rien..

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Re,

    Au risque de me répéter, ce que tu reçoit, ce ne sont pas des variables mais des valeurs de type texte (j'appelle ça un code) !
    A chacun de ces codes correspond une quantité qui est ajoutée à chaque réception.

    Tu ne précises pas comment est déterminée la quantité à ajouter, pourquoi 10 puis 15 ?

    D'autre par ton exemple n'est pas très cohérent, à j+3 tu dis qu'il faut ajouter 15 ,
    pour AWD = 45 c'est Ok mais tu dis que D33 = 10 et D63 = 20, pourquoi pas 15 et 30 ?

    Tu présentes ce que tu reçois, mais tu ne dis pas ce que tu fais des quantités associées à chaque code.
    Si tu les mets sur une feuille, est-que ça donnerait cela ?:
    pour J :
    Nom : J0.jpg
Affichages : 1344
Taille : 6,6 Ko

    et pour J+3
    Nom : J1.jpg
Affichages : 1348
Taille : 6,0 Ko

    Pour faire ça il n'y a besoin que d'une seule variable de type dictionnaire

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je confirme ce qu'a écrit Patrice, que je salue au passage.
    Je précise que ce n'est pas moi qui ai monté ce système, mais c'est celui qui en vigueur dans le service depuis longtemps, et il ne semble pas question d'en changer...
    A un moment donné, si l'on se rend compte que l'on a prit une mauvaise direction, il est peut-être intéressant d'en prendre une autre.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Bon, je pose la question autrement, parce que là, on part dans une direction totalement mauvaise :

    Si je demande à un utilisateur d'entrer une chaine de caractères dans une inputbox, puis-je créer une variable mémoire qui portera comme nom la chaine donnée par l'utilisateur ?

    Exemple :

    Si l'utilisateur écrit "Dudule" dans une inputbox, puis-je à la suite de cette action, créer une variable mémoire qui s'appelle "Dudule" ?

  11. #11
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par lovedann Voir le message
    Bon, je pose la question autrement, parce que là, on part dans une direction totalement mauvaise :
    Si je demande à un utilisateur d'entrer une chaine de caractères dans une inputbox, puis-je créer une variable mémoire qui portera comme nom la chaine donnée par l'utilisateur ?
    Je pense que c'est toi qui n'est pas dans la bonne démarche ...
    Expliques ce que tu voudrais faire exactement par la suite des valeurs calculées (sans parler de VBA, car j'ai bien l'impression que tu n'as pas entièrement acquis la notion de variable).
    Une image de ce que tu reçoit, une image de ce que tu veux obtenir.

    Ce que fournit un inputbox, c'est la valeur d'une variable. On ne peut pas créer de variable à partir d'une variable, par contre on peut associer une valeur (fixe ou variable) à la valeur d'une variable (la valeur saisie). La méthode la plus simple pour associer cette saisie à une valeur variable, c'est d'utiliser un dictionnaire.

  12. #12
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Bon, comme il faut que je bosse sur un autre sujet, je n'ai plus de temps pour celui là..

    Même si cette question n'est pas résolue, je remercie tous ceux qui s'y sont intéressés et qui m'ont répondu.
    Je verrai plus tard pour approfondir cette notion de dictionnaire...

    Bien cordialement à tous et portez vous bien en ces périodes difficiles.

    L.

Discussions similaires

  1. [PHP 5.1] Comment attribuer plusieurs valeurs à un même nom de variable
    Par franckhelin dans le forum Langage
    Réponses: 7
    Dernier message: 18/02/2015, 14h07
  2. Contenu d'une variable devenant lui même une variable
    Par Copyright83 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 14/11/2012, 17h24
  3. Réponses: 6
    Dernier message: 24/05/2011, 11h03
  4. 2 copy et même nom de variable
    Par _Jnie_ dans le forum AS/400
    Réponses: 6
    Dernier message: 27/08/2010, 09h15
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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