Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Récupérer le nom d'une variable

  • Initiateur de la discussion Initiateur de la discussion dionys0s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dionys0s

XLDnaute Impliqué
Bonjour le forum

c'est une question peut-être un peu farfelue, mais j'aimerais savoir s'il est possible de récupérer le nom d'une variable. Par exemple :

VB:
Dim MaVar As Integer

MaVar = 15

Msgbox FonctionNomVar(MaVar)

Et le MsgBox afficherait non pas la valeur de la variable ("15"), mais le nom de la variable ("MaVar")

D'avance merci pour votre aide 🙂
 
Re : Récupérer le nom d'une variable

bonjour,

salut à toi Caillou, mais ce n'est pas ce que désire notre ami !?

sinon c'est totalement inutile d'avoir MaVar$="xyz" et d'afficher le nom: Msgbox"MaVar$"
ce qu'il souhaite c'est de savoir quelle variable contient "xyz"
c'est à dire inversement de la valeur avoir le nom !

perso je ne pense pas que cela existe aussi simplement,
mais comme rien n'est impossible, voir par ici:

VBA Récupérer le nom d'une variable [Résolu]
 
Dernière édition:
Re : Récupérer le nom d'une variable

Re,

Effectivement, ce topic de developpez.net a l'air de suggérer que c'est possible, mais ça parle de module de classe, et je ne capte rien du tout à ça.

Quelqu'un aurait-il par chance des éclaircissements à me donner ?

Bonne journée à toutes et à tous !
 
Dernière édition:
Re : Récupérer le nom d'une variable

Bonjour dionys0s, salut Caillou, Roland_M,

C'est bien le genre de problème à coucher dehors.

Mais vous ne pourrez pas dire que cette solution ne résout pas le problème :

Code:
Option Explicit
Dim Module 'mémorise

Sub MaMacro()
Dim MaVar
Module = "Module1" 'à adapter
Cherche MaVar 'n'importe quelle variable
End Sub

Sub Cherche(x)
Dim i&, t$
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then t = Mid(t, 9): Exit For
  Next
End With
MsgBox t 'pour tester
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Récupérer le nom d'une variable

Re,

On peut rechercher simultanément plusieurs variables :

Code:
Option Explicit
Dim Module, i&, a$() 'mémorise

Sub MaMacro()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
Cherche MaVar
Cherche tata
Cherche titi
Cherche toto
MsgBox Join(a, vbLf), , "Variables"
End Sub

Sub Cherche(x)
Dim t$, n&
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then _
      ReDim Preserve a(n): a(n) = Mid(t, 9): n = n + 1
  Next
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : Récupérer le nom d'une variable

Re,
bonjour Job

Effectivement.
Malheureusement, cette méthode implique que je ne fasse cette recherche qu'une seule fois par module, et cela implique une manière extrêmement précise de coder la ligne.

VB:
Option Explicit

Sub MaMacro1()

    Dim MaVar1 As Variant

    MsgBox NomVar(MaVar1, "Module1")

End Sub

Sub MaMacro2()

    Dim MaVar2 As Variant

    MsgBox NomVar(MaVar2, "Module1")

End Sub

Public Function NomVar(ByVal UneVar As Variant, ByVal Modul As String) As String

    Dim Lign As Long, LignCod As String, Pos1 As Integer, Pos2 As Integer

    With ThisWorkbook.VBProject.VBComponents(Modul).CodeModule
        For Lign = 1 To .CountOfLines
            LignCod = .Lines(Lign, 1)
            If InStr(1, LignCod, "NomVar(") > 0 Then
                Pos1 = InStr(1, LignCod, "NomVar(") + 7
                Pos2 = InStr(1, LignCod, ",")
                NomVar = Mid(LignCod, Pos1, Pos2 - Pos1): Exit Function
            End If
        Next Lign
    End With

End Function

L'exécution de macro1 me renverra la valeur désirée, mais l'exécution de macro2 me reverra MaVar1, au lieu de MaVar2. Je reste donc bloqué.
 

Pièces jointes

Re : Récupérer le nom d'une variable

