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

VBA Access Discussion :

Explorateur d'Objets VBA comment Instancier ?


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut Explorateur d'Objets VBA comment Instancier ?
    Bonjour,

    J'ai cherché sur Internet et le forum, je n'ai rien trouvé:

    J'aimerai Imprimer les membres d'un Objet Utilisateur, aussi bien ses propriétés que ses méthodes. En PHP il y a la fonction print_r(), y'a-t-il une fonction similaire en VBA ?

    Par ailleurs j'ai vu une chose similaire qui est "Explorateur d'Objets" dans les fenêtres "Microsoft Visual Basic", y'a-t-il un moyen pour l'instancier en Code VBA comme suit ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim xobj as object
    set xobj = New ObjectBrowser
    ...
    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut
    Désolé jpcheck,

    J'aimerai exlporer en Code VBA une classe utilisateurs, non une classe définie par Microsoft, donc normalement .Properties n'existe pas.

    Tu parles de GetOpenFileName, qui est probalement exlporateur Windows pour lire les noms de fichier, mais nullement adapté pour exlporer les instances des objets de classes utilisateurs.

    Fenêtre d'Explorateur d'Objets obtenu par:

    \\Microsoft Visual Basic\Affichage\Explorateur d'objets F2
    Pour être plus clair, Par exemple simple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Type clsMyClassShowOptions
    '
    ' VCD personalize:
    '
      lAddress2Usage As Long
      lVcdFormat As Long
    End Type
     
    global goSO as clsMyClassShowOptions
    Le type clsMyClassShowOptions contient .lAddress2Usage et .lVcdFormat, j'aimerai imprimer les valeurs des membres de la variable goSO sans référer à leur nom.

    Pour les programmeurs PHP, on a
    print_r $goSO;

    qui sortira quelque chose comme cà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $goSO => {
      lAddress2Usage => 1
      lVcdFormat => 2
    }

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 110
    Par défaut
    Bonjour Jacou,

    La POO avec VBA n'en a que le nom.

    Regarde ce sujet (un peu long) mais instructif.

    http://www.developpez.net/forums/sho...d.php?t=387202

    Espérant que tu y trouveras ton bonheur.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut
    Merci loufab de ton lien,

    C'est bien argumenté dans le fil de discussion, POO VBA est incomplète.

    Or ici j'aimerais seulement instancier une classe "Exlorateur d'objets" déjà existante.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Citation Envoyé par jacou Voir le message
    Merci loufab de ton lien,

    C'est bien argumenté dans le fil de discussion, POO VBA est incomplète.

    Or ici j'aimerais seulement instancier une classe "Exlorateur d'objets" déjà existante.
    Tu souhaites lister les propriétés d'un objet instancié d'une classe perso, ou bien lister les propriétés et méthodes d'une classe perso?

    DEuxième solution: Personnellement, je ne pense pas que cela existe en VBA.

    Si l'objet personnalisé est créé en VBA, il y a un moyen (tordu, je reconnais...) en scannant les lignes du module de classe via vbcomponents à la recherche des propriétés et méthodes de l'objet, soit pour placer la première ligne de chaque propriété ou méthode "en brut", soit pour la traiter avec plus de "subtilité" de code pour créer un outil plus pro...

    [EDIT] Exemple pour EXCEL
    Avec la classe suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Private mNom As String
     
    Property Get Nom() As String
        Nom = mNom
    End Property
     
    Property Let Nom(Nom As String)
        mNom = Nom
    End Property
     
    Property Get Prenom() As String
        mprenom = Prenom
    End Property
     
    Property Let Prenom(Prenom As String)
        mprenom = Prenom
    End Property
     
    Sub Init()
     
    End Sub
     
    Function RetournerValeur(Par1 As String) As Boolean
     
    End Function
    appelée MaClasse,
    le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub DocumenterClasse()
        Dim Ligne As String
        Dim i As Integer
        Dim NbreLignes As Integer
        Dim ChaineLigne As String
     
        NbreLignes = ThisWorkbook.VBProject.VBComponents("maclasse").CodeModule.CountOfLines
        For i = 1 To NbreLignes
            ChaineLigne = ThisWorkbook.VBProject.VBComponents("maclasse").CodeModule.Lines(i, 1)
            If Left(ChaineLigne, 3) = "Sub" Then Debug.Print ChaineLigne
            If Left(ChaineLigne, 12) = "Property Get" Then Debug.Print ChaineLigne
            If Left(ChaineLigne, 12) = "Property Let" Then Debug.Print ChaineLigne
            If Left(ChaineLigne, 8) = "Function" Then Debug.Print ChaineLigne
        Next i
    End Sub
    donnerait
    Property Get Nom() As String
    Property Let Nom(Nom As String)
    Property Get Prenom() As String
    Property Let Prenom(Prenom As String)
    Sub Init()
    Function RetournerValeur(Par1 As String) As Boolean
    dans la fenêtre d'exécution.
    [/EDIT]
    [EDIT 2]
    Avec Access, l'instanciation du vbcomponents est un peu différente, il faut modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ThisWorkbook.VBProject
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.VBE.VBProjects("MonProjet")
    ou MonProjet représente le nom du projet VBA(!!) tel que renseigné dans la fenêtre des propriétés du projet.
    [/EDIT 2]

    Cela pourrait-il convenir?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut
    Merci Pierre,

    C'est un gros progrès qui donne la possibilité de lister les noms de propriétés et méthodes. Je pense qu'à priori, il me convient. Puisqu'il est tard, je ne vais pas essyer cette nuit en Access, certainement demain soir. Nous préparons à déployer la Noël 2008, donc nous serons très occupés pendant les journées de travail.

    Bien Amicalement.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 189
    Par défaut
    J'ai repris ton code, en tenant en compte des lignes de continuation et des espaces au début d'une ligne de code, j'ai ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    '============= FNC001 modDocumentClass =================================
    ' functions:                                                           =
    '   (01) document a class                                              =
    '=======================================================================
    ' method description:
    '   This function documents a class.
    ' created  09-NOV-2007
    ' modified 09-NOV-2007
    ' uses:
    '   Left(),Right(),Trim()
    '
    '   Application::()
    ' inputs:
    '   strClassName: class module name
    ' outputs:
    '   modDocumentClass: returned function value
    ' locals:
    '   i: counter
    '   nLines: count of lines
    '
    '   b2Continue: key indicating if to continue a line
    '   bTodo: todo key
    '
    '   str1: string
    '   strLine: string of a code line
    '   strret: return string
    '
    '   xobj: object
    ' notes:
    '   Source:
    '     http://www.developpez.net/forums/member.php?u=27262
    '     M. Pierre Fauconnier.
    '
    '=======================================================================
    Function modDocumentClass(strClassName As String) As String
    '
    ' global variables:
    '
     
    '
    ' local variables:
    '
      Dim i As Long, nLines As Long
    '
      Dim b2Continue As Boolean, bTodo As Boolean
    '
      Dim str1 As String, strLine As String, strret As String
    '
      Dim xobj As Object
    '
    ' function body:
    '
      str1 = Application.GetOption("Project Name")
      Set xobj = _
        Application.VBE.VBProjects(str1).VBComponents(strClassName)
      nLines = xobj.CodeModule.CountOfLines
      b2Continue = False
      strret = ""
    '
      For i = 1 To nLines
    '
        strLine = xobj.CodeModule.Lines(i, 1)
        str1 = Trim(strLine)
    '
        If (Left(str1, 3)) = "Sub" Then
          bTodo = True
        ElseIf (Left(str1, 12) = "Property Get") Then
          bTodo = True
        ElseIf (Left(str1, 12) = "Property Let") Then
          bTodo = True
        ElseIf (Left(str1, 8) = "Function") Then
          bTodo = True
        ElseIf (Left(str1, 15) = "Public Function") Then
          bTodo = True
        ElseIf (b2Continue) Then
          bTodo = True
        Else
          bTodo = False
        End If
    '
        If (bTodo) Then
          strret = strret & strLine & vbCrLf
          b2Continue = (Right(str1, 1) = "_")
        End If
    '
      Next
    '
      Set xobj = Nothing
    '
    ' set function value:
    '
      modDocumentClass = strret
    '
    ' exit the function:
    '
    End Function
    Et appeler,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print modDocumentClass("clsDateTime")
    Il me sort queque chose comme ça:

    Property Get MyDate() As Date
    Property Let MyDate(dat2Set As Date)
    Public Function nowDateTime() As Date
    Public Function datGetNearestWeekdayYearDate(datEntry As Date, _
    lYear As Long, lWeekDay As Long) As Date
    ...
    Je n'ai pas encore atteint mon but qui est d'afficher les valeurs de propriétés.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/07/2010, 16h25
  2. Réponses: 4
    Dernier message: 24/07/2009, 00h38
  3. [POO] Objet json , comment instancier un nouvel objet ?
    Par le_chomeur dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 29/10/2008, 11h19
  4. Réponses: 5
    Dernier message: 23/02/2006, 15h18
  5. Réponses: 6
    Dernier message: 18/01/2006, 17h26

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