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

variable par référence ou valeur?


Sujet :

VBA Access

  1. #1
    Membre du Club Avatar de docv266
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Points : 54
    Points
    54
    Par défaut variable par référence ou valeur?
    Bonjour,

    J'ai un petit souci :

    J'ai 2 collections c1 et c2.

    Je souhaite à un moment donné, conserver l'une des deux dans l'autre
    -> puis modifier la première
    -> et enfin retrouver ma valeur d'origine
    ->Le truc c'est que je crois que c2 suit les mêmes changements que c1. Donc lors de la réaffectation, c1 ne retrouve pas a valeur d'origine...

    Que faire?

    Merci!

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 887
    Points : 206
    Points
    206
    Par défaut
    Bonjour,
    C'est quoi c1 et c2 ?

  3. #3
    Membre du Club Avatar de docv266
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Points : 54
    Points
    54
    Par défaut
    Ce sont mes deux collections (je l'ai marqué au début).
    En fait je les déclare comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim c1, c2 as New Collection

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Attention, tu tombes dans un piège classique de VB/VBA:
    Dans la déclaration d'une liste de variables, chaque variable a un type distinct de celui des autres variables de la liste.
    Ne pas spécifier un type revient à spécifier le type Variant.

    La déclaration suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim c1, c2 As New Collection
    est équivalente à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim c1 As Variant, c2 as New Collection
    Donc, si tu veux vraiment que c1 soit une collection, tu dois corriger ta déclaration ainsi (où l'opérateur New n'est pas forcément nécessaire):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim c1  As New Collection, c2 as New Collection
    Ensuite...
    Citation Envoyé par docv266 Voir le message
    J'ai 2 collections c1 et c2.

    Je souhaite à un moment donné, conserver l'une des deux dans l'autre
    -> puis modifier la première
    -> et enfin retrouver ma valeur d'origine
    ->
    VB/VBA ne sait pas faire la copie d'un objet dans un autre.
    Il faut programmer la copie, par exemple comme ceci:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c1 As New Collection, c2 As Collection , v As Variant
     
       ... ton code ...
     
     ' et puis tu veux "sauver" c1 en copiant son contenu dans c2
    Set c2 = New Collection
     
    For Each v In c1
        c2.Add v
    Next v

    Enfin, tu veux "récupérer" dans c1 ton objet tel qu'il a été sauvé dans c2...

    Le plus simple est de "jeter" l'objet actuellement référencé par c1 et de faire "pointer" c1 sur l'objet collection créé au moment de la copie.
    Enfin, éventuellement tu peux "libérer" c2 pour qu'il ne référence pas le même objet que c1.
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set c1 = c2
    Set c2 = Nothing

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/03/2009, 12h21
  2. passage par variable par référence.
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/04/2008, 14h02
  3. passer une variable par référence
    Par roblescriso dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 04/04/2008, 17h05
  4. [Tableaux] passage d'une variable par référence
    Par grinder59 dans le forum Langage
    Réponses: 7
    Dernier message: 14/05/2007, 17h52
  5. Retourner des variables par références
    Par dorian53 dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2006, 14h19

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