XL 2013 CreateObject("scripting.dictionary") et/ou variable tableau ?

BenHarber

XLDnaute Occasionnel
Bonjour le Forum,
J'ai trouvé la fonction VBA suivante sur développez.net (merci Mchel M) qui me permet de compter sans doublon les enregistrements d'une plage de cellules. Elle fonctionne bien (même si je ne vois pas trop à quoi CreateObject("scripting.dictionary") correspond...)

A présent, je souhaiterais utiliser les différentes valeurs trouvées dans cette plage de cellules. Je pensais pour cela les enregistrer dans une variable tableau [du type : monTab(0 à n)] : ma question est de savoir si je peux pour cela utiliser "dico" (?) ou si je dois obligatoirement créer une nouvelle variable tableau ?
Merci d'avance pour vos idées toujours constructives !
BH
Function compter_uniques(plage As Range) As Long

Set dico = CreateObject("scripting.dictionary")
For Each cellule In plage
ref = cellule.Value
If Not dico.exists(ref) Then
dico.Add ref, ref
End If
Next
compter_uniques = dico.Count
End Function
 

Staple1600

XLDnaute Barbatruc
Re, Bonsoir mapomme

Bonsoir à tous :eek:
sans collection ( j'aime pas les défilés)
[pj]Sauf quand il y a des bout d'Implicite dedans ;)[/pj]

Sinon t'aurais pas sous le coude, un petit bout de code (pour générer les données de test)
J'ai trop de *.xls? en provenance d'XLD ;)
Cela me permettrait de tester ton code ;)

PS: Tu aimes les MACistes, mais Excel (ou plutôt la maison mère) n'aime pas les pommes ;)
Ce qui donne un VBA plein de pépins sous MAC ;)

EDITION: Bingo! Init est le petit bout de code
Tu pourrais l'ajouter dans ton message, stp ? ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Staple1600 :)

Sinon t'aurais pas sous le coude, un petit bout de code (pour générer les données de test)
Aurais tu un début de germination de -> poil dans la main ? :D
J'utilise un code plus que "bidon":
VB:
Sub init()
   Range("a2").Resize(200000).Formula = "=RANDBETWEEN(1,11111)"
   Range("a2").Resize(200000).Value = Range("a2").Resize(200000).Value
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir Dranreb

100000 éléments échangés
"Dictionary
(l. tardives)" "Dictionary
(anticipées)" "Collection
VBA"
Création : 1345,9478 1171,6763 1721,8215
Consutation : 1376,5927 1227,3281 1132,4033

PS: J'ai tout supprimé avant de lancer le test
(à partir de la ligne 7)

NB: Pardon, mapomme mais comme le code n'était point dans le message, j'ai téléchargé le fichier de Dranreb
Tu m'en veux point, hein ? ;)
 

Dranreb

XLDnaute Barbatruc
La surprise c'est que pour 20 × plus d'élément la Collection redevient légèrement plus rapide et, surprise encore bien plus grosse: les liaisons anticipées deviennent très légèrement pénalisantes pour le Dictionary, alors qu'elles sont clairement avantageuses pour 1000 éléments ! (de très peu quand même)
Je vais tâcher de faire un graphique …
 

Dranreb

XLDnaute Barbatruc
Non, pas besoin d'effacer quoi que ce soit. Il ne fait qu'un essai, simplement pour garder trace des précédents il copie tout d'abord 60 lignes vers 6 lignes plus bas.
Mais je vais revoir tout ça pour qu'il fasse une ligne par essai pour pouvoir faire un graphique …
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 929
Membres
103 676
dernier inscrit
Haiti