[RESOLU] Différence entre : Item et Add avec CreateObject("Scripting.Dictionary")

laurent950

XLDnaute Accro
Bonsoir le fils et le forum,

je découvre vos module VBA (Dictionnaire)

‘ Si je crée un dictionnaire MONDICO (comme dans l’exemple)

Set Mondico = CreateObject("Scripting.Dictionary") (soit Mondico le dictionaire crée)

‘ =====================================================

Pour remplis ce dictionnaire Qu’elle est la différence entre : Item et Add

- Mondico.Item(Cells(1,1) & Cells (1, 2)) = Mondico .Item(Cells(1,1) & Cells (1, 2))

- Mondico.Add Cells(1,1) & Cells (1, 2)) , Cells(1,1) & Cells (1, 2))

‘ =====================================================

Pour vider ce dictionnaire Qu’elle est la différence entre : Removeall et Nothing

- Mondico.Removeall

- set Mondico = Nothing

‘ =====================================================
.
Merci par avance

Laurent
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Différence entre : Item et Add avec CreateObject("Scripting.Dictionary")

Bonjour

ton dico ne s'appelle pas d mais Mondico dans ton exemple (set...
Si tu veux créer un dictionnaire d il faut écrire set D=createObjects...
Item c'est élément du dictionnaire.
Je te conseille de lire un peu sur ce sujet avant de coder.
Tu trouveras des exemples sur le site de Jacques Boisgontier ainsi qu'ici
Recherche | www.excelabo.net

On peut remplir un dictionnaire élément par élément ou en faisant une boucle par exemple sur une colonne de la feuille. les dicos sont particulièrement utiles et rapides pour créer une liste d'éléments uniques
Tu peux vider le dictionnaire (removeall) ou supprimer le dictionnaire (nothing)
Tu peux surtout trier ses éléments beaucoup plus rapidement que si tu apssais par leur écriture dans une feuille temporaire.
 

laurent950

XLDnaute Accro
Re : Différence entre : Item et Add avec CreateObject("Scripting.Dictionary")

Bonsoir Misange,

Merci pour vous conseilles que je trouve très enrichissant, j’ai fait le correctif et en faite le dictionnaire crée n’est pas (d) mais (Mondico) j’avais mal écrit dans mon poste.

J’ai compris le principe est je vous remercie pour les liens :

J’ai fait un test avec une boucle qui ne donne pas les mêmes choses :

Sub test1()
' Je fais une boucle sur la colonne A sur les lignes A1:A25
' J’ajoute au dictionnaire = (c & c)
' c correspond à 1 pour la première cellule de la boucle crée
' J'ai crée c & c (pour les ajouts du dictionnaire) ce qui
' Donne pour la première cellule A1 pour c & c (11) est la je ne comprends pas ?
' La boucle trouve bien les doublons mais c'est la que je bloque ?
' Comment il range dans le dictionnaire ? c & c (il l'interprète comment ?)
' 11 ou autrement .... ? (Autrement car il sait que ce n'est pas 11 donc pas un doublon ?)
' Se qui me ramène au deuxièmes test2 (qui lui ne fonctionne pas du tous)
' C'est à dire je rempli le dictionnaire avec juste c (la premier cellule de la boucle)
' C’est à dire c = 1

' ce code fonctionne Mais esque c'est vraiment fiable ?....... !!!

' ============================================================

F = Range("A65536").End(xlUp).Row
Set mondico = CreateObject("Scripting.Dictionary")
mondico.RemoveAll

For Each c In Range(Cells(1, 1), Cells(F, 1))

If Not mondico.Exists(c & c) Then
mondico.Add c & c, c & c
Else
c.Interior.ColorIndex = 38
End If
Next c
Set mondico = Nothing

End Sub

'==========================================================

Sub test2()
' C'est le deuxièmes test avec juste le remplissage de la cellule de la boucle
' C’est a dire c pour remplissage dans le dico.
' Ne Fonctionne pas ?

