Capturer les noms des variables d'un objet

Résolu
inoujk
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014
- 5 mai 2011 à 10:24
foliv57
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
- 5 mai 2011 à 14:43
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

foliv57
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
9
5 mai 2011 à 14:13
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
3
foliv57
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
9
5 mai 2011 à 11:09
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.
0
inoujk
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

5 mai 2011 à 11:58
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 :
0
foliv57
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
9
5 mai 2011 à 13:15
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
inoujk
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

5 mai 2011 à 13:41
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..
0
inoujk
Messages postés
8
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
18 décembre 2014

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

;)
0