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
 

antoinantoine

XLDnaute Nouveau
Bonjour Yurperqod, merci pour ton aide.

Je viens d'apprendre l'existence des filtres élaborés, mais je ne pense pas que cela marchera: je cherche la similitude sur deux colonnes, mais il y en a une dizaine en tout, et la similitude n'est jamais sur toutes les colonnes. Je ne l'avais pas expliqué clairement pardon.
 

antoinantoine

XLDnaute Nouveau
Exactement le même problème... Macro rapide sur C et lente sur G :(


Sub DeleteDuplicates()
lastrow2 = Sheets("Raw Data").Range("A" & Sheets("Raw Data").Rows.Count).End(xlUp).Row
For i = 2 To lastrow2
j = i + 1
If Range("S" & i).Value = Range("S" & j).Value Then
Range("G" & i).ClearContents
End If
Next
 

Yurperqod

XLDnaute Occasionnel
Supprimer les doublons n'existe pas dans Excel 2007 et comme le titre de la discussion indique Excel 2007, il faut utiliser le Filtre elaboré.
(Voir mon premier message, le N° 2)

antoinantoine
Tu peux mettre un fichier exemple à notre disposition?
 

Yurperqod

XLDnaute Occasionnel
Un exemple de macro avec le Filtre Elaboré
Mais la macro supprime tous les doublons trouvés
ExempleA.jpg

Sub Macro1()
Range("C2").FormulaR1C1 = "=RC[-2]<>RC[-1]"
Range("A1:B17").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("C1:C2"), _
CopyToRange:=Range("D1"), Unique:=False
End Sub
 

antoinantoine

XLDnaute Nouveau
J'ai en fait sur un autre onglet de nombreux calculs qui utilisent le tableau, donc je ne peux pas trop le transformer, et j'ai besoin de tout sur la même page (c'est assez compliqué j'en ai conscience). En fait sans cette bizarrerie qui fait que ma macro initiale supprime rapidement sur la colonne C mais par sur la colonne G, je serais tranquille, c'est vraiment étrange...

Merci pour ton aide en tout cas
 

Yurperqod

XLDnaute Occasionnel
Et avec 2 colonnes supplémentaires et le filtre automatique?
ExempleC.jpg
En colonne J: =C2&G2 (formule recopiée vers le bas)
En colonne K:=NB.SI(J:J;J2) (formule recopiée vers le vas)
En M2:=SOUS.TOTAL(3;C:C)-1

Le filtre automatique est appliqué sur la colonne K (critère=1) et la colonne G (critère=100 mètres)
La formule en M2 donne alors 2 participants au 100 mètres.
 

antoinantoine

XLDnaute Nouveau
J'ai fini par trouver une solution sur internet... Le calcul se fait rapidement en ajoutant des balises "
Application.EnableEvents = False
Application.Calculation = xlCalculationManual"

Merci pour ta solution quand même, qui est un peu moins pratique en l'occurrence mais je retiens pour plus tard!
 

Statistiques des forums

Discussions
312 266
Messages
2 086 652
Membres
103 353
dernier inscrit
jerem'