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 :

Evaluation d'une variable en saisisant son nom


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 38
    Par défaut Evaluation d'une variable en saisisant son nom
    Bonjour,

    Je cherche à coder un module générique à mes macros.
    Je dois pouvoir evaluer certaines constantes (qui n'existent pas systématiquement dans toutes mes macros).

    L'option explicit bloque la compilation car il ne reconnait pas les variables inconnues ce qui est normal, et je veux conserver l'option explicit.

    Avez vous une solution pour évaluer une variable en fonction de son nom?

    Exemple :
    Evaluer("MaVariable") permettrait de retourner la valeur de ma constante MaVariable si elle existe et rien si il n'existe pas dans ma macro.

    J'ai cherché du côté de la fonction Evaluate mais j'ai toujours Type incompatible...

    Merci pour votre aide.

    Bien cordialement,
    batseb

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pourrais-tu être plus clair s'il te plait.

    Même si je ne doute pas que certains t'es compris, je ne vois pas exactement ce que tu veux dire par:
    Je dois pouvoir evaluer certaines constantes (qui n'existent pas systématiquement dans toutes mes macros).
    @+

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    de toute manière en conservant l'instruction Option Explicit il faut donc tout définir …


  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Peut-être qu'en allant fouiller dans Application.VBE.VBProject(s), il est possible d'accéder à la liste des variables.
    Désolé, je n'ai pas le temps d'aller fouiller plus loin, je me contente de fournir cette piste potentielle.

  5. #5
    Membre expérimenté
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Par défaut
    Bonjour

    L'option Explicit oblige à déclarer la variable, pas le type de celle-ci.
    Avec TypeName et VarType on peux savoir le type de la variable (Voir l'aide VBA)
    Après c'est de la gestion de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim my Var
    ...
    If myVar Is Nothing Then...
    Si ce n'est pas ça, retour à la question de Nouveau2.


    Cordialement

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Donc, tu veux que la variable alpha de ta sub générique1() devienne l'équivalent de ta constante (ou ta variable) Alexandre de ta sub noms() et prenne automatiquement sa valeur ?

    Au final tu voudrais quelque chose qui ressemblerait, si on peut dire à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sub noms()
      Alexandre = 10
    end sub
     
    sub générique1()
       alpha = noms.Alexandre
       beta = alpha * alpha 'par exemple
       msgbox (beta)
    end sub
    et tu verrais apparaître 100 dans le msgbox

    Si c'est cela que tu veux, tu peux passer par l'utilisation de paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub noms()
      Alexandre = 10
      générique1(Alexandre)
    end sub
     
    sub générique1(paramètre_quelconque as integer)
       alpha = paramètre
       beta = alpha * alpha 'par exemple
       msgbox (beta)
    end sub

  7. #7
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 38
    Par défaut
    Bonjour à tous,

    Tout d'abord, merci pour votre aide.

    Je précise ma demande : j'ai développé 5 modules communs qui sont utilisés dans près de 150 macros. Chaque module a une constante publique qui identifie la version de celui-ci.

    Mon but est de développer un 6eme module qui récupère la version de chacun des autres modules dans la macro en question pour pouvoir ensuite la comparer avec le référentiel et informer le développeur si ces modules ne sont pas à jour.

    Exemple :
    Macro1
    Module1 - constante Module1Version = "20140821"
    Module2 - constante Module2Version = "20140801"

    Macro2
    Module1 - constante Module1Version = "20140701"
    Pas de module 2

    Un module 3 doit lister le module 1 et 2 et tester la valeur de chacune des constantes.
    Un option explicit me bloquerait dans la macro2 car la constante du module2 n'existe pas.
    Je connais la liste des modules à analyser.
    Je connais la liste des constantes à tester.

    Merci pour vos retours.

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    je comprends toujours pas ton besoin d'évaluation ...

    montre nous le code que tu envisage tu envisage utiliser avec une fonction fictive EvalueVariable .. pour comprendre l'utilité de cette évaluation...

  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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Peut--être qu'avec une variable tableau et les variables énumérées tu pourrais trouver ton bonheur
    Exemple
    Code à placer en tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Public NumVersion(3) As Double
    Public Enum Procedure
     Application = 0
     Module_1 = 1
     Module_2 = 2
     Module_3 = 3
    End Enum
    Code de la procédure de démarrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Main()
     NumVersion(Procedure.Application) = 3.2
     Module1
    End Sub
    Code à placer dans les modules concernés (Ici on teste la valeur entière du n° de version)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Module1()
     NumVersion(Procedure.Module_1) = 2.3
     If Int(NumVersion(Procedure.Module_1)) < Int(NumVersion(Procedure.Application)) Then
      MsgBox "Version de l'application " & NumVersion(Procedure.Application) & " supérieure au module1 "
     End If
    End Sub
    [EDIT]
    Sinon tu seras obligé de passer par WorkBook.VBProject.VBComponents mais tu vas construire une usine à gaz.
    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 actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 38
    Par défaut
    Re,

    Merci Philippe, la solution tableau est une piste très intéressante mais je veux pousser la discussion pour savoir si on peut travailler directement avec les constantes des modules. De plus, les modules étant déjà en place sur les 150 macros, je souhaite trouver une solution qui fonctionne dès maintenant sans avoir à recompiler les 150 macros avec les nouveaux modules.

    bbil, je vais te montrer en VBA ce que je souhaite obtenir :

    Module1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Const Module1Version = "20140821001" as string
    Module2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Const Module2Version = "20140701001" as string
    Module Générique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private function GetVersion(ByVal Module as string) as string 
    Select case Ucase(Module)
    Case "MODULE1" : GetVersion = Module1Version 
    Case "MODULE2" : GetVersion = Module2Version 
    Case else : GetVersion = ""
    End select
    end function
    Dans le cas où ma macro ne contiendrait que le module 1 (et pas le module2), la compilation plante à cause de Module2Version non déclaré.
    Je cherche donc si il y a une solution avec une fonction qui s'appellerait EvaluerVariable qui permettrait d'évaluer la valeur d'une variable en fonction de son nom.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private function GetVersion(ByVal Module as string) as string 
    Select case Ucase(Module)
    Case "MODULE1" : GetVersion = EvaluerVariable("Module1Version")
    Case "MODULE2" : GetVersion = EvaluerVariable("Module2Version") 
    Case else : GetVersion = ""
    End select
    end function
    Est-ce plus clair?

    Cordialement,
    Sébastien

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/12/2008, 18h45
  2. [EVAL] utiliser la valeur d'une variable à partir de son nom
    Par Julien Dufour dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/04/2008, 13h15
  3. Récuperer la valeur d'une variable à partir de son nom
    Par Etanne dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2007, 18h04
  4. Récupérer une variable à partir de son nom ...
    Par CynO dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/10/2005, 16h59

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