Macro ou vba pour supprimer les doublons

titi7500

XLDnaute Junior
Bonjour,

J'ai dans la colonne A un numero de dossier, sauf que quand on apport une modification une nouvelle ligne se crée avec le meme numéro, j'aimerais pour éviter de me tromper, supprimer automatiquement et sans cliquer nul part les doublons de tel sorte que le fichier excel ne garde que la dernière ligne vis à vis des doublons.

PS: le masquage doit se faire sur toute la ligne horizontale en cas de doublon.

Merci par avance.

titi
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour

titi7500
Macro ou VBA ?
(C'est blanc bonnet et bonnet blanc, non ? ;))
Alors voici une procédure événementielle (sortie de mon grenier)
A mettre dans le code de la feuille concernée par les doublons
(Donc clic-droit sur l'onglet -> Visualiser le code => C'est là qu'il faut copier le code VBA ci-dessous
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'code initial de jindon,francisé à ma sauce
'[oz+j18811|2250]
    Dim rng As Range, r As Range, msg As String, x As Range, temp, check
    Set rng = Intersect(Columns(1), Target)
    If Not rng Is Nothing Then
        Application.EnableEvents = False
        For Each r In rng
            If Not IsEmpty(r.Value) Then
                If Application.CountIf(Columns(1), r.Value) > 1 Then
                    msg = msg & "Localisation: " & r.Address(0, 0) '& vbCrlf & r.Value
                    If x Is Nothing Then
                        r.Activate
                        Set x = r
                    Else
                        Set x = Union(x, r)
                    End If
                End If
            End If
        Next
        If Len(msg) Then
        'Décommenter la ligne ci-dessous si on veut afficher le msgbox
            'MsgBox msg, vbCritical, "Doublon détecté!"
            x.Select
            For Each r In x
                r.Activate
                Do
                    temp = Application.InputBox("Saisir la donnée correcte dans " & _
                        r.Address(0, 0), "Donnée incorrecte : " & IIf(Len(temp), temp, r.Value))
                    check = Application.CountIf(Columns(1), temp)
                Loop Until (check = 0) * (temp <> "") * (temp <> False)
                r.Value = temp
                temp = ""
            Next
        End If
        Set rng = Nothing
        Set x = Nothing
        Application.EnableEvents = True
    End If
End Sub
 

don_pets

XLDnaute Occasionnel
hello,

sinon tu peux aussi tester ça :

VB:
Set mondico = CreateObject("Scripting.Dictionary")
a = Range("A2:A" & [a65000].End(xlUp).Row)

b = Range("B2:B" & [b65000].End(xlUp).Row)
    For Each c In a
    mondico(c) = ""
    Next c
    For Each c In b
    mondico(c) = ""
    Next c
[E2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)

Ta liste A est en colonne A, la B en B (je sais on est fou) et le résultat en colonne E

Enjoy
 

Discussions similaires

Réponses
26
Affichages
867

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin