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. 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
          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