Re : supprimer doublon par vba
Mon code ci-dessous ,colorie les doublons trouvé dans un fichier excel , mais qui ne depasse pas 500 lignes.
et il marche aussi pour 1000 lignes ...le principe est de marqué chaque ligne vérifier pour qu'elle ne soit pas vérifier une autre fois.Une fois que l'utilisateur ajoute des lignes a son fichier excel mon programme vérifie ces lignes ajoutés en les comparant avec 8000 lignes puis s'il trouve que la ligne actuelle a un doublon , il met a jour la colonne Doublon de cette ligne a 0.Sinon il met 1.
et pendant ma prochaine recherche des doublons , mon programme parcour que les lignes ou la colonne doublon = 0 , pour eviter e parcourire 8000 lignes
Ce que je souhaite c'est de colorer les doublons vite fait et que cela prenne pas beaucoup de temps .
J'ai une idée que j'arrive pas a mettre en place, c'est de Trier d'abord mais 3 champs...donc si la ligne a un doublon il sera dans la ligne suivante , je le colore puis je passe au bloc suivant....
'......................................................
'.Date :17/05/2010 .
'.Hnazih :Optimisition de la vérification des doublons.
'.Description :Marquer chaque ligne vérifiée pour ne .
'. plus la traitée. .
'......................................................
Sub test()
Dim i As Integer
Dim cel1, cel2 As Variant
Dim tmp0, tmp1, tmp2 As String
Application.ScreenUpdating = False
Sheets("Budget CVDE").Select
numLinesBudget = 4
i = 5
For Each cel1 In Range("IV5:IV65536")
If cel1.Value <> vbNullString Then
numLinesBudget = numLinesBudget + 1
If Sheets("Budget CVDE").Cells(numLinesBudget, 256).Value <> 1 Then '1 : Ligne déja vérifier
i = numLinesBudget 'Verifier cette ligne avec les autres lignes
Sheets("Budget CVDE").Cells(numLinesBudget, 256).Value = 1
MsgBox (i)
For Each cel2 In Range("IV5:IV65536")
i = i + 1
If Sheets("Budget CVDE").Cells(i, 2).Value <> vbNullString Then
tmp0 = Sheets("Budget CVDE").Cells(i, 5).Value
If tmp0 = Sheets("Budget CVDE").Cells(numLinesBudget, 5).Value Then
tmp1 = Sheets("Budget CVDE").Cells(numLinesBudget, 6).Value
tmp2 = Sheets("Budget CVDE").Cells(i, 6).Value
If tmp1 = tmp2 Then
Sheets("Budget CVDE").Cells(numLinesBudget, 256).Value = 0 '0: ligne doublante et doit etre retraitée la prochaine exécution
Range(Cells(numLinesBudget, 1), Cells(numLinesBudget, 2)).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
Range(Cells(i, 1), Cells(i, 2)).Select
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If
End If
Else
Exit For
End If
Next cel2
End If
Else
Exit For
End If
Next cel1
Application.ScreenUpdating = True
End Sub