Collection

J-Charles

XLDnaute Occasionnel
Bonjour à tous,
J'ai un petit problème à vous soumettre. J'ai une plage de cellules dans lesquelles se trouvent des codes de 4 chiffres au format texte. J'aimerais pouvoir déterminer pour chaque code, le nombre de fois où il est répété dans cette plage.
J'ai essayé d'utiliser une collection mais dans ce cas les codes sont rentrés de manière unique.
Est ce qu'un bon samaritain aurait une idée à me proposer ? je vous remercie d'avance
 

Staple1600

XLDnaute Barbatruc
Re : Collection

Bonjour à tous

Pour varier les plaisirs
Du bel ouvrage de JB
Lien supprimé

PS: c'est joli non ? (à adapter aux besoins)

En attendant de voir la solution formulée qui ne manquera pas d'arriver.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Collection

Bonjour à tous,
histoire de faire plaisir à staple et de saluer Jean-Marcel, ci-joint une version formules.;)
Je vais jeter un coup d'oeil sur les versions VBA histoire de voir si j'arrive à comprendre:rolleyes:.
A+
 

Pièces jointes

  • Doublons.xls
    38 KB · Affichages: 87
  • Doublons.xls
    38 KB · Affichages: 85
  • Doublons.xls
    38 KB · Affichages: 85

Staple1600

XLDnaute Barbatruc
Re : Collection

Re, bonjour david84

david84
Merci et Bravo.
Je t'inclue donc illico presto dans ma Formule Response Team d'XLD. ;)

Au delà du fait de m'avoir procuré du plaisir (non charnel), je pense que toutes ces réponses combleront J-Charles.
 

david84

XLDnaute Barbatruc
Re : Collection

Re,
merci staple:)
Bon, j'ai regardé et j'ai quelques questions qui me viennent après avoir également regardé l'aide d'excel :
1) Même si je pense avoir saisi les notions liées à "On Error Resume Next" et "On Error GoTo 0", juste pour savoir, l'emploie-t-on par "facilité" ou ne peut-on faire autrement ?

2) "Collec.Add Cell, CStr(Cell)"
Si j'ai bien compris, CStr convertit chaque nombre en chaîne de caractères.
Pourquoi a-t-on besoin de faire cette manip ?

Dernière chose :
Je t'inclue donc illico presto dans ma Formule Response Team d'XLD
Cela consiste en quoi ? (ça fait mal ?:p)
A+
 

Staple1600

XLDnaute Barbatruc
Re : Collection

Re

Pour les questions 1) et 2), je laisse mes camarades te répondre.



Pour david84
Non cela est indolore
C'est une gratification (de mon cru)
J'ai noté sur un carnet à spirale (merci Wiliam Sheller) le nom des membres du forum docteur es Formula que j'ai une réunis dans une équipe sous le nom de:
Formule Response Team

Une autre équipe peuplée de membres d'XLD férus de VBA, se nomme :
VBA Dream Team.

A ce jour VBA Dream Team > à Formule Response Team ( en nombre de membres)

PS1: Il n'est pas interdit d'appartenir au deux listes,
mais cette élite (dont je rêve parfois la nuit, les soirs de pleine lune) sont peu nombreux
et je les nomme en secret: Les Grands Maîtres de la Cellule, ou GMC.
Je n'ai jamais pu les approcher en vrai car ils ne sont pas tous en xlVisible =True.


PS2: J'ai aussi dans ce carnet, une liste noire (que j'ai cessé d'alimenter : trop de membres potentiels :D ) qui elle recense les membres d'XLD
qui ont le don de m'irriter (Ce sont ceux qui zappe la charte et cie ..)
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Collection

Bonjour a tous

Pour tenter d'eclairer la lanterne de david84

On entre une valeur dans la collection par
Coll.Add Valeur, clé
clé permettant de savoir si l'on a affaire a une valeur unique
Par facilité et habitude la clé est tres souvent la conversion texte de Valeur
d'ou
Coll.add Valeur,cstr(Valeur)
Ensuite Excel tousse si l'on veut entrer dans une collection une valeur qui s'y trouve deja , d'ou l'utilisation de On error Resume next qu'il est tres fortement conseillé d'utiliser avec On error goto 0 lorsque la ligne a risque est depassée

En esperant ne pas me trouver dans le mauvais carnet de Staple
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Collection

Re,
merci pierrejean pour tes explications claires et précises.
C'est toujours un plaisir de te lire;).
Je vais à nouveau regarder le code à la lumière de tes explications et n'hésiterai pas à revenir si nécessaire.

staple, je le prends donc comme un compliment et t'en remercie:).

A+
 

laetitia90

XLDnaute Barbatruc
Re : Collection

bonjour tous;
en passent par Dictionary a la place d'une collection

Code:
Sub es()
 Dim c As Range, m As Object
      Application.ScreenUpdating = False
         Set m = CreateObject("Scripting.Dictionary")
         For Each c In Range("a2", Cells(Rows.Count, "a").End(xlUp))
           m(c.Value) = IIf(m.Exists(c.Value), m(c.Value) + 1, 1)
             Next c
      [b2].Resize(m.Count, 1) = Application.Transpose(m.keys)
      [c2].Resize(m.Count, 1) = Application.Transpose(m.Items)
End Sub
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Collection

Bonjour,

L'objet Dictionary permet de générer des listes sans doublons. Cet objet, simple à programmer, est très performant. Ne pas utiliser l'objet Collection qui est lent.

mondico.GIF


Add clé,élément Ajoute une clé et la valeur associée
Exists(clé) Teste l'existence d'une clé
Tbl=Items Donne dans un tableau les éléments
Tbl=Keys Donne dans un tableau les clés
Remove (clé) Suprime la clé
Remove all Supprime tous les éléments
Count Donne le nombre d'éléments
Item(clé) =valeur Modifie la valeur de la clé
Item(clé) Donne la valeur associée à la clé

0,04 sec pour 16.000 lignes

Code:
Set mondico = CreateObject("Scripting.Dictionary")
a = Range("a2", [a65000].End(xlUp)).Value
For Each c In a
   mondico(c) = c
Next c
[c2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)


Objet dictionary
http://boisgontierjacques.free.fr/pages_site/Collection.htm

JB
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Collection

Re,
merci JB pour tes explications. Je vais regarder de plus près ce que tu en dis sur ton site.
Je profite de l'occasion pour te remercier pour l'existence de ce site qui m'a permis de me familiariser avec les formules sur Excel (je n'ai jusqu'à présent exploré que les pages liées à l'utilisation des formules Excel).
Cordialement

Edit : comment fait-on pour mesurer la vitesse d'une macro ?
Pourrait-on mesurer la vitesse d'exécution d'une formule ?
 
Dernière édition:

Discussions similaires

Réponses
12
Affichages
333
Réponses
93
Affichages
2 K

Statistiques des forums

Discussions
312 361
Messages
2 087 599
Membres
103 604
dernier inscrit
CAROETALEX59