F = Range("A65536").End(xlUp).Row
Set mondico = CreateObject("Scripting.Dictionary")
mondico.RemoveAll

For Each c In Range(Cells(1, 1), Cells(F, 1))

If Not mondico.Exists(c) Then
mondico.Add c, c
Else
c.Interior.ColorIndex = 38
End If
Next c
Set mondico = Nothing

End Sub

' ===========================================================

Je vous remercie pour votre aide je pense que cela est la clef d’une de mes interrogations qui me feront progresser par la suite pour utiliser les dictionnaires a bonne escient.

Merci Laurent
 

Pièces jointes

  • Dictionnaire.xls
    40 KB · Affichages: 169
  • Dictionnaire.xls
    40 KB · Affichages: 186
  • Dictionnaire.xls
    40 KB · Affichages: 179
Dernière édition:

laurent950

XLDnaute Accro
Re : Différence entre : Item et Add avec CreateObject("Scripting.Dictionary")

Bonjour Monsieur Boisgontier, et Dranreb ainsi que Misange.

Je vous remercie pour votre aide est votre exemple très complet Monsieur Boisgontier, j’ai enfin compris la structure du code CreateObject("Scripting.Dictionary") et ainsi corrigé mes erreurs.

J’ai quelques questions pour mon perfectionnement :
Lors du remplissage du dictionnaire suivant l’exemple de votre code.

1) Remplissage du dictionnaire uniquement avec la Key : (le code s’écrit comme cela)
- mondico(c.Value) = mondico(c.Value)

c.value (uniquement la valeur de la cellule)

2) Remplissage du dictionnaire avec la Key et l’Item : (le code s’écrit comme cela)
- mondico.Item(c.Value) = mondico.Item(c.Value) + 1

Ici ont calcule l’Item associer a la clef donc = = = >> .Item(c.value) + 1
Donc + 1 est associer a .Item ( c’est un compteur qui compte et incremente pour chaque clef le nombre d’Item qui lui est associer)

3) pour retrouver les doublons c’est simple de les connaître car :
Si mondico.Item(c.Value) supérieur à 1 (faire l’instruction)
Ici = c.value (exemple le nombre 4 = c.value) à 2 Item (donc c’est un doublon de la lsite)

4) Ce que je sais pas c’est pourquoi pour coller les valeur dans Excel ont utilise Transpose ?
[C2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[D2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)

Soit C2 = la cellule
Resize parceque associé a Count qui est ici 1 (pour pas avoir de doublons) donc tableau plus court que celui d’origine.

Mais Transpose je ne sais pas ?
Application.Transpose(mondico.keys)
Ont peux écrie comme cela à la place de Application.Transpose ?
mondico.keys

J’ai bien analysé avant de répondre (j’espères pas n’importe quoi)

Je vous remercie

Laurent
 
Dernière édition:
G

Guest

Guest
Re : Différence entre : Item et Add avec CreateObject("Scripting.Dictionary")

Bonjour à tous,

@Laurent, parce que le tableau Keys est un tableau à 1 dimension. Pour excel il représente un tableau en ligne(1 ligne de valeurs). Application.Transpose le transposera en colonne.

A+
 

Misange

XLDnaute Barbatruc
Re : [RESOLU] Différence entre : Item et Add avec CreateObject("Scripting.Dictionary"

Bonjour

J'ai mis ce matin en ligne un tuto sur l'objet scripting dictionary. Mais maintenant que tu as les idées claires ça ne devrait que te permettre de vérifier que tu as tout bien compris :)
Ce lien n'existe plus
 

laurent950

XLDnaute Accro
Re : [RESOLU] Différence entre : Item et Add avec CreateObject("Scripting.Dictionary"

Bonjour Misange.

Je vous remercie pour ce Tuto Fantastique, j’avais les idées claires mais encore avec des interrogations ce qui n’est plus le cas suite à votre Tuto est explication très précise.

J’ai compris l’intérêt du Dictionary et je serais l’ingérer à mes module, d’ailleurs je vais faire des correctif des demain suite à cela.

J’ai bien compris le principe d’un array et maintenant de Dictionary.

J’ai compris la variable tableau (Fixe) et aussi (Variables) avec la fonction ReDim est alimenter celui-ci. Cependant Je n’ai pas compris la manière de le redimensionnés avec la fonction Redim Preserve, c'est-à-dire ajouter une dimension supplémentaire au tableau existant sans perdre les données précédente. ReDim Preserve.

Je vais faire un poste a se sujet avec un exemple concret est détailler. Avec pour idée :

1) Remplir un tableau variables (x lignes, sur 3 colonnes) ( de type variant) avec une boucle de remplissage
- une double boucle de remplissage :
- ligne / for i = 2 to (dernière cellule non vide colonne A)
- colonne / for j = 1 to 3

Le tableau Remplis

2) ce servir de Redim Preserve pour ajouter une dimension au tableau déjà existant pour
Ajouter une (4 ème colonne) dans le but de faire une clef unique concaténation :
- deux cellules du tableau excitant en mémoire dans une 4 ème colonne.

