Compter le nombre d'items

pascal82

XLDnaute Occasionnel
Bonjour à tous,

Je compte le nombre d'Items avec un code de Mr Boisgontier, en lui même le code fonctionne très bien même lorsque je lui demande de traiter 210 000 lignes avec un nombre d'Item faible
Problématique: lorsque le nombre d'items à restituer est trop important alors Erreur d'exécution '13, incompatibilité de type, et le débogueur sur la ligne [X2]........................
Ce défaut survient lorsque le nombre de lignes est voisin de 205000
La touche F1 ne donne comme indication qu'un mauvais typage de la variable mais ....

Merci par avance

Code:
Sub CompteItems()
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In Range("V3", [V206000].End(xlUp))
    mondico(c.Value) = mondico(c.Value) + 1
  Next c
    [X2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
    [Y2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
End Sub
 

Pièces jointes

  • Recherche nombre d'Items.xls
    41.5 KB · Affichages: 74
Dernière édition:

pascal82

XLDnaute Occasionnel
Re : Compter le nombre d'items

Bonjour,

Je suppose que mon problème est lié au fait que le nombre de colonnes est limitées à 16384 sous 2007 donc limite le nombre d'items à cette valeur. Je pense à cette option parce que l'affichage est transposé (je n'ai pas les compétences pour affirmer ce fait, juste du Pif)
Il ne me reste plus qu'a passer par une formule standard avec une boucle pour rechercher chaque cas, soit a raison de 5 traitements à la seconde, 200000 lignes j'en prends pour 11h sauf erreur de calcul.

Cordialement
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Compter le nombre d'items

Bonjour,
je ne sais absolument pas ce que tu veux obtenir mais si tu veux travailler par rapport à un nombre de lignes variable, modifie
Code:
For Each c In Range("V3", [V206000].End(xlUp))
par
Code:
For Each c In Range("V3", Range("v" & Rows.Count).End(xlUp))
A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Compter le nombre d'items

Bonsoir,

Application.Transpose ne fonctionne pas pour un nombre d'éléments important (>65000?)

Remplacer

[X2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[Y2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)

par

Code:
  Application.ScreenUpdating = False
  i = 0
  For Each c In mondico.keys
        [X2].Offset(i) = c
        [y2].Offset(i) = mondico(c)
        i = i + 1
   Next c
End Sub
 
Dernière édition:

pascal82

XLDnaute Occasionnel
Re : Compter le nombre d'items

Bonsoir,

@David84: L'objectif de ce petit programme est de compter le nombre de doublons dans une liste. La modification que tu proposes ne fonctionne pas.

@BOISGONTIER: J'ai modifié selon instruction et le code fonctionne. Je suis retourné sur votre site pour voir si vous aviez modifié le fichier initial, je pense que cette option pourrait intéresser des néophytes comme moi.

Encore un grand merci à vous deux

Cordialement

Programme final
Code:
 Sub CompteItemsModifie()
 Application.ScreenUpdating = False
   Set mondico = CreateObject("Scripting.Dictionary")
   For Each c In Range("V3", [V206000].End(xlUp))
     mondico(c.Value) = mondico(c.Value) + 1
   Next c
    i = 0
   For Each c In mondico.keys
         [X2].Offset(i) = c
         [Y2].Offset(i) = mondico(c)
         i = i + 1
    Next c
 Application.ScreenUpdating = True
 End Sub
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley