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 :

Remplir une classe avec un array


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Par défaut Remplir une classe avec un array
    Bonjour,

    Je ne sais pas si mon titre est très explicite, mais je vais expliquer ce que je compte faire.
    J'ai créé une classe qui contient les coordonnées d'un point (Est, Nord, Altitude). J'essaye de créer une propriété accessible en lecture et écriture qui me permette de récupérer directement un tableau de 3 double contenant les coordonnées et la propriété inverse qui permette de compléter ma classe avec un array équivalent.
    Voilà le code de ma 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
    15
    16
    17
    Private mEast As Double
    Private mNorth As Double
    Private mElevation As String
     
    ' Coordinates
    Property Get Coordinates() As Double()
        Dim coord(1 To 3) As Double
        coord(1) = mEast
        coord(2) = mNorth
        coord(3) = mElevation
        Coordinates = coord
    End Property
    Property Let Coordinates(Coordinates() As Double)
        mEast = Coordinates(1)
        mNorth = Coordinates(2)
        mElevation = Coordinates(3)
    End Property
    La propriété Get fonctionnne très bien.
    Par contre la propriété Let ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim pt1 As New cPoint
    Dim toto(1 To 3) As Double
    pt1.Coordinates = toto
    Le code ci-dessus me renvois l'erreur : "Impossible d'affecter à un tableau"

    Dans mes recherches, j'ai cru comprendre qu'il n'est pas possible de passer un tableau en paramètre de Property Let, mais ce n'est pas très clair pour moi. Est-ce quelqu'un me confirme cela ? Sinon quelle est l'erreur ?
    La solution que j'ai trouvé serait d'utiliser un Sub à la place de Let, mais dans ce cas là, je ne peux pas garder le même nom entre Get et Sub, ce qui est dommage pour moi.

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Il convient de ne pas dimensionner le tableau dans sa déclaration, mais par l'intermédiaire de ReDim.

    Essaye ce code :
    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 test()
    Dim pt1 As New cPoint
    Dim toto() As Double, Michou() As Double
     
    ReDim Preserve toto(1 To 3)
    toto(1) = 360
    toto(2) = 400
    toto(3) = 670
    pt1.Coordinates = toto
     
    Michou = pt1.Coordinates
    For i = 1 To 3
       Debug.Print Michou(i)
    Next
    End Sub
    EDIT : Le pourquoi de la "chose"...
    extrait de : http://tissotemmanuel.developpez.com...lasse/#LIV-A-6
    Notez que les dimensions du tableau ne sont pas fixées à la déclaration, ceci parce qu'il est impossible de procéder à des affectations entre tableaux de taille fixe, et que Property Get se termine par une paire de parenthèses indiquant qu'elle renvoie un tableau.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Par défaut
    Ok merci beaucoup !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code class : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private mEast As Double
    Private mNorth As Double
    Private mElevation As String
     
    ' Coordinates
    Public Property Get Coordinates() As Variant
        Coordinates = Array(, mEast, mNorth, mElevation)
    End Property
    Public Property Let Coordinates(value As Variant)
        mEast = value(1)
        mNorth = value(2)
        mElevation = value(3)
    End Property

    Code module : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim a As New Classe1
    a.Coordinates = Array(, 1, 2, "Paris")
    aa = a.Coordinates
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 26
    Par défaut
    Ta solution permet de raccourcir un peu le code effectivement.
    Mais j'y vois 2 inconvénient :
    1- Je n'aime pas les Variant, je préfère autant que possible déclarer les variables précisément.
    2- On récupère un Array de 4 valeurs avec une erreur en 0, je ne veux pas risquer que cela puisse poser des problèmes par la suite.

    Merci quand même pour ta proposition.

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

Discussions similaires

  1. Remplir une bdd avec un array
    Par hugerma dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/12/2014, 08h05
  2. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 09h48
  3. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  4. Réponses: 2
    Dernier message: 26/07/2004, 13h34
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15

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