VBA - Suppression de doublons

antoinantoine

XLDnaute Nouveau
Bonjour,

J'ai un très grand tableau contenant beaucoup de données, et certaines sont en double et je voudrais donc les supprimer avant de procéder aux calculs que je réalise sur ce tableau.

Pour imager le problème, disons que j'ai un tableau de 2 colonnes et d'un certain nombre de ligne. Quand deux lignes consécutives ont la même valeur dans chaque colonne, je souhaite supprimer la ligne. Les données apparaissent ainsi:

A 1
A 2
A 3
A 3
A 4
A 5
A 6
B 6
B 7
C 3
C 4
C 5
C 5
C 6

Donc par chance, les doublons sont toujours consécutifs dans la liste. L'idée est donc dans la liste ci-dessus de supprimer une ligne A 3 et une ligne C 5.

J'ai réussi une macro sans trop de problème, elle fonctionne mais elle est extrêmement lente. J'ai donc décidé, à la place de supprimer la ligne entière, de juste supprimer la valeur. Et là mystère: si je supprime la valeur en première colonne, la macro s'exécute très rapidement, mais si je supprime la valeur en deuxième colonne, elle est à nouveau très lente. Et bien sûr, c'est sur la deuxième colonne que je veux supprimer.


Dans la réalité, ma première valeur est en colonne C et l'autre en G. Voici mon code:
__________________________________________________________
Sub DeleteDuplicates()
Dim lastrow2 As Long
Dim train1 As String
Dim train2 As String
Dim mod1 As String
Dim mod2 As String

Application.ScreenUpdating = False
lastrow2 = Range("A" & Sheets("Raw Data").Rows.Count).End(xlUp).Row
For i = 2 To lastrow2
train1 = Range("C" & i).Value
train2 = Range("C" & i + 1).Value
mod1 = Range("G" & i).Value
mod2 = Range("G" & i + 1).Value
If train1 = train2 Then
If mod1 = mod2 Then
Range("G" & i).Value = ""
i = i - 1
End If
End If
Next

Application.ScreenUpdating = True
End Sub
_________________________________________________________
(le i=i-1 est là en cas de valeurs triplées)

Merci à ceux qui m'aideront, et désolé si la question a déjà été posée mais je n'ai rien trouvé.

Antoine
 

laetitia90

XLDnaute Barbatruc
bonjour toutes:):) & tous:):)
un code brut comme je comprends???

VB:
Sub es()
Dim t(), m As Object, z, x As Long, y As Byte
With Application
.Calculation = 3: .ScreenUpdating = 0: .EnableEvents = 0
t = Range("a2:i" & Cells(Rows.Count, 1).End(3).Row)
Range("a2:i" & Cells(Rows.Count, 1).End(3).Row).ClearContents
Set m = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
z = t(i, 3) & t(i, 7)
If Not m.Exists(z) Then
m.Add z, z
x = x + 1
For y = 1 To 9: t(x, y) = t(i, y): Next y
End If
Next i
[a2].Resize(x, 9) = t
.Calculation = 1: .ScreenUpdating = 1: .EnableEvents = 1
End With
End Sub

ps j'avais oublie NOTo_O deplus je comprends que tu as beaucoup de formules + evenementielle
 
Dernière édition:

Statistiques des forums

Discussions
312 078
Messages
2 085 112
Membres
102 783
dernier inscrit
Basoje