Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 NOT deplus je comprends que tu as beaucoup de formules + evenementielle
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…