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 :

Créations d'objets dans une collection


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut Créations d'objets dans une collection
    Bonjour,
    j'ai créé une classe "Mesh2D" qui contient entre autres une propriété "Points" qui est une collection d'objets de type "Grid". Un objet Grid est un point avec des propriétés "x" et "y" (vous aurez compris qu'il s'agit des coordonnées).

    Je voudrais donc alimenter cette "liste" de points avec les valeurs issues d'une feuille excel.
    Avant de parler du problème voilà donc le 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
     
    Private sub Test()
    Dim rng as Range, i as Long
    Dim maillage as New Mesh2D, P as New Grid
     
    'Récupération de l'adresse des données sur la feuille
    Set rng = RngInput()
     
    For i = 1 To rng.Rows.count
       P.x = rng(i,1)
       P.y = rng(i,2)
       maillage.Points.Add P
    Next i
     
    End Sub
    J'obtiens donc une collection de points dont la taille est correcte mais dont les éléments sont tous identiques au dernier ajouté.

    Si je me limite à une sélection de 3 lignes et que je procède comme ci-dessous, tout fonctionne bien.

    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 sub Test()
    Dim rng as Range, i as Long
    Dim maillage as New Mesh2D
    Dim P1 as New Grid, P2 as New Grid, P3 as New Grid
     
    'Récupération de l'adresse des données sur la feuille
    Set rng = RngInput()
     
       P1.x = rng(1,1)
       P1.y = rng(1,2)
       maillage.Points.Add P1
       P2.x = rng(2,1)
       P2.y = rng(2,2)
       maillage.Points.Add P1
       P3.x = rng(3,1)
       P3.y = rng(3,2)
       maillage.Points.Add P1
     
    End Sub
    Seulement j'ai un nombre d'éléments qui est variable et cette dernière méthode n'est donc pas envisageable. Quelqu'un pourrait-il m'aider ?

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 254
    Par défaut
    Je pense que c'est parce que tu réutilise toujours le même objet P. Tu ne fais que modifier ses propriétés x et y, propriétés que tu modifie pour tous les exemplaires que tu as ajoutés à la collection, puisque c'est toujours un seul et même objet.

    Il faut que tu crée à chaque fois un nouvel objet :
    (je ne garantie pas la syntaxe, je ne maitrise pas VBA)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To rng.Rows.count
       Set P = New Grid
       P.x = rng(i,1)
       P.y = rng(i,2)
       maillage.Points.Add P
    Next i

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Par défaut
    Je te remercie! La syntaxe est correcte et ca fonctionne nickel.
    Je pensais bien que ca venait de là et c'est pour ca que j'avais donné le second exemple.
    Mais je n'avais pas pensé à utiliser le "set".

    Merci!

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

Discussions similaires

  1. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  2. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34
  3. Méthode non acceptée : ajout d'un objet dans une collection
    Par Nzs26 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2007, 19h31
  4. Réccupération du type d'un objet dans une collection
    Par javacien dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 04/11/2007, 18h00
  5. Hibernate + suppression d'objets dans une collection
    Par Saiyan54 dans le forum Hibernate
    Réponses: 2
    Dernier message: 15/12/2006, 15h39

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