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 :

Tableau et Module de Classe [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 97
    Par défaut Tableau et Module de Classe
    Salut les Développezeurs,

    J'ai un problème : J'ai créé un module de classe avec une variable tableau, et je n'arrive pas à l'utiliser dans mon programme.
    Voici le code :

    Module de Classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private rdRsD(1 To 5)   As Byte
     
    Property Get RsD() As Byte()
        RsD = rdRsD
    End Property
    Property Let RsD(RsD() As Byte)
        For i = 1 To 5
            rdRsD(i) = RsD(i)
        Next
    End Property
    Code d'un bouton dans un UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CmdBLancer_Click()
        Dim i       As Byte
        
        For i = 1 To 5
            Randomize (Now)
            Dés.RsD(i) = Round((Rnd * 5) + 1, 0) '<======= C'est ici que çà bug
            ImgDé = ThisWorkbook.Path & "\Dé" & RslD(i) & ".jpg"
            UFDé.Controls("ImDé" & i).Picture = LoadPicture(ImgDé)
        Next
    End Sub
    S'il vous faut plus de précisions, n'hésitez pas...

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour,
    si le tableau est déclaré privé, il n'est accessible que dans le module

    pour le rendre accessible dans le formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim rdRsD(1 To 5)   As Byte
    devrait convenir

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 97
    Par défaut
    Il me semble, Hélas, que les variables déclarées dans un module de classe ne soient accessibles que dans le module de classe, même étant délcarées "Public", afin de respecter la règle d'encapsulage.
    C'est les fonctions "Property Get" et "Property Let" qui permettent d'accéder aux variables du module de classe.

    Je crains que ta solution ne soit éronée.

    En fait, je voudrais remplacer le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Classe.Var1 = Tableau(1)
    Classe.Var2 = Tableau(2)
    Classe.Var3 = Tableau(3)
    Classe.Var4 = Tableau(4)
    Classe.Var5 = Tableau(5)
    Par celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 5
        Classe.Tbl(i) = Tableau(i)
    Next
    Mais çà ne fonctionne pas. Comment faire ? Quelqu'un a-t-il une solution ?

    Mezci

  4. #4
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonjour
    dans le module initialisation du tableau rsd()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Global rsd(5) As Byte
     
    Sub initialisation()
        Randomize (Now)
        For i = 1 To 5
            rsd(i) = Round((Rnd * 5) + 1, 0)
        Next
    End Sub
    et dans le code du bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub CmdLancer_Clic()
     Dim i As Byte
     Call initialisation
     For i = 1 To 5
            imgDé = ThisWorkbook.Path & "\Dé" & rsd(i) & ".jpg"
            ActiveSheet.Cells(i, 2) = imgDé
     Next
     
    End Sub
    si j'ai bien compris.
    le ligne sous imgDé = ... m'a permis de verifier le bon fonctionnement.

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Une piste...

    La classe Classe1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Property Get RsD() As Byte()
      RsD = rdRsD
    End Property
     
    Property Let RsD(ByRef RsD() As Byte)
      rdRsD = RsD
    End Property
    Un test d'utilisation basé sur ton exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Test()
      Dim aTableau() As Byte
      Dim Dés     As New Classe1
      Dim i       As Byte
     
      ReDim aTableau(1 To 5)
      For i = 1 To 5
        Randomize (Now)
        aTableau(i) = Round((Rnd * 5) + 1, 0)
      Next
      Dés.RsD = aTableau
      Debug.Print Dés.RsD()(1)
     
    End Sub
    Je me suis inspiré de ceci:
    http://tissotemmanuel.developpez.com...lasse/#LIV-A-6
    qu'il me semble intéressant de lire jusqu'au bout, entre autres ce qui concerne la Property ListItem.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 97
    Par défaut
    Merci beaucoup pour ces réponses. Je vais les étudier attentivement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Module de classe et évènement
    Par Caroline1 dans le forum Access
    Réponses: 9
    Dernier message: 21/03/2013, 00h23
  2. [Module de classe] Fonction non liée à l'instance?
    Par Caroline1 dans le forum Access
    Réponses: 6
    Dernier message: 07/04/2006, 21h13
  3. Réponses: 4
    Dernier message: 31/03/2006, 16h16
  4. Réponses: 8
    Dernier message: 22/02/2006, 16h09
  5. variables publiques ou module de classe ?
    Par niclalex dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2005, 19h49

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