XL 2010 Supprimer Item dictionnaire

  • Initiateur de la discussion Initiateur de la discussion cp4
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 :  " &...
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:
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.
 
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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
40
Affichages
2 K
Retour