Vba Compter le nombre de données d'une colonne hors doublons

corate92

XLDnaute Junior
Re bonjour à tous!

Sauriez vous comment faire afin de créer une macro qui compte le nombre de cellules d'une colonne hors doublons?

Je ne sais pas du tout comment faire ? :confused:

Si quelqu'un passe par là....

Merci beaucoup!
 

Cousinhub

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour,
un petit code pour compter le nombre de valeurs uniques dans une plage :

Code:
Sub compter_uniques()
Dim unique As New Collection
On Error Resume Next
For Each cel In Range("A1:A" & [A65000].End(xlUp).Row)
    unique.Add cel.Value, CStr(cel.Value)
Next cel
On Error GoTo 0
MsgBox "Eléments uniques : " & unique.Count
End Sub
 

Allergique

XLDnaute Junior
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour,

J'ai utilisé ce code qui fonctionne très bien. Par contre, est-ce que quelqu'un sait m'expliquer le fonctionnement et quel est le code qui vérifie qu'il n'y a pas de doublons?

Merci!
 

Staple1600

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour

Pour une fois je vais sortir de VBA

Par formule matricielle (CTRL+ENTREE)

Exemple issu du site de Microsoft

=SOMME(SI(FREQUENCE(A2:A10;A2:A10)>0;1))

voir PJ pour plus de détails
 
Dernière édition:

JeanMarie

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour tout le monde

La formule indiquée par Staple1600, ne fonctionne que sur des données numériques.
Je ne sais pas si la version avec des données "texte" se trouve aussi sur le site de microsoft, :(

@+Jean-Marie
 

Staple1600

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Re, bonjour JeanMarie

JeanMarie
Dans le classeur joint dans mon précédent message, il y 3 cas de figures traités
(donc 3 formules différentes)

Tu l'as regardé?

PS: L'URL de la page est dans ce classeur ;)
 

JeanMarie

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonsoir

JM, évidement que je n'ai pas ouvert le fichier post, ce n'est pas à cause d'un pare-feu ni à un anti-virus récalcitrant, c'est tout simplement que je n'ai pas envie d'ouvrir tous les fichiers qui sont postés dans les posts.
Je préfère de loin les explications dans les réponses, malheureusement ces explications sont de plus en plus succinctes sur XLD, et je le déplore et tu trinques pour tout le monde.

Suite à ta réponse, j'ai ouvert ton fichier, et visualiser le lien que tu y donnes.
Ton fichier n'apporte rien de plus que l'exemple sur le lien que tu indiques dedans.
Le lien de la page aurait suffi.

Je vais t'épargner cet effort, je le place à ta place


@+Jean-Marie
 

Staple1600

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonsoir Jean-Marie


La pièce jointe de mon précédent message a l'avantage d'éviter (pour ceux que cela intéresse) d'avoir à créer un classeur pour reproduire l'exemple du site de Microsoft. ;)

Tu t'es donné la peine d'insérer le lien.

Je me suis donné la peine de créer un classeur.

Avec tout cela , Corate92 aura tous les éléments pour comprendre.
 

GIBI

XLDnaute Impliqué
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour,

vous avez tous oublié la bonne vielle méthode maint fois présenté sur le forum


=SOMMEPROD(1/NB.SI(plage;plage))

pour reprendre l'exemple de Staple1600

=SOMMEPROD(1/NB.SI($B$2:$B$10;$B$2:$B$10))


avouez que c'est plus simple que les Fréquence/equi et CTRL+SHIFT+ENTER


GIBI
 

JeanMarie

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonsoir

Gibi, Il n'y a pas d'oubli, celle que tu mentionnes est pêut-être plus simple, mais ce n'est pas un gage d'efficacité.

Gibi, voilà ce que je disais il y a 23 mois sur la feuille "temps de calcul" du fichier, que tu pourras récupérer sur ce fil.
https://www.excel-downloads.com/threads/utulisation-de-la-formule-frequence.70113/

Quelle est la fonction à privilègier ?
je parlais évidement du duo FREQUENCE(EQUIV))) et de la seule NB.SI())

Une petite formule, n'est pas forcément un gage de rapidité, comme tout mettre dans une cellule n'en n'est pas.

Pour illustrer ces propos, prenons deux formules de la feuille Compter…(A), en ne prenant que la partie qui est intéressante