Malheureusement, cette méthode implique que je ne fasse cette recherche qu'une seule fois par module, et cela implique une manière extrêmement précise de coder la ligne.

Pas d"accord, il suffit juste que "Cherche" soit toujours en début de ligne de code.

Et vous semblez ne pas avoir vu mon post #7.

A+
 
Re : Récupérer le nom d'une variable

j'avais vu le post #7, mais je ne vois pas comment je pourrais récupérer "tata" et uniquement "tata".

Vous plaisantez ou vous avez besoin de lunettes ?

Code:
Option Explicit
Dim Module, i&, a$() 'mémorise

Sub MaMacro()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
Cherche tata
MsgBox Join(a, vbLf), , "Variables"
End Sub

Sub Cherche(x)
Dim t$, n&
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then _
      ReDim Preserve a(n): a(n) = Mid(t, 9): n = n + 1
  Next
End With
End Sub
A+
 
Re : Récupérer le nom d'une variable

Re,

J'avais bien vu. J'ai du me faire mal comprendre...

Si je modifie ton code comme ceci, le résultat ne me convient pas.

VB:
Option Explicit
Dim Module, i&, a$() 'mémorise

Sub MaMacro()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
Cherche tata
MsgBox Join(a, vbLf), , "Variables"

Cherche MaVar
MsgBox Join(a, vbLf), , "Variables"

End Sub

Sub Cherche(x)
Dim t$, n&
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then _
      ReDim Preserve a(n): a(n) = Mid(t, 9): n = n + 1
  Next
End With
End Sub

Concrètement, je veux pouvoir récupérer le nom de déclaration de n'importe quelle variable, quel que soit l'ordre d'appel.
Je sais c'est exigeant, mais bon, si c'est pas possible, on va pas s'acharner hein.
 
Re : Récupérer le nom d'une variable

Re,

Si vous voulez traiter les variables une par une, utilisez a(0) a(1) a(2) a(3) du fichier (2).

Sinon vous pouvez aussi utiliser la variable mémorisée t :

Code:
Option Explicit
Dim Module$, i&, t$ 'mémorise

Sub MaMacro()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
Cherche MaVar
MsgBox t
Cherche tata
MsgBox t
Cherche titi
MsgBox t
Cherche toto
MsgBox t
End Sub

Sub Cherche(x)
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then t = Mid(t, 9): Exit For
  Next
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

Re : Récupérer le nom d'une variable

Re,

en fait, je souhaite que cette sub ou fonction soit générique.

Du coup je pourrais très bien me retrouver à devoir l'utiliser comme ceci :

VB:
Option Explicit
Dim Module$, i&, t$ 'mémorise

Sub MaMacro1()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
Cherche MaVar
MsgBox t

Cherche titi
MsgBox t

End Sub

Sub MaMacro2()
Dim MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0

Cherche tata
MsgBox t

Cherche toto
MsgBox t
End Sub

Sub Cherche(x)
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    If t Like "Cherche*" Then t = Mid(t, 9): Exit For
  Next
End With
End Sub

et là, du coup, ça ne marche plus pour MaMacro2.
 

Pièces jointes

Re : Récupérer le nom d'une variable

Re,

Notez qu'on peut utiliser le même principe avec une fonction VBA :

Code:
Option Explicit
Dim Module$, i& 'mémorise

Function Nom(x)
Dim t$, p As Byte
With ThisWorkbook.VBProject.VBComponents(Module).CodeModule
  For i = i + 1 To .CountOfLines
    t = .Lines(i, 1)
    p = InStr(t, "(") + 1
    If t Like "*Nom(*)*" And InStr(t, "Function") = 0 Then _
      Nom = Mid(t, p, InStr(p, t, ")") - p): Exit For
  Next
End With
End Function

Sub MaMacro()
Dim t$, MaVar, tata, titi, toto
Module = "Module1" 'à adapter
i = 0
t = Nom(MaVar)
MsgBox t, , "Nom"
MsgBox Nom(tata), , "Nom"
MsgBox Nom(titi), , "Nom"
MsgBox Nom(toto), , "Nom"
End Sub
Nouveau fichier joint.

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
408
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…