Compter le nombre de noms uniques dans un tableau

Résolu
andy2092 Messages postés 78 Date d'inscription   Statut Membre Dernière intervention   -  
cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

J'ai besoin de votre aide pour une formule.

J'ai un tableau Excel qui liste différents groupes dans un projet avec le nom des personnes associées aux groupes.

Il y a 3 cas de figure :

  1. Il se peut qu'il y ait plusieurs personnes dans un même groupe séparées par un ";".
  2. La même personne peut aussi être dans plusieurs groupes.
  3. Certains groupes peuvent également être vides.

Je cherche une formule qui me compte le nombre de noms dans le projet sans prendre en compte les doublons.

Voici un example illustré :

Dans ce cas le résultat devrait être 3 car il y a seulement 3 noms listés même s'ils sont dans plusieurs groupe.

Merci d'avance !

3 réponses

  1. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     

    Bonjour,

    Le code commenté (les commentaires sont précédés d'une apostrophe)

    Bonne journée

    'Code de la fonction, avec entre parenthèse, la plage de cellules insérée
    'dans la formule sur la feuille de calcul
    Function nb_pers(Plg As Range) As Long
    'Déclaration des variables
    Dim Tbl, Noms
    Dim I As Long, J As Long
    Dim Nb_Uniq As Object
    'Initialisation d'un objet "Dictionnaire"
    Set Nb_Uniq = CreateObject("Scripting.Dictionary")
    'Enregistrement des valeurs de la plage dans un tableau VBA
    Tbl = Plg.Value
    'Balayage de la plage, en partant de la première valeur à la dernière
    For I = LBound(Tbl) To UBound(Tbl)
        'Si la valeur est non nulle (cellule non vide)
        If Tbl(I, 1) <> "" Then
            'On split (éclate) la valeur en plusieurs selon le délimiteur ;
            Noms = Split(Tbl(I, 1), ";")
            'On balaie tous les noms inscrits dans la cellule
            For J = LBound(Noms) To UBound(Noms)
                'Et on charge le nom (sans les espaces éventuels) dans le champ de clés du dictionnaire
                'Comme une clé est unique dans ce dictionnaire, un nom ne sera
                'donc enregistré qu'une seule fois
                Nb_Uniq(Trim(Noms(J))) = ""
            Next J
        End If
    Next I
    'le nombre de personnes uniques est donc le nombre d'éléments dans le dictionnaire
    nb_pers = Nb_Uniq.Count
    End Function

    1
  2. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     

    Bonjour,

    Si tu avais pu joindre un fichier test, cela nous aurait évité d'en re-créer un...

    Avec une fonction VBA personnalisée

    Dans le fichier joint, j'ai mis le tableau sous forme de Tableau Structuré, ainsi si tu ajoutes des lignes, ce sera pris dans la fonction

    Et dans la cellule E2, cette formule faisant appel à la fonction perso :

    =nb_pers(Tableau1[Personnes inclus dans les groupes])

    Le code de la fonction :

    Function nb_pers(Plg As Range) As Long
    Dim Tbl, Noms
    Dim I As Long, J As Long
    Dim Nb_Uniq As Object
    Set Nb_Uniq = CreateObject("Scripting.Dictionary")
    Tbl = Plg.Value
    For I = LBound(Tbl) To UBound(Tbl)
        If Tbl(I, 1) <> "" Then
            Noms = Split(Tbl(I, 1), ";")
            For J = LBound(Noms) To UBound(Noms)
                Nb_Uniq(Trim(Noms(J))) = ""
            Next J
        End If
    Next I
    nb_pers = Nb_Uniq.Count
    End Function

    Et le fichier exemple :

    https://www.cjoint.com/c/NAejVZ3VUi1

    Bonne journée


    0
  3. andy2092 Messages postés 78 Date d'inscription   Statut Membre Dernière intervention  
     

    Ca fonctionne très bien ! Merci beaucoup.

    Par contre je n'ai pas vraiment de notion vba.

    Pourrais-tu m'expliquer brièvement ce que le code fait ?

    0