Gestion intelligente des doublons

Bonjour,

Je dispose d'une fonction permettant de supprimer les doublons en gardant le dernier (le plus en bas) et en concaténant les données.

Sub doublon_G()

For iC = 1 To 100
   If Cells(1, iC) = "isin" Then Exit For
Next iC
iLR = Cells(Rows.Count, iC).End(3).Row
iLC = Cells(1, Columns.Count).End(1).Column
Tablo = Range(Cells(1, 1), Cells(iLR, iLC))
For i = iLR To 3 Step -1
   For ii = i - 1 To 2 Step -1
      If Tablo(ii, iC) = Tablo(i, iC) Then

         For k = 1 To iLC
          If Tablo(ii, k) <> "" And Tablo(i, k) = "" Then
            Tablo(i, k) = Tablo(ii, k)

          End If
            Tablo(ii, k) = ""

         Next
      End If
   Next
Next
Range(Cells(1, 1), Cells(iLR, iLC)) = Tablo
For i = iLR To 2 Step -1
If Cells(i, iC) = "" Then Rows(i).Delete
Next

End Sub

Je voudrais coupler ce code avec un autre qui me permettrai avant toutes choses de détecter les lignes de ces doublons pour ensuite les supprimer et les concaténer. Et non pas de balayer toute la sélection en attente de trouver un doublon. Cela me ferrai gagner un temps non négligeable.

Merci d'avance.

19classeur1.xlsm (220.25 Ko)

Bonjour

Bonnes fêtes

Un exemple de données avec des doublons et un exemple de résultat seraient plus profitables

Car actuellement aucune concaténation

Tes données sont elles triées, et dans la négative peut-on les trier ?

Merci bonnes fêtes a toi aussi.

Voici un fichier avec un exemple du résultat attendu, qu'on doit appliquer au 25 000 lignes de la colonne isin.

Les données ne sont pas triées mais peuvent l'être.

22classeur1.xlsm (205.31 Ko)

Bonjour

Bonnes fêtes

Tu t'en fou un peu de ton programme, tu donnes un exemple sans rapport avec tes données

A tester

Option Explicit

Sub doublon_G()
Dim Col As Integer, ColDer As Integer, K As Integer
Dim J As Long, JJ As Long, LigDer As Long
Dim tablo

  Application.ScreenUpdating = False
  For Col = 1 To 100
   If Cells(1, Col) = "isin" Then Exit For
  Next Col
  LigDer = Cells(Rows.Count, Col).End(xlUp).Row
  ColDer = Cells(1, Columns.Count).End(xlToLeft).Column
  Range(Cells(1, 1), Cells(LigDer, ColDer)).Sort Key1:=Cells(1, Col), Order1:=xlAscending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
  tablo = Range(Cells(1, 1), Cells(LigDer, ColDer))

  For J = LigDer To 3 Step -1
    For JJ = J - 1 To 2 Step -1
      If tablo(JJ, Col) = tablo(J, Col) Then
        For K = 1 To ColDer
          If tablo(JJ, K) <> "" And tablo(J, K) = "" Then
            tablo(J, K) = tablo(JJ, K)
          End If
          tablo(JJ, K) = ""
        Next K
      Else
        Exit For
      End If
    Next JJ
  Next J

  Range(Cells(1, 1), Cells(LigDer, ColDer)) = tablo
  Range(Cells(1, 1), Cells(LigDer, ColDer)).Sort Key1:=Cells(1, Col), Order1:=xlAscending, _
        Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
  On Error Resume Next
  Range(Cells(1, Col), Cells(LigDer, Col)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  On Error Goto 0
End Sub

J'ai simplement donné un exemple imagé pour que vous compreniez le principe.

Merci , le code marche.

10 sec pour 25 000 lignes. Contre plusieurs minutes avec l'ancien code.

Bonsoir

Je voulais dire que pour vérifier les résultats que j'obtiens avec la macro et ton exemple ce n'est pas le meilleur moyen d'avoir une solution efficace

J'ai modifié la macro sans être sur qu'avec d'autres données elle fonctionne bien

Je n'aurai pas eu cette incertitude si tu avais donné un bon exemple, et je n'aurais pas pensé que pour toi cela n'avait pas d'importance

Sur ce bonne soirée et bonnes fêtes

Re- Bonjour

Je reviens à la charge car je me rend compte que le tri des données est trop contraignant par rapport aux autres codes associées à mon processus.

Serait - il possible d'avoir le même résultat mais en gardant l'ordre des isins ?

Merci.

Rechercher des sujets similaires à "gestion intelligente doublons"