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
 

laetitia90

XLDnaute Barbatruc
Re : Collection

rebonjour tous; que dire de plus avec les explications de JB que je salue énormement au passage
pour repondre d'abord a JB

en terme de rapidité que pense tu qu'on utiliser directement

Code:
Set m = New Dictionary

a la place de

Code:
Set m = CreateObject("Scripting.Dictionary")

puis

Code:
Dim m As Dictionary, i As Long
 Set m = New Dictionary
t = Range("a2:a" & Cells(Rows.Count, 1).End(xlUp).Row)
For i = 1 To UBound(t)
'ect..

bien sur cela nous oblige de d'activer la réference

Code:
microsoft Scripting.Dictionary

éventuellement on peut le faire par vba

Code:
Sub es()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\scrrun.dll"
End Sub

en rapidité j'ai l'impression que c'est plus rapide vu mes faibles connaissances
je voudrais bien avoir ton avis

por repondre a david84

en régle génerale les fonctions excel sont plus rapide que les fonctions vba
tu es sur la bonne voie!!!

pour pierre jean que dit la ligne
Code:
m(c.Value) = IIf(m.Exists(c.Value), m(c.Value) + 1, 1)
si m.Exists(c.Value on ajoute autrement on reste a 1
attention quand méme a l'instruction IIf les 2 conditions sont systematiquement teste cela peut avoir des effets pervers de la peut être gerer les erreurs possibles
par
Code:
On Error Resume Next
'le plus simple mais surtout pas le meilleur
le mieux
Code:
On Error GoTo 0

que rajouter de plus quand je vois Pierrejean 9000 posts quel investissement !!!pas jeune en plus
comme dirait mon papounet
châpeau bas monsieur
a+ leti
 

david84

XLDnaute Barbatruc
Re : Collection

Re,
merci à JB et à laétitia pour les explications.
Remerciements renouvelés à staple et pierrejean.
A+

NB : concernant la formule que j'avais proposée, pas besoin de passer par equiv :
=SI(LIGNES($1:1)<=SOMME(1/NB.SI(A$1:A$9;A$1:A$9));INDEX(A$1:A$9;PETITE.VALEUR(SI(FREQUENCE(EQUIV(A$1:A$9;A$1:A$9;0);EQUIV(A$1:A$9;A$1:A$9;0))>0;LIGNE(INDIRECT("1:"&LIGNES(A$1:A$9))));LIGNES($1:1)));"")
semble donner les mêmes résultats.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Collection

>en rapidité j'ai l'impression que c'est plus rapide

Pour le test qe j'ai effectué, j'obtiens le même temps.

>en règle générale les fonctions excel sont plus rapides que les fonctions vba


Ce n'est pas le cas pour les formules matricielles qui peuvent devenir catastrophiques si les champs ont une taille importante et si les formules sont recopiées x fois.

http://boisgontierjacques.free.fr/pages_site/sommeprod.htm#PlusFreq


JB
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Collection

Re

De retour de WE
Je dois une reponse a David:
La variable temp pourrait s'appeler titi toto Pierre Paul ou Jacques cela ne changerait rien
Ici cela rappelle seulement qu'il s'agit d'une variable temporaire

@ Laetitia
Merci pour l'explication
J'en ai profité pour etudier un peu ce Dictionary a partir de ta macro et voici le fruit de mes cogitations
NB: Il y a un peu de Collection egalement (largement bonifiées par tableaux)
Utiliser la macro garnir avant de tester
 

Pièces jointes

  • dico_et_collection.zip
    15 KB · Affichages: 19

david84

XLDnaute Barbatruc
Re : Collection

Re,
La variable temp pourrait s'appeler titi toto Pierre Paul ou Jacques cela ne changerait rien
Ici cela rappelle seulement qu'il s'agit d'une variable temporaire

Bonjour pierrejean,
cela veut-il donc dire qu'il ne garde la variable en mémoire que le temps de son traitement ?
L'intérêt est-il de libérer de "l'espace mémoire" pour accélérer la vitesse d'exécution ou y-a-t-il un autre intérêt ?
Je vais regarder ton fichier et voir si j'arrive à saisir les différences entre les macros.

Merci.
 

pierrejean

XLDnaute Barbatruc
Re : Collection

Re

Non , elle n'est temporaire que par l'usage qui en est fait et non par nature
Comme toute variable d'une macro ,elle n'existe que lorsque la macro tourne
Seules les variables declarées publiques sont conservées tant que le fichier est ouvert (et en regle tres generale ni les unes ni les autres n'encombrent la mémoire )
 

Discussions similaires

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

Statistiques des forums

Discussions
312 361
Messages
2 087 625
Membres
103 608
dernier inscrit
rawane