OVH Cloud OVH Cloud

doublon

4 réponses
Avatar
Nico
Bonsoir,

J'ai une BD qui peut aller jusqu'à 50000 lignes et 40 colonnes le soucis est
que j'ai bcp de lignes identiques. Je souhaiterais par consequent supprimer
toutes les lignes en doublons.

Je suis evidemment aller chez disciplus et me suis inspiré de la macro créé
par Jacques Chaussard :
Sub doublon()
ActiveSheet.UsedRange.EntireRow.Sort Key1:=ActiveSheet.UsedRange.Cells(1)
lin = Columns(1).Find("*", , , , , xlPrevious).Row
encore:
keep = False
For col = 1 To Rows(lin).Find("*", , , , , xlPrevious).Column
If Cells(lin, col) <> Cells(lin - 1, col) Then keep = True
Next col
If keep = False Then Rows(lin).Delete
lin = lin - 1
If lin > 1 Then GoTo encore
End Sub

Mais ca ne fonctionne pas, soit ma ligne de titre bouge, soit parfois je
rentre dans le debogage. Avez vous une solution autre que le filtre élaboré
car j'ai peur qu'il ne soit pas assez costaud pour ce gros tableau.

Merci

Nico

4 réponses

Avatar
Nico
J'ai également pris la macro de Frédéric Sigonneau :

Sub SupprLignesIdentiques()
'fs, mpfe
Dim cell As Range, CellsToSuppr As Range, derLi As Long

Application.ScreenUpdating = False
derLi = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To derLi
If Cells(i, 1) = Cells(i + 1, 1) Then
If CellsToSuppr Is Nothing Then
Set CellsToSuppr = Cells(i + 1, 1)
Else: Set CellsToSuppr = Union(CellsToSuppr, Cells(i + 1, 1))
End If
End If
Next i
'suppression de toutes les lignes identiques
'trouvées en une seule passe
If Not CellsToSuppr Is Nothing Then CellsToSuppr.EntireRow.Delete

End Sub

Mais ca ne fonctionne pas non plus, il faut dire que je peux trés bien avoir
2, 3 ou 4 lignes exactement identique et n'importe ou dans le tableau.

Nico


Bonsoir,

J'ai une BD qui peut aller jusqu'à 50000 lignes et 40 colonnes le soucis
est

que j'ai bcp de lignes identiques. Je souhaiterais par consequent
supprimer

toutes les lignes en doublons.

Je suis evidemment aller chez disciplus et me suis inspiré de la macro
créé

par Jacques Chaussard :
Sub doublon()
ActiveSheet.UsedRange.EntireRow.Sort Key1:¬tiveSheet.UsedRange.Cells(1)
lin = Columns(1).Find("*", , , , , xlPrevious).Row
encore:
keep = False
For col = 1 To Rows(lin).Find("*", , , , , xlPrevious).Column
If Cells(lin, col) <> Cells(lin - 1, col) Then keep = True
Next col
If keep = False Then Rows(lin).Delete
lin = lin - 1
If lin > 1 Then GoTo encore
End Sub

Mais ca ne fonctionne pas, soit ma ligne de titre bouge, soit parfois je
rentre dans le debogage. Avez vous une solution autre que le filtre
élaboré

car j'ai peur qu'il ne soit pas assez costaud pour ce gros tableau.

Merci

Nico





Avatar
Ardus Petus
Le fltre élaboré est (au moins) aussi costaud qu'un tri!!!

Cordialement
--
AP

"Nico" a écrit dans le message de
news:
Bonsoir,

J'ai une BD qui peut aller jusqu'à 50000 lignes et 40 colonnes le soucis
est

que j'ai bcp de lignes identiques. Je souhaiterais par consequent
supprimer

toutes les lignes en doublons.

Je suis evidemment aller chez disciplus et me suis inspiré de la macro
créé

par Jacques Chaussard :
Sub doublon()
ActiveSheet.UsedRange.EntireRow.Sort Key1:¬tiveSheet.UsedRange.Cells(1)
lin = Columns(1).Find("*", , , , , xlPrevious).Row
encore:
keep = False
For col = 1 To Rows(lin).Find("*", , , , , xlPrevious).Column
If Cells(lin, col) <> Cells(lin - 1, col) Then keep = True
Next col
If keep = False Then Rows(lin).Delete
lin = lin - 1
If lin > 1 Then GoTo encore
End Sub

