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 Discussion :

[VBA] comment modifier les items des collections


Sujet :

VBA

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Points : 98
    Points
    98
    Par défaut [VBA] comment modifier les items des collections
    moi, j'arrrive pas
    qd j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    collect as new collection
    je remplis la collection

    apres qd je fais

    ou set collect.items(1)=x
    ça ne marche jamais,

    il demande un object.
    qn le sait?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    les collections ne permettent pas l'affectation à un élément existant
    mais on peut procéder ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub collect()
    Dim macoll As New Collection
    Dim x As Variant
    x = "hello"
    macoll.Add Item:=x, key:="1"
    MsgBox (macoll(1))
    x = macoll("1") & " world"
    macoll.Remove "1"
    macoll.Add Item:=x, key:="1"
    MsgBox (macoll("1"))
    End Sub
    Elle est pas belle la vie ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 33
    Points
    33
    Par défaut Autre possibilité : Avec une classe
    Bonjour,

    Confronté au même problème quelques années plus tard, voici une autre solution :
    Créer une classe et l'utiliser comme item de la collection.

    Module de classe "MaClasse" contenant (au plus simple) :
    Code d'utilisation :
    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
    Dim MaColl as New Collection
    Dim ItemColl as MaClasse
    '
    For i = 1 to 3
       Set ItemColl = New MaClasse
       ItemColl.Valeur = Str(i)
       MaColl.Add ItemColl [,Key (s'il y a une clé)]
       Set ItemColl = nothing
    Next
    '
    ' Pour modifier le 2ème élément avec une valeur, on peut alors utiliser :
    MaColl(2).Valeur = "3"
    '
    ' ou, pour le modifier avec la valeur du 3ème élément :
    MaColl(2).Valeur = MaColl(3).Valeur
    C'est d'ailleurs aussi TRES pratique pour modifier des items Table() dans une collection.

    Pour modifier un élément de la table dans un item, il faut normalement :
    - copier cet item dans un Array
    - en modifier l'élément voulu
    - supprimer l'item de la collection
    - ajouter l'Array modifié dans la collection.
    Ouf !

    Avec une classe, on obtient ceci :

    Module de classe "MaClasse" contenant (au plus simple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Item
     
    Public Sub Ecrire(Valeur, RangElement)
       Item(RangElement) = Valeur
    End Sub
    Code d'utilisation :
    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
    Dim MaColl as New Collection
    Dim ItemColl as MaClasse
    Dim Table(1 to 3)
    ' 
    For i = 1 to 3
       '
       For j = 1 to UBound(Table)
         Table(j) = Str(i) & "," & Str(j)
       Next
       '
       Set ItemColl = New MaClasse
       ItemColl.Item = Table
       MaColl.Add ItemColl [,Key (s'il y a une clé)]
       Set ItemColl = nothing
       '
    Next
    '
    ' Pour modifier le 2ème élément du 1er item, on peut alors utiliser :
    Call MaColl(1).Ecrire("3,2", 2)
    '
    ' ou bien, pour le modifier avec la valeur du 2ème élément du 3ème item :
    Call MaColl(1).Ecrire(MaColl(3).Item()(2), 2)
    '
    ' ou encore, pour modifier tout l'item :
    MaColl(1).Item = MaColl(3).Item
    L'utilisation des classes fait parfois un peu peur, mais là le gain est impressionnant.


    Nom : L'embouchure du Trieux (22).jpg
Affichages : 7825
Taille : 55,0 Ko

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/05/2007, 21h31
  2. [VBA EXCEL] comment effacer les noms des querytables
    Par rafnt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/10/2006, 17h06
  3. Modifier les noms des champs sous VBA
    Par shadockgreg dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2006, 17h50
  4. Réponses: 5
    Dernier message: 11/08/2006, 16h43
  5. Réponses: 4
    Dernier message: 05/01/2006, 09h01

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