XL 2010 Supprimer Item dictionnaire

cp4

XLDnaute Barbatruc
Bonjour,
Je bloque sur un truc qui est sûrement très simple.
Après avoir alimenter 2 dictionnaires dans une procédure.
VB:
Option Explicit
Dim d1 As Object, d2 As Object

Sub essai_dict()
   Dim i As Byte
   Set d1 = CreateObject("Scripting.Dictionary")
   Set d2 = CreateObject("Scripting.Dictionary")

   For i = 1 To 10
      d1(i) = ""
   Next i

   d2(2) = 2: d2(6) = 6
End Sub

Sub Remove_item()
'ici remove item'
End Sub
Je voudrais via une autre procédure supprimer les items du dictionnaire d2 du dictionnaire d1.
Dans d1, il devrait rester 1,3,4,5,7,8,9,10.
Avec mes remerciements anticipés.
 
Solution
Bonjour.
Vous avez la méthode Keys qui renvoie dans un tableau les clés d'un Dictionary, et la méthode Delete qui permet de supprimer une clé dans un autre Dictionary.
En cochant la référence "Microsoft Scripting Runtime" et en les déclarant As Dictionary plutôt qu'As Object ces méthodes sont suggérées dans une liste dès que vous tapez un point derrière la variable.
Sans compter que ça apporte un gain de performance certes microscopique.
VB:
Option Explicit
Dim d1 As Dictionary, d2 As Dictionary
Sub essai_dict()
   Dim i As Byte
   Set d1 = New Dictionary
   Set d2 = New Dictionary
   For i = 1 To 10
      d1(i) = ""
      Next i
   d2(2) = 2: d2(6) = 6
   MsgBox "d1.Keys :  " & Join(d1.Keys, ", ") _
      & vbLf & "d2.Keys :  " &...

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous avez la méthode Keys qui renvoie dans un tableau les clés d'un Dictionary, et la méthode Delete qui permet de supprimer une clé dans un autre Dictionary.
En cochant la référence "Microsoft Scripting Runtime" et en les déclarant As Dictionary plutôt qu'As Object ces méthodes sont suggérées dans une liste dès que vous tapez un point derrière la variable.
Sans compter que ça apporte un gain de performance certes microscopique.
VB:
Option Explicit
Dim d1 As Dictionary, d2 As Dictionary
Sub essai_dict()
   Dim i As Byte
   Set d1 = New Dictionary
   Set d2 = New Dictionary
   For i = 1 To 10
      d1(i) = ""
      Next i
   d2(2) = 2: d2(6) = 6
   MsgBox "d1.Keys :  " & Join(d1.Keys, ", ") _
      & vbLf & "d2.Keys :  " & Join(d2.Keys, ", ")
   End Sub
Sub Remove_item()
   Dim k
   For Each k In d2.Keys
      d1.Remove k
      Next k
   MsgBox "d1.Keys :  " & Join(d1.Keys, ", ") _
      & vbLf & "d2.Keys :  " & Join(d2.Keys, ", ")
   End Sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour.
Les variables locales ne sont conservée que durant l'exécution de la procédure.
Seules des variables globales sont connues dans tout le module et peuvent donc être utilisées par plusieurs procédures.
Bonjour Dranreb;),

Merci pour ton rapide retour. Pourrai-tu stp, être plus explicite. Car là, je crois que je viens de rater ma vie. En effet, dans ma petite tête, en déclarant les variables en tête du module, sont globales et donc réutilisables dans toutes les procédures du module.

Bonne journée.
 

cp4

XLDnaute Barbatruc
Bonjour.
Vous avez la méthode Keys qui renvoie dans un tableau les clés d'un Dictionary, et la méthode Delete qui permet de supprimer une clé dans un autre Dictionary.
En cochant la référence "Microsoft Scripting Runtime" et en les déclarant As Dictionary plutôt qu'As Object ces méthodes sont suggérées dans une liste dès que vous tapez un point derrière la variable.
Sans compter que ça apporte un gain de performance certes microscopique.
Entretemps tu as modifié ton message. Je suis parvenu avec ceci,
VB:
Option Explicit
Dim d1 As Object, d2 As Object

Sub essai_dict()
   Dim i As Byte
   Set d1 = CreateObject("Scripting.Dictionary")
   Set d2 = CreateObject("Scripting.Dictionary")

   For i = 1 To 10
      d1(i) = ""
   Next i

   d2(2) = 2: d2(6) = 6
End Sub
Sub Remove_item()
   Dim key
   Call essai_dict
   For Each key In d2.keys
      d1.Remove key
   Next
End Sub
on constate un résultat exact dans la fenêtre des variables locales
1672396184898.png

par contre par la suite dans fenêtre espions "hors contexte"
1672396494174.png
 

cp4

XLDnaute Barbatruc
Modifiez les contextes de vos espions.
Bonsoir,

Toutes mes excuses pour mon absence depuis ce matin. je te remercie pour tes conseils et ton code.
Cependant, je n'ai pas compris ce que je dois modifier dans les contextes des espions.
Moi, je sélectionne comme ici d1 et je fais un clic droit et ajouter un espion.
S'il y a une autre méthode, j'avoue que je ne la connais pas.

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tout les deux
je ne vois pas ou est le soucis
charge des dico(essai_dict)
1672478425822.png

suppression des des éléments( clé 2 et 6 du dico2 )dans dico1
1672478534066.png


1672478579003.png


VB:
Option Explicit
Dim d1 As Object, d2 As Object

Sub essai_dict()
Dim i As Byte
    Set d1 = CreateObject("Scripting.Dictionary")
    Set d2 = CreateObject("Scripting.Dictionary")

    For i = 1 To 10
        d1(i) = ""
    Next i

    d2(2) = 2: d2(6) = 6
End Sub

Sub Remove_item()
Dim elem, i
    For Each elem In d2
        d1.Remove elem
    Next
    MsgBox Join(d1.keys)

End Sub
 

Discussions similaires

Réponses
7
Affichages
526

Statistiques des forums

Discussions
314 490
Messages
2 110 139
Membres
110 684
dernier inscrit
kihel