Mais ca ne fonctionne pas, soit ma ligne de titre bouge, soit parfois je
rentre dans le debogage. Avez vous une solution autre que le filtre
élaboré

car j'ai peur qu'il ne soit pas assez costaud pour ce gros tableau.

Merci

Nico





Avatar
Ardus Petus
La macro de Frédéric est nettement plus performante

--
AP

"Nico" a écrit dans le message de
news:
Bonsoir,

J'ai une BD qui peut aller jusqu'à 50000 lignes et 40 colonnes le soucis
est

que j'ai bcp de lignes identiques. Je souhaiterais par consequent
supprimer

toutes les lignes en doublons.

Je suis evidemment aller chez disciplus et me suis inspiré de la macro
créé

par Jacques Chaussard :
Sub doublon()
ActiveSheet.UsedRange.EntireRow.Sort Key1:¬tiveSheet.UsedRange.Cells(1)
lin = Columns(1).Find("*", , , , , xlPrevious).Row
encore:
keep = False
For col = 1 To Rows(lin).Find("*", , , , , xlPrevious).Column
If Cells(lin, col) <> Cells(lin - 1, col) Then keep = True
Next col
If keep = False Then Rows(lin).Delete
lin = lin - 1
If lin > 1 Then GoTo encore
End Sub

Mais ca ne fonctionne pas, soit ma ligne de titre bouge, soit parfois je
rentre dans le debogage. Avez vous une solution autre que le filtre
élaboré

car j'ai peur qu'il ne soit pas assez costaud pour ce gros tableau.

Merci

Nico





Avatar
Youky
Ca doit le faire sans problème, place toi sur ta feuille et lance cette
macro
Youky
Sub SuppLigneDoublons()
derlig = [A65536].End(xlUp).Row
Range("A1:A" & derlig).AdvancedFilter Action:=xlFilterInPlace,
Unique:=True
For k = 2 To derlig
If Rows(k).Hidden = True Then Rows(k).Delete: k = k - 1
Next
ActiveSheet.ShowAllData
End Sub

"Nico" a écrit dans le message de news:

J'ai également pris la macro de Frédéric Sigonneau :

Sub SupprLignesIdentiques()
'fs, mpfe
Dim cell As Range, CellsToSuppr As Range, derLi As Long

Application.ScreenUpdating = False
derLi = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To derLi
If Cells(i, 1) = Cells(i + 1, 1) Then
If CellsToSuppr Is Nothing Then
Set CellsToSuppr = Cells(i + 1, 1)
Else: Set CellsToSuppr = Union(CellsToSuppr, Cells(i + 1, 1))
End If
End If
Next i
'suppression de toutes les lignes identiques
'trouvées en une seule passe
If Not CellsToSuppr Is Nothing Then CellsToSuppr.EntireRow.Delete

End Sub

Mais ca ne fonctionne pas non plus, il faut dire que je peux trés bien
avoir
2, 3 ou 4 lignes exactement identique et n'importe ou dans le tableau.

Nico


Bonsoir,

J'ai une BD qui peut aller jusqu'à 50000 lignes et 40 colonnes le soucis
est

que j'ai bcp de lignes identiques. Je souhaiterais par consequent
supprimer

toutes les lignes en doublons.

Je suis evidemment aller chez disciplus et me suis inspiré de la macro
créé

par Jacques Chaussard :
Sub doublon()
ActiveSheet.UsedRange.EntireRow.Sort Key1:¬tiveSheet.UsedRange.Cells(1)
lin = Columns(1).Find("*", , , , , xlPrevious).Row
encore:
keep = False
For col = 1 To Rows(lin).Find("*", , , , , xlPrevious).Column
If Cells(lin, col) <> Cells(lin - 1, col) Then keep = True
Next col
If keep = False Then Rows(lin).Delete
lin = lin - 1
If lin > 1 Then GoTo encore
End Sub

Mais ca ne fonctionne pas, soit ma ligne de titre bouge, soit parfois je
rentre dans le debogage. Avez vous une solution autre que le filtre
élaboré

car j'ai peur qu'il ne soit pas assez costaud pour ce gros tableau.

Merci

Nico