Compter le nombre de variables différentes sur colonne

Bonjour à tous

Je n'arrive pas du tout à obtenir ce que je voudrais

en Macro

J'aimerais compter le nombre de prénoms différents sur une colonne

Comme ci-dessous la réponse serait 3

Eric
Pierre
Franck
Franck
Franck
Eric
Franck
Franck
Pierre
Franck
Franck
Franck

C'est incroyable un truc qui doit être simple et se gratter la tête et passer du temps à essayer de trouver .

Merci

Bonjour,

En supposant que votre liste est en colonne A et le premier nom en A2:

Sub Compter_valeurs_uniques()
    Dim Cpt As Long, i As Long
    Dim x As String
    Application.ScreenUpdating = False
    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Cpt = 0
    For i = 2 To DerLig
        x = Application.WorksheetFunction.CountIf(Range(Cells(1, "A"), Cells(i - 1, "A")), Cells(i, "A"))
        If x = 0 Then Cpt = Cpt + 1
    Next i
    MsgBox "Nombre de valeurs différentes: " & Cpt
End Sub

Cdlt

Bonjour et merci pour ton aide

en colonne A je mets ceci

a
a
a
ag
g
g
a
f

Il me dit qu'il a trouvé 3 différences alors qu'il en a 4 (a,ag,g,f)

Fait il la différence sur 1 seul caractère ?

en tout cas merci :)

Attention, j'ai bien précisé que la liste commençait en A2 (pas en A1)

Bonjour à tous

A noter qu'avec 365 on aurait tout simplement

=NBVAL(UNIQUE(A2:A9))
ou mieux, avec un tableau structuré,
=NBVAL(UNIQUE(Tableau1[Nom]))

Oupsss ok, je regarde à mon retour merci ;)

Bonjour 78Chris,

Jefekoi à précisé avec une macro

Cdlt

RE

Jefekoi à précisé avec une macro

Oui, comme dans la plupart de ses demandes, et aussi qu'il n'a pas 365.

Mais c'est un forum d'échanges et cela peut intéresser d'autres forumeurs...

En VBA

Sub Compter_valeurs_uniques()
Dim Plage As Range
Set Plage = [Tabeau1].ListObject.ListColumns("Nom").DataBodyRange
x = Application.WorksheetFunction.CountA(Application.WorksheetFunction.Unique(Plage))
End Sub

Merci Arturo juste un petit souci

Je fais la recherche une fois le filtre activé donc le départ sur "R1" n'est pas toujours en R1 après le filtre il est possible de démarrer en R33 ou autre

Aurait tu une solution à ce problème ?

Sheets("onglet").Select 'extrait du filtre 
    Range("Q3").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$S$1467").AutoFilter Field:=17, Criteria1:="Poste"

   ' Application.ScreenUpdating = False
    DerLig = Worksheets("onglet").Cells(Rows.Count, i).End(xlUp).Row 

    Cpt = 0
    For i = 2 To DerLig
        x = Application.WorksheetFunction.CountIf(Range(Worksheets("onglet").Cells(4, "R"), Cells(i - 1, "R")), Cells(i, "R"))
        If x = 0 Then Cpt = Cpt + 1
    Next i
    MsgBox "Nombre de valeurs différentes: " & Cpt

Salut Arturo, 78chris, Jefekoi

peux tu compter les nombre et après filtrer !?

@ Jefekoi,

Si j'ai bien compris votre tableau s'arrête à la colonne S, et vous voulez appliquer un filtre sur la colonne Q et compter le nombre de noms uniques dans la colonne R.

Pour faire simple, je vous propose s'utiliser la colonne libre T pour y mettre une formule qui concatène la colonne Q et R( ceci est inclus dans le code), le comptage se fait sur la colonne T.

Principe de fonctionnement: appliquez le filtre manuellement avec le critère choisi en Q1, puis cliquez sur le bouton.

Nickel ça marche Arturo,

Merci à tous pour votre aide, je vais enfin pouvoir arrêter de m'arracher les cheveux :)

Mais petite question qui m'interroge

Pourquoi cette ligne ?

Range("T2:T" & DerLig).FormulaR1C1 = "=RC[-3]&"" ""&RC[-2]"

Un des filtres que j'ai essayé ne marche pas il me dit "0" alors que la réponse est "1"

capture d e cran 2021 09 25 160110

C'est bon j'ai vu mon erreur

    DerLig = Cells(Rows.Count, "R").End(xlUp).Row
    PremLig = Sheets("Onglet").Range("A2", "A65535").SpecialCells(xlCellTypeVisible).Row
    Range("A" & PremLig & ":A" & DerLig).Select 'histoire de voir si il selectionne bien
    Range("T" & PremLig & ":T" & DerLig).FormulaR1C1 = "=RC[-3]&"" ""&RC[-2]" ' pas de problème
    Cpt = 0
    For i = PremLig To DerLig
        If Rows(i).EntireRow.Hidden = False Then
            x = Application.WorksheetFunction.CountIf(Range(Cells(PremLig, "T"), Cells(i - 1, "T")), Cells(i, "T"))
            If x = 0 Then Cpt = Cpt + 1
        End If
    Next i
    MsgBox "Première ligne :" & PremLig & " Nombre de valeurs différentes: " & Cpt & " Dernière ligne :" & DerLig

Il serait préférable que vous déposiez un fichier avec quelques lignes et sans données confidentielles, à partir de là je pourrai répondre exactement à vos attentes.

C'est bon Arturo je viens de rectifier la source juste au dessus de ton message, ça marche Merci beaucoup

Rechercher des sujets similaires à "compter nombre variables differentes colonne"