1)
Code:
(NB.SI(B5:B33;B5:B33)
NB.SI, compte pour chacune des valeurs de la plages B5:B33, le nombre de fois qu'elle est présente dans la liste B5:B33
elle doit lire toute la plage pour en connaître le nombre, et ce pour chaque valeur de la plage
ici la plage a une longueur de 29 cellules, elle va donc faire une boucle de 29 * 29 valeurs, ce qui donne
Code:
[B]841 TESTS, PLUS X OPÉRATIONS D'ADDITION QUAND LE TEST D'ÉGALITÉ EST VRAI[/B]

2)
Code:
FREQUENCE(EQUIV(B5:B33;B5:B33;0);LIGNE(A1:A29))
EQUIV, retourne pour chaque valeur de la plage B5:B33, l'index de son positionnement dans la plage B5:B33, comme EQUIV ne retourne que l'index de la première position dans la plage, elle ne lit pas entiérement la plage B5:B33, ce qui évite des boucles de tests, pour la même plage, cela donne 435 tests au maximum (1+2+3+4…….+28+29)

FREQUENCE, retourne pour chaque valeur de la matrice (obtenue par EQUIV), le nombre de fois qu'elle est présente dans la matrice
cette fonction commence à créer la matrice de tranches {1;2;3;4…..;29}, puis pour chaque valeur de la plage, incrémente un compteur,
elle va donc passer en revue les 29 valeurs de la matrice, et faire 29 opérations d'addition.

Code:
[B]AU TOTAL 464 TESTS  PLUS 29 OPÉRATIONS D'ADDITION[/B]

Voilà, comment une formule à deux fonctions peut être plus rapide, qu'une formule à une seule fonction

@+Jean-Marie
 

GIBI

XLDnaute Impliqué
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonsoir jeanMarie,

démonstration intéressante, mais hors sujet. Nous sommes sur un forum de néophyte, nous ne recherchons systématiquement la performance. mais plus souvent nous donnons des réponses avec des fonctions simples facile à comprendre pour des utilisateurs lambda.

Alors pourquoi parler de NB.SI n'est pas "interdit"


GIBI
 

Hervé

XLDnaute Barbatruc
Re : Vba Compter le nombre de données d'une colonne hors doublons

coucou

je prend ma plus belle plume pour essayer expliquer à allergique l'utilisation d'une collection.

c'est simple, une collection est un objet, qui permet de placer differentes valeurs en son sein. c'est comme les variables tableaux.

on remplit une collection grace à la méthode .add [élément], [clée]

Code:
Dim data As New Collection

data.Add "clé", "clé"

MsgBox data(1) 'renvoi "clé"
on associe donc chaque élément de la collection à une clé, l'inconvenient des clées de collection, c'est qu'elles doivent etre unique, on ne peut pas
avoir de doublons :

Code:
Dim data As New Collection

'ce code buggue, car 2 clées identiques

data.Add "clé", "clé"
data.Add "clé", "clé"
et c'est là que la collection prend tout son interet, si elle n'accepte pas de doublons, nous pouvons nous en servir de filtre.

il nous suffit juste de gérer le bugge.

on place donc on error resume next (routine de gestion d'erreur) avant la collection pour que le code passe le bug, on oublie pas de revalidé la routine apres le passage dans le filtre de la collection : on error goto 0

Code:
Dim data As New Collection

'ce code bug plus

On Error Resume Next
data.Add "clé", "clé"
data.Add "clé", "clé"
On Error GoTo 0

MsgBox data(1)
en résumé on utilise le bug de la collection pour laisser les éléments uniques s'ajouter à celle-ci.

j'espere que j'ai été clair, c'est pas facile d'etre pédagogue avec 2 neurones (dont un bien fatigué).

bye

ps : jean-marie tu as parfaitement raison, on perd parfois notre devoir d'explication, moi le premier, j'essayerai de me corriger.
 

Sylvie

XLDnaute Accro
Re : Vba Compter le nombre de données d'une colonne hors doublons

Bonjour à tous, bonjour Cher Forum

merci pour vos démonstrations Jean Marie et Hervé très enrichissantes !

Moralité Hervé : ce n'est pas le nombre de neurones qui compte mais leur qualité. Laisser volontairement bugger la collection c'est drôlement malin :)

Bonne journée à tous
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 023
Messages
2 084 713
Membres
102 637
dernier inscrit
TOTO33000