Calculer le nombre de valeur unique dans plusieurs onglets avec une formule

Bonjour à tous,

Je viens vous solliciter, car je n'arrive pas à réaliser la chose suivante :

Je souhaite afficher dans une cellule le nombre de valeurs uniques de plusieurs colonnes qui sont dans différentes colonnes. Je sais que l'on peut réaliser ceci avec un tableau croisé ou une VBA, mais je souhaite trouver une formule.

Je vous joins mon fichier fictif avec la formule que j'ai commencé à écrire.

Pour l'instant j'arrive à faire la somme du nombre de valeurs uniques dans chaque colonne, l'idée ensuite est de soustraire les valeurs en double, mais je n'arrive pas à écrire cette partie-là.

Est-ce que l'un de vous a une idée ?

Je suis aussi bien entendu preneur d'une autre manière d'y parvenir (mais avec une formule)

Merci par avance et bon weekend =)

Adrien

Bonjour,

Voici une proposition avec une fonction personnalisée, qui ignore les valeurs vides :

Function NBUNIQUES(ParamArray plage()) As Long

Set dico = CreateObject("Scripting.Dictionary")

For i = LBound(plage) To UBound(plage)
    For Each cell In plage(i).Cells
        If cell.Value <> "" Then dico(cell.Value) = ""
    Next
Next i

NBUNIQUES = dico.Count

End Function

Cdlt,

Merci 3GB pour ta solution cela fonctionne, je rajoute un -1 pour enlever le titre de ma colonne.

Mais je suis toujours preneur d'une solution sans passer par une fonction personnalisée.

Merci

Re,

Il n'y a pas besoin de rajouter -1. Il suffit de sélectionner les bonnes plages à chaque fois...

Tu aurais pu le constater si tu avais téléchargé le fichier.

Cdlt,

Re,

C'est bien ce que j'ai fait je pense il y a un bug dans le compteur ;-)

Je t'avoue ne pas bien avoir compris ton fichier... Je n'ai pas du activer q

qc.

J'essaie de voir comment faire un edit car j'ai oublié de préciser que mes plages sont dynamiques

(longueur de la colonne peut changer).

Je remets le fichier avec ta solution.

Merci

exemple forum

Re,

Dans ce cas, il vaudrait mieux joindre un fichier qui correspond au fichier réel.

En tout cas, je vois 2 possibilités : En utilisant la fonction DECALER au sein de la fonction NBUNIQUES. Ou en utilisant des tableaux structurés.

Mais il ne faut pas garder toute la colonne A car, d'une part il faut soustraire l'en-tête en effet, et d'autre part la fonction bouclant sur toutes les cellules, cela ralentit considérablement le fichier.

Cdlt,

Au cas où, si vous avez un grand nombre de données, voici une version 2, plus rapide :

Function NBUNIQUES(ParamArray plage()) As Long

Set dico = CreateObject("Scripting.Dictionary")

For i = LBound(plage) To UBound(plage)
    temp = plage(i)
    If IsArray(temp) Then
        For j = LBound(temp) To UBound(temp)
            For k = LBound(temp, 2) To UBound(temp, 2)
                If temp(j, k) <> "" Then dico(temp(j, k)) = ""
            Next k
        Next j
    Else
        If temp <> "" Then dico(temp) = ""
    End If
Next i

NBUNIQUES = dico.Count

End Function

Cdlt,

Re,

Merci pour la mise a jour.

Après de nombreuses tentatives je viens de trouver une formule permettant de faire ce que je voulais, beaucoup plus simple que prévu...je vous mets en pièce jointe ma solution.

Adrien

EDIT : comment faire pour fermer cette discussion en indiquant mon propre message comme solution ?

Bonjour,

Je ne suis pas sûr mais je crois que c'est en bas à droite...

Bravo pour cette formule ! Je la mets ici au cas où pour que le plus grand nombre puisse la voir :

=SOMME(SI(FREQUENCE(Feuil1:Feuil3!A:A;Feuil1:Feuil3!A:A)>0;1;))

à valider par ctrl + shift + entrée.

Cdlt,

Rechercher des sujets similaires à "calculer nombre valeur unique onglets formule"