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 :

Dictionnaire add en valeur VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Par défaut Dictionnaire add en valeur VBA
    Bonjour,

    Je fais encore appel à vos connaissances. Merci d'avance.

    Je souhaite savoir s'il est possible d'ajouter à un dictionnaire (1) un dictionnaire (2). Mais une fois le dictionnaire (2) ajouté toute modification de celui-ci (clé/valeur) n’entraîne pas de modification dans celui ajouté au dictionnaire (1).

    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
    Sub dico()
     
    Dim dico1 As New Scripting.Dictionary
    Dim dico2 As New Scripting.Dictionary
     
    dico2.Add 1, 25
    dico2.Add 2, 26
    dico2.Add 3, 27
     
    MsgBox dico2(2) 'affiche 26
     
    dico1.Add 1, dico2
     
    MsgBox dico1(1)(2) 'affiche 26
     
    dico2.RemoveAll
     
    MsgBox dico1(1)(2) 'affiche rien mais je souhaite qu'il continue à afficher 26
     
    End Sub
    J'espère avoir été assez clair et que mon idée n'est pas trop farfelue.

    Bonne journée,

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Je ne suis pas très à l'aise avec les dictionnaires, mais ne pourrais-tu pas faire une bouclé for sur l'ensemble des éléments du dictionnaire 2 et les ajouter au dictionnaire 1?

    Ou tu fais une copie de ton dictionnaire (dico3) avant de l'ajouter dans dico1. Mais j'espère que tu n'as pas plus de 2 dicos à ce moment-là

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 20
    Par défaut
    @Riaolle,

    Pour ta première solution, si j'ajoute chaque élément du dictionnaire 2 à mon dictionnaire 1 cela va créer autant de clé que d’élément présent dans mon dictionnaire 2.

    Pour ta deuxième solution, j'y avais pensé mais je me retrouve avec la même problématique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set dico3 = dico2 'fait une copie du dico2
    Le fait de modifier le dico2 modifie le dico3

    @dysorthographie une nouvelle fois merci pour ton aide !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si dico2 reste lié à dico1 alors dico2.RemoveAll entraîne le reset de dico1(1).dico2! il faut couper le lien Nothing

    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
    26
    27
    28
    29
    SSub dico()
    Dim dico1 As Object, dico2 As Object ' Scripting.Dictionary
    Set dico1 = CreateObject("Scripting.Dictionary"): Set dico2 = CreateObject("Scripting.Dictionary")
    dico2.Add 1, 25
    dico2.Add 2, 26
    dico2.Add 3, 27
    MsgBox dico2(2) 'affiche 26
    dico1.Add 1, dico2
    MsgBox dico1(1)(2) 'affiche 26
     
     
     Set dico2 = Nothing
     
    MsgBox dico1(1)(2) 'affiche rien mais je souhaite qu'il continue à afficher 26
     Set dico2 = CreateObject("Scripting.Dictionary")
     dico2.Add 1, 55
    dico2.Add 2, 56
    dico2.Add 3, 57
    dico1.Add 2, dico2
     
     
    Set dico2 = Nothing
     
     
    MsgBox dico1(2)(2) 'affiche 56
    dico1.Add 3, CreateObject("Scripting.Dictionary")
    dico1(3)(1) = 100: dico1(3)(2) = 200: dico1(3)(3) = 300
    MsgBox dico1(3)(2) 'affiche 200
    End Sub
    Dernière modification par Invité ; 04/04/2017 à 12h27.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dico1.Add 3, CreateObject("Scripting.Dictionary")
    dico1(3)(1) = 100: dico1(3)(2) = 200: dico1(3)(3) = 300
     MsgBox dico1(3)(2)'affiche 200

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

Discussions similaires

  1. Problème de copier/coller de valeur VBA
    Par astridlet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2010, 11h31
  2. recherche valeur VBA
    Par coco1982 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2009, 16h32
  3. Valeur VBA dans un état
    Par parab dans le forum VBA Access
    Réponses: 13
    Dernier message: 20/01/2009, 09h38
  4. recupérer valeur vba
    Par ferronimus dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/07/2007, 16h00
  5. Problème valeurs[VBA]
    Par Yanmeunier dans le forum Access
    Réponses: 1
    Dernier message: 18/05/2006, 15h17

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