Je dois faire un exemple très clair dans un autre poste.

Milles merci à vous Misange pour votre Tuto.

Laurent
 

Misange

XLDnaute Barbatruc
Re : [RESOLU] Différence entre : Item et Add avec CreateObject("Scripting.Dictionary"

Si tu t'intéresse aux arrays, j'ai aussi "commis" 8 pages sur le sujet... bon courage :)
Ce lien n'existe plus (et suivantes !)
C'est un peu ardu mais franchement tellement puissant que ça vaut l'effort d'ingurgiter la potion.
 

laurent950

XLDnaute Accro
Re : [RESOLU] Différence entre : Item et Add avec CreateObject("Scripting.Dictionary"

Merci Misange,

Les Tableaux pour moi c’est primordiale, je dois absolument comprendre tous le mécanisme.

Je voulais faire un poste a se sujet pour un exemple mais vous m’avais donné une clef avec votre page internet très bien faite, ou c’est ardu mais une fois que j’aurais compris le mécanisme cela ira mieux.

Demain je fais une impression des huit pages et la puissance de cette programmation vaut vraiment l'effort d'ingurgiter cette potion je dirais magique.

Laurent mille merci.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je recommande de cocher la référence Microsoft Scripting Runtime pour déclarer et utiliser les variables As Dictionary ou FileSystemObject.
Surtout si on ne les connait pas bien…
En tout état de cause il ne me semble pas y avoir tant de choses à savoir à leur sujet qu'il faille le chercher dans une documentation très importante.
Peut être serait-il plus rapide de poser les quelques questions qui vous tracassent.
 

VIARD

XLDnaute Impliqué
Bonjour.
Moi je recommande de cocher la référence Microsoft Scripting Runtime pour déclarer et utiliser les variables As Dictionary ou FileSystemObject.
Surtout si on ne les connait pas bien…
En tout état de cause il ne me semble pas y avoir tant de choses à savoir à leur sujet qu'il faille le chercher dans une documentation très importante.
Peut être serait-il plus rapide de poser les quelques questions qui vous tracassent.
Bonjour.
Moi je recommande de cocher la référence Microsoft Scripting Runtime pour déclarer et utiliser les variables As Dictionary ou FileSystemObject.
Surtout si on ne les connait pas bien…
En tout état de cause il ne me semble pas y avoir tant de choses à savoir à leur sujet qu'il faille le chercher dans une documentation très importante.
Peut être serait-il plus rapide de poser les quelques questions qui vous tracassent.
Bonjour Cisco et à tous

Cisco Je te joins une copie d'un document qui m'a aidé à faire mes premiers pas sur Dictionary, il n'est pas très long. Il est en PDF

amicalement

Jean-Paul
 

Pièces jointes

  • Manipulation de tableaux et dictionnaires.pdf
    99 KB · Affichages: 112

Discussions similaires

Statistiques des forums

Discussions
312 175
Messages
2 085 952
Membres
103 058
dernier inscrit
florentLP