Capturer les noms des variables d'un objet [Résolu]

Signaler
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014
-
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
-
bonjour, j'aimerais lister tous les noms d'un objet pour détecter les valeurs qui changeraient.

je m'explique. j'ai un objet Cube qui a des coordonnées X,Y et Z:

j'ai donc de base :
cube.x = 1
cube.y = 2
cube.z = 3

j'aimerais afficher avec Debug.Print :
cube.x = 1
cube.y = 2
cube.z = 2

mais pas avec :
Debug.Print "cube.x = " & cube.x
Debug.Print "cube.y = " & cube.y
Debug.Print "cube.z = " & cube.z

mais avec une fonction qui boucle sur toutes les valeurs de l'objet.. un truc du genre :
for i = 1 to <nb sous objets de cube>
Debug.Print <nom de la variable> & <valeur de <nom de la variable>>
next i

merci d'avance..

7 réponses

Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
En VB.NET vous pouvez faire ceci
Dim cube As coor

cube.x = 1
cube.y = 2
cube.z = 3

Dim monType As Type = cube.GetType()
For Each fi As FieldInfo In monType.GetFields(BindingFlags.Public Or BindingFlags.Instance)
    Debug.WriteLine(fi.Name & "=" & fi.GetValue(cube).ToString)
Next


Mais cela ne s'applique pas en VBA
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Bonjour,

+ Cube est une structure ou une classe ?
+ x, y, y sont des variables public ou des propriétés ?

Par reflection vous pouvez faire ce que vous demandez.
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

un programme d'exemple :

Private Type coor
  x As Integer
  y As Integer
  z As Integer
End Type

Dim cube As coor

Sub test()
  cube.x = 1
  cube.y = 2
  cube.z = 3
  
  Debug.Print "cube.x = " & cube.x
  Debug.Print "cube.y = " & cube.y
  Debug.Print "cube.z = " & cube.z
End Sub


le but final étant de lister toutes les variables d'un objet capturé sur une autre application et de détecter les changements de valeurs.

une petite capture d'écran de la fenêtre espion, le nombre d'objets rien qu'au premier niveau est considérable :
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Vous avez posté dans la pertie "VB.NET" mais votre exemple est plutot du VB6 ou du VBA.

Dans ces langages, il ne me semble pas que ce soit possible.
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

oui, c'etait bien du vba mais si ca peu aider pour m'apporter une solution, voici le programme en VB.NET 2003 :

Public Structure coor
    Public x As Integer
    Public y As Integer
    Public z As Integer
End Structure

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Code généré par le Concepteur Windows Form "
[...]
#End Region

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cube As coor

        cube.x = 1
        cube.y = 2
        cube.z = 3

        System.Diagnostics.Debug.WriteLine("cube.x = " & cube.x)
        System.Diagnostics.Debug.WriteLine("cube.y = " & cube.y)
        System.Diagnostics.Debug.WriteLine("cube.z = " & cube.z)
    End Sub
End Class


d'avance merci..
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

juste un détail où il fallait rajouter "Reflection." devant "FieldInfo" et "BindingFlags" sous .NET 2003 mais bon, super, ca marche, merci ! :)
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Oui désolé, j'avais fait un import de "Reflection"

;)