Répérer les lignes dont les valeurs doublonnent en désordre

Bonjour à tous !

Voici un petit tableau dans lequel j'aimerais faire apparaître les doublons lorsqu'Excel détecte que les 3 valeurs sont les mêmes, mêmes si elles sont positionnées dans un ordre différent. Ce qui est le cas en ligne 2 et en ligne 4 par exemple.

Ligne 2 : 1998 2000 2005

Ligne 4 : 2005 1998 2000

Quelqu'un aurait-il une formule pour résoudre ceci ? Un grand merci par avance.

doublons excel

Bonjour,

A tester.

ALT F11 pour ouvritr l'éditeur VBE. Voir module1.

Cdlt.

Public Sub DEMO()
Dim rngData As Range, Cell As Range
    Application.ScreenUpdating = False
    Set rngData = Cells(1).CurrentRegion
    MsgBox rngData.Address
    For Each Cell In rngData
        If WorksheetFunction.CountIf(rngData, Cell.Value) > 1 Then
            Cell.Interior.ColorIndex = 36
        End If
    Next
    Set rngData = Nothing
End Sub

Edit : virer la ligne msgbox rngData.Address

bonjour

et si au lieu de concatener tu avais fait la somme ?

16pampelune.xlsx (8.94 Ko)

ensuite ;un simple nb.si repris dans la formule de MFC

cordialement

Bonjour @ tous,

@ Tulipe_4 :

le fait de la faire avec SOMME() n'est pas correcte, voir sur l'image un exemple contradictoire :

tulipe

@ + +

salut r@chid

je le savais ; mais j'ai tenté le coup ; c'etais une proposition du dimanche ;bien vu ;

je pense qu'un mixe somme (plage& colonne)*1 en matriciel de maniere a obtenir un nombre "indiscutable" pourrait faire la balle ;faut voir

cordialement

re

a la place de ma somme "bidon"

=SOMME((A2:C2/GAUCHE(A2:C2;2))*1)

matriciel qui crée une difference indiscutable atirer vers le bas

cordialement

Re,

ou bien avec formule classique comme celle-ci :

=MAX(A2:C2)/MIN(A2:C2)*MOYENNE(A2:C2)

@ + +

re

ah oui ......ça devrait plaire ;le but est que ce soit indiscutable et simple a mettre en oeuvre

je me demande si il n'y aurait pas moyen de faire une formule directe pour la MFC ;malgrè le carractere matriciel (induit) de l'analyse de la plage "modifiée"

cordialement

en y repensant ; avec MOYENNE tout court

Hello,

Si je peux me permettre : Moyenne() ne détectera pas de différence entre 1994/1996/1998 et 1993/1996/1999.

Merci pour toutes ces propositions ! Je viens de faire un test avec la formule matricielle.

Malheureusement avec des chiffres sous la centaine, cela ne marche pas, à moins que j'aie fait une fausse manip'...

Voir capture ci-dessous.

En tout cas, c'est sympa de vous être penchés sur la question.

Je vais également voir le VBA, mais j'avoue que j'aurais préféré une fonction sans macros.

Après si y'a pas le choix, je ferai avec bien sûr !

doublons excel sous la centaine

Bonsoir le forum,

A tester :

En passant par un tableau intermédiaire.

Option Explicit

Sub Surligne_Doublons()
Dim a(), i As Long, n As Long, z As String, txt As String
    Application.ScreenUpdating = False
    With Sheets(1)
        .Range("e2").CurrentRegion.Clear
        With .Range("a1").CurrentRegion
            .Interior.ColorIndex = xlNone: n = 1
            For i = 2 To .Rows.Count
                .Rows(i).Copy .Offset(n, .Columns.Count + 1)(1)
                With .Offset(n, .Columns.Count + 1).Resize(1, 3)
                    .Sort .Rows(1), 1, , , , , , , , , xlSortRows
                End With
                n = n + 1
            Next
        End With
        With .Range("e2").CurrentRegion
            a = .Value
            With CreateObject("Scripting.Dictionary")
                .CompareMode = vbTextCompare
                For i = 1 To UBound(a, 1)
                    z = a(i, 1) & ";" & a(i, 2) & ";" & a(i, 3)
                    If Not .exists(z) Then
                        .Add z, Nothing
                    Else
                        txt = txt & Sheets(1).Cells(i + 1, 1).Resize(, 3).Address(0, 0)
                        Sheets(1).Range(Mid$(txt, 1)).Interior.ColorIndex = 42: txt = ""
                    End If
                Next
            End With
            .Clear
        End With
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Re pamplelune67,

Eventuellement comme ceci.

Option Explicit

Sub Surligne_Doublons1()
Dim a(), i As Long, n As Long, txt As String
    Application.ScreenUpdating = False
    With Sheets(1)
        .Range("e2").CurrentRegion.Clear
        With .Range("a1").CurrentRegion
            .Interior.ColorIndex = xlNone: n = 1
            For i = 2 To .Rows.Count
                .Rows(i).Copy .Offset(n, .Columns.Count + 1)(1)
                With .Offset(n, .Columns.Count + 1).Resize(1, 3)
                    .Sort .Rows(1), 1, , , , , , , , , xlSortRows
                End With
                n = n + 1
            Next
        End With
        With .Range("e2").CurrentRegion
            .Columns(.Columns.Count + 1).Formula = "=e2&f2&g2"
            .Columns(.Columns.Count + 2).Formula = "=countif(h:h,h2)"
        End With
        With .Range("e2").CurrentRegion
            a = .Value
            For i = 1 To UBound(a, 1)
                If a(i, 5) > 1 Then
                    txt = txt & Sheets(1).Cells(i + 1, 1).Resize(, 3).Address(0, 0)
                    Sheets(1).Range(Mid$(txt, 1)).Interior.ColorIndex = 38: txt = ""
                End If
            Next
            .Clear
        End With
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Bonsoir @ tous,

gloub a écrit :

Hello,

Si je peux me permettre : Moyenne() ne détectera pas de différence entre 1994/1996/1998 et 1993/1996/1999.

@ gloub :

oui c'est sûr, et c'est pour cela j'ai joué avec le MIN() et MAX() tu peux vérifier avec la formule que j'ai faite pour te rassurer.

@ + +

Bonjour,

Malheureusement avec des chiffres sous la centaine, cela ne marche pas, à moins que j'aie fait une fausse manip'...

Essaie la formule de r@chid qui produit moins d'anomalies.

Mais des combinaisons différentes peuvent toujours produire le même nombre.

Ex : 92, 17, 95 et 7, 22, 76 donnent toutes les deux 380.

Si tu veux 0 erreurs ça pourrait être :

=TEXTE(PETITE.VALEUR(A2:C2;1);"0000")&TEXTE(PETITE.VALEUR(A2:C2;2);"0000")&TEXTE(PETITE.VALEUR(A2:C2;3);"0000")

mais comme on passe sur des chaines ça risque d'être plus lent qu'une solution en vba.

A voir selon le nombre de lignes.

eric

Rechercher des sujets similaires à "reperer lignes valeurs doublonnent desordre"