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 :

Contenu variable dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Mai 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Hobby
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2022
    Messages : 3
    Par défaut Contenu variable dynamique
    Bonjour,

    J'ai essayé de rechercher m'a réponse avant, mais mes recherches n'ont pas été fructueuses... Afin de trouver mes erreurs, je voulais me créer une petite routine qui me liste toutes mes variables et leur contenu d'une module de classe par exemple, et qui puisse s'adapter tout seul si je rajoutes/modifie/supprimes les variables... Voici par exemple les déclarations des variables du module "ModuleClasseImage"

    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
    Private piNumLigne As Integer 'Ligne ou inserer l'image#
    Private piNumCol As Integer  'Colonne ou inserer l'image#
    Private piLargeurImage As Integer 'Largeur de l'image#
    Private piHauteurImage As Integer 'Hauteur de l'image#
    Private piLargeurImageDesiree As Integer 'Largeur de l'image#
    Private piHauteurImageDesiree As Integer 'Hauteur de l'image#
    Private piLargeurImageOrigine As Integer 'Largeur de l'image#
    Private piHauteurImageOrigine As Integer 'Hauteur de l'image#
    Private piLargeurPlage As Integer 'Largeur de la plage de cellule#
    Private piHauteurPlage As Integer 'Hauteur de la plage de cellule#
    Private psOnglet As String 'Onglet ou inserer l'image#
    Private psNomObjetImage As String 'Nom de l'objet image#
    Private psCheminImage As String 'Chemin de l'image#
    Private psNomFichierImage As String 'Nom du fichier Image#
    Private psPrefixeObjetImage As String 'Prefixe du nom de l'objet image#
    Private piMargeHautBas As Integer 'Marge au niveau de la marge haute#
    Private piMargeGaucheDroite As Integer 'Marge au niveau de la marge gauche#
    Private piOrientationImage As Integer 'Orientation de l'image#
    Private piValign As Integer 'Alignement Vertical#
    Private piHalign As Integer 'Alignement Horizontal#
    Je me suis créer cette routine ou j'arrive à récupérer les noms de variables une à une... Mais je n'arrive pas à obtenir leur contenu dynamiquement...

    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
    Public Sub InfoVariables()
        Dim sLignesDeclaration As String
        Dim sRetour As String
        Dim tSplitVar() As String
        Dim i As Integer
        Dim sVar As String
     
        sRetour = ""
        sLignesDeclaration = ThisWorkbook.VBProject.VBComponents("ModuleClasseImage").CodeModule.Lines(1, ThisWorkbook.VBProject.VBComponents("ModuleClasseImage").CodeModule.CountOfDeclarationLines)
        sLignesDeclaration = Replace(sLignesDeclaration, "Private ", "")
        tSplitVar = Split(sLignesDeclaration, "#")
     
        For i = LBound(tSplitVar()) To UBound(tSplitVar())
            sVar = Replace(Left(tSplitVar(i), InStr(tSplitVar(i), " ")), " ", "")
            sRetour = sRetour & sVar & " = " & '???? [La ou j'aimerais voir apparaître le contenu de la variable dont le nom est contenu dans sVar]
        Next
     
        MsgBox "test extraction variables : " & vbCrLf & sRetour
     
    End Sub
    Je pensais avoir fait le plus dur (même si ce n'était pas grandement compliqué), mais je bute sur un truc tout bête qui je l'espère pourra être résolu...

    Merci d'avance à vous

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA
    Inscrit en
    Avril 2017
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur VBA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 122
    Par défaut
    Si je devine bien, tu découvre les classes.

    tu as défini toutes tes variables de classe comme privées, cela signifie que tu as besoin d'accesseur (de moyen d'y accéder = de les utiliser) pour les déclarer, les interroger, etc.
    ex dans ton module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sub setINumLigne (n as integer)
         piNumLigne = n
    end sub
    function getINumLigne as integer
        getINumLigne  = piNumLigne
    end function
    ou mieux que ton module de classe contienne
    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
    Option Explicit
    Private piNumLigne As Integer 'Ligne ou inserer l'image#
    Private piNumCol As Integer  'Colonne ou inserer l'image#
    '...
     
    Public Property Let iNumLigne(n As Integer)   'Ligne ou inserer l'image#
        piNumLigne = n
    End Property
    Public Property Get iNumLigne() As Integer  'Ligne ou inserer l'image#
        iNumLigne = piNumLigne
    End Property
     
    Public Function infovariables() As String
        Dim sTemp As String
        sTemp = sTemp & "piNumLigne = " & piNumLigne & vbCrLf
        sTemp = sTemp & "piNumCol = " & piNumCol & vbCrLf
        sTemp = sTemp & "piLargeurImage = " & piLargeurImage & vbCrLf
        sTemp = sTemp & "piHalign = " & piHalign & vbCrLf
    '...
        infovariables = sTemp
    End Function
    En définissant tes interfaces (les deux property avec get et let) pour chacune de tes variables privées.
    ensuite tu y accèdes ainsi depuis un module normal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub test2ModuleClasse()
    Dim test As New ModuleClasseImage
    test.iNumLigne = 55
     
    MsgBox test.iNumLigne
    'ou
    MsgBox test.infovariables
    End Sub
    test.iNumLigne te permet d'accéder à la valeur de ta variable depuis le code appelant le module de classe. C'est InumLigne qui se charge de communiquer avec pInumLigne ; comme ils sont dans la même classe, il peut voir ta variable privée.



    Si tu ne veux pas t'embêter à créer des accesseurs à tes variables privées de classe, tu les déclares toutes publiques, tu utilises la même fonction infovariables et tu les utilises ainsi :

    module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Public piNumLigne As Integer 'Ligne ou inserer l'image#
    Public piNumCol As Integer  'Colonne ou inserer l'image#
    '...
     
    Public Function infovariables() As String
        Dim sTemp As String
        sTemp = sTemp & "piNumLigne = " & piNumLigne & vbCrLf
        sTemp = sTemp & "piNumCol = " & piNumCol & vbCrLf
        sTemp = sTemp & "piLargeurImage = " & piLargeurImage & vbCrLf
        sTemp = sTemp & "piHalign = " & piHalign & vbCrLf
    '...
        infovariables = sTemp
    End Function
    module classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub testModuleClasse()
    Dim test As New ModuleClasseImage
    Dim test2 As New ModuleClasseImage
    test.piHalign = 12
    test.piNumLigne = 55
     
    MsgBox test.infovariables
     
    test2.piNumLigne = 3
    test2.piLargeurImage = 9
    MsgBox test2.infovariables
     
     
    End Sub
    La différence, c'est que comme tu as tout déclaré en public, tu définies/interroge les valeurs sans devoir écrire du code pour le faire. tu peux alors accéder directement à la variable de classe piNumLigne (j'imagine que le p du début voulait dire private et non public et qu'il te faudra trouver un autre nom).



    Si tu ne souhaites pas que ta classe contienne des accesseurs ou une fonction qui dresse l'état des variables ; si ça ne correspond pas à ton attente, il faudrait plus de code pour voir comment tu utilises tes variables de classe, comment tu les définis et interroge ; pourquoi cela ne te conviens pas.

Discussions similaires

  1. [JSP] Frame a contenu variable
    Par christopheJ dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/03/2010, 12h18
  2. [MySQL] variable dynamique:récupérer le nom, pas le contenu
    Par php_de_travers dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/02/2006, 09h13
  3. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  4. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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