Excel-Gérer_doublons_tableau [Résolu]

Résolu
Bonjour à tous,

Je souhaiterais savoir comment à partir d'un tableau de données comment celui-ci :

col1 col2 col3
Tigre Lion Panda
Renard Tigre Panda
Tigre Lion Ours polaire
Écureuil Tigre Dauphin
Renard Cheval Chat

Je puisse extraire la liste des animaux apparaissant dans le tableau sans répéter ceux qui apparaissent plusieurs fois et si possible de les comptabiliser.

Exemple :
col1 col2
Tigre 4
Écureuil 1
Renard 2
Cheval 1
Lion 2
...

Merci d'avance pour votre aide.

Bonne journée

5 réponses

  1. Contributeur
    Re bonjour

    je me permet d'intervenir avec ce que je sais déjà de votre sujet, afin que personne ne se trompe de direction.
    Il est sans doute nécessaire de passer par une macro, vu que le domaine à traiter concerne au départ 10 colonnes de 200 lignes chacune, et que ce tableau est évolutif et destiné à s'agrandir.
    Pour ma part, les macros ne sont pas mon domaine, mais je pense que cette précision était utile si vous ne voulez pas retrouver les mêmes propositions non recevables.

    Je ne saurais que faire le décompte de chaque référence lorsque vous en aurez établit la liste exhaustive...mais ça, ce n'est surement pas le plus difficile.

    Bonne chance, vous pouvez faire confiance au spécialistes de CCM.

    Crdlmnt

    1. Merci Vaucluse pour le coup de pouce car mon sujet n'est pas facile à expliquer :)
      1. Salut,

        Une approche en VBA, mais je pense faire plus simple avec colonne intermédiaire

        Sub test()
        Dim ValeurRecherche, RangePlage
        Dim MaPlage As Range
        Dim i As Integer, DerniereLigne As Integer
        Dim La_Valeur As String
        'Application.ScreenUpdating = False
        Range(Cells(2, 8), Cells(100, 9)).ClearContents
        DerniereLigne = Cells(65536, 8).End(xlUp).Row
        If DerniereLigne < 2 Then DerniereLigne = 2
        Range(Cells(2, 8), Cells(DerniereLigne, 9)).ClearContents
        Set MonDico = CreateObject("Scripting.Dictionary")
        RangePlage = Range(Cells(1, 1), Cells(8, 3)).Address
        Set MaPlage = Range(Cells(1, 1), Cells(8, 3))
        For Each ValeurRecherche In Application.Sheets(ActiveSheet.Name).Range(RangePlage)
        If Not MonDico.Exists(ValeurRecherche.Value) And ValeurRecherche.Value <> "" Then
        MonDico.Add ValeurRecherche.Value, ValeurRecherche.Value
        End If
        Next ValeurRecherche
        ActiveSheet.Cells(2, 8).Resize(MonDico.Count, 1) = Application.Transpose(MonDico.Items)
        DerniereLigne = Cells(2, 8).End(xlDown).Row
        Range("H2:H" & DerniereLigne).Select
        With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields
        .Clear
        .Add Key:=Cells(2, 8), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
        .SetRange Range("H2:H" & DerniereLigne)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        End With
        End With
        For i = 2 To DerniereLigne
        La_Valeur = Cells(i, 8).Value
        Cells(i, 9).Value = WorksheetFunction.CountIf(MaPlage, La_Valeur)
        Next i
        'Application.Goto Range("A1"), True
        End Sub

        1. Merci Mike-31 pour ta solution qui sera fort utile pour d'autre utilisateur :)

          De mon côté j'ai aussi trouvé une solution sans utiliser VBA mais simplement les fonctions proposées par Excel dans une feuille parallèle à mon tableau de données (monficher) :

          * Pour trouver les différents caractères
          =SI(ESTERREUR(EQUIV(monfichier!B3;$C$2:C2;0));monfichier!B3;"")

          * Pour comptabiliser les caractères
          =SI($C3<>"";NB.SI(monfichie!B:B;$C3);"")

          Que j'étends sur mes différentes colonnes de "mon fichier" puis ensuite je calcule les totaux.

          Je sais pas si mon explication est très claire mais si ma solution intéresse quelqu'un je peux rentrer plus dans les détails.

          Bonne journée à tous
          1. Re,

            Si ton problème est résolu, tu voudras bien nous le confirmer que l'on mette le statut de la discussion en résolu
            ou doit on te proposer d'autres codes

            Cordialement