XL 2016 Compter le nombre de prénoms différents par nom de famille

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

vincent team

XLDnaute Nouveau
Bonjour,

Colonne A = liste de noms
Colonne B = liste de prénoms

Je voudrais compter le nombre de prénoms différents par nom, mais je ne trouve pas la solution (et l'afficher en colonne C sur chaque ligne)
Quelqu'un peut m'aider svp ?

Merci
Slts/Vince
 
Bonjour vincent team,

C'est facile avec une fonction VBA :
VB:
Function ComptePrenom(NomPrenom As Range, nom$)
Dim d As Object, tablo, i&
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
tablo = Intersect(NomPrenom.Parent.UsedRange, NomPrenom)
nom = LCase(nom)
For i = 2 To UBound(tablo)
    If LCase(tablo(i, 1)) = nom Then d(tablo(i, 2)) = ""
Next
ComptePrenom = d.Count
End Function
Le code doit être impérativement placé dans un module standard.

A+
 

Pièces jointes

Cela dit sur un grand tableau la solution précédente n'est absolument pas jouable.

En effet pour le calcul de chaque formule en colonne C il faut étudier tout le tableau...

Il faut alors utiliser cette macro évènementielle, voyez le fichier joint :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, ub&, i&, x$, n&, j&, k&
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With [A1].CurrentRegion
    .Columns(1).EntireColumn.Insert 'insère une colonne auxiliaire
    .Cells(1, 0) = 1
    .Columns(0).DataSeries 'numérotation
    .EntireRow.Sort .Columns(1), xlAscending, .Columns(2), Header:=xlYes 'tri sur 2 colonnes
    tablo = .Columns(1).Resize(, 2) 'matrice, plus rapide
    ub = UBound(tablo)
    ReDim resu(1 To ub, 1 To 1)
    For i = 2 To ub
        If tablo(i, 1) <> tablo(i - 1, 1) Then
            x = tablo(i, 1)
            n = 0
            For j = i + 1 To ub
                If tablo(j, 1) <> x Then Exit For
                If tablo(j, 2) = tablo(j - 1, 2) Then n = n + 1 'compte les doublons
            Next j
            n = j - i - n
            For k = i To j - 1
                resu(k, 1) = n
            Next k
            i = j - 1
        End If
    Next i
    resu(1, 1) = .Cells(1, 3)
    .Columns(3) = resu 'restitution
    .EntireRow.Sort .Columns(0), xlAscending, Header:=xlYes 'tri dans l'ordre initial
    .Columns(0).EntireColumn.Delete 'supprime la colonne auxiliaire
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro se déclenche quand on modifie ou valide une cellule quelconque.

Grâce aux 2 tris l'analyse du tableau est très rapide.

Testée sur 90 000 lignes, la macro s'exécute chez moi en 0,5 seconde, c'est parfaitement acceptable.
 

Pièces jointes

Bonsoir @ tous,
Salut Job75,

Si tu es intéressé par une formule, sur le fichier de l'ami Job75, en C2 :
VB:
=NB(1/FREQUENCE(SI(A$2:A$10=A2;EQUIV(A$2:A$10&B$2:B$10;A$2:A$10&B$2:B$10;0));LIGNE(INDIRECT("1:"&LIGNES(A$2:A$10)))))
@ valider par Ctrl+Maj+Entrée
@ tirer vers le bas


Cordialement
 
Merci beaucoup à vous 2 d'avoir pris le temps de me répondre.

La solution de R@chid m'intéressait car plus simple à mettre en place et elle fonctionne très bien sur quelques enregistrements mais au final vu le nombre de lignes à traiter (20 000) ça moulinait beaucoup trop.
J'ai donc adpaté le code de job75 pour mon besoin.
 
Bonjour @ tous,
en fait les deux sont facile à mettre en place, même la macro de l'ami Job75 ne nécessite qu'un copier/coller.
Bien sûr les formules matricielles sont très gourmandes en ressources avec des milliers de lignes d'où ma question si une formule t'intéressait.

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Erreur de formule ?
Réponses
12
Affichages
386
Réponses
22
Affichages
1 K
Retour