VBA Excel suppression des doublons

Bonjour,
Je voudrais chercher toutes les occurrences doublons d'un colonne dans un autre colonne(ici E et F) s' il y a un doublon alors il faudra changer la cellule de la colonne 'E' en "doublon", idéalement supprimer toutes les cellules de la même ligne du doublon jusqu'à la cellule se trouvant sur colonne 'E'.
J'ai testé ce code mais ça marche pas!!
Et merci d'avance de votre aide.
Sub test()

Dim i As Double
Dim j As Double
i = 1
j = 1
With Worksheets("filtre") ' On parcourt la colonne E
Do While (.Range("E" & i) <> "fin")
'on parcourt la colonne F
Do While (.Range("F" & j) <> "fin")
If (.Range("E" & i) = .Range("F" & j)) Then
.Range("E" & i) = "doublon"
Exit Do
End If
j = j + 1
Loop

i = i + 1

Loop
' Ici on teste la cellule actuelle :
End With
End Sub

5 réponses

  1. Contributeur
    Bonjour

    idéalement supprimer toutes les cellules de la même ligne du doublon se trouvant sur la colonne 'E' jusqu'à la colonne 'E'.

    Oui ????
    0
    1. c à dire jusqu'à la cellule se trouvant sur la colonne E
      0
  2. Bonjour,
    J'ai trouvé une solution.Mais très lourde vu que j'ai 600000 enregistrement dans mon fichier excel.
    S'il y a une amélioration, je suis preneur (effectuer la suppression dans la première boucle)
    Voici le code
    Sub Doublon()
     
        Dim Plage_E As Range
        Dim Plage_F As Range
        Dim PlageTempo As Range
        Dim Cel_E As Range
        Dim Cel_F As Range
        Dim I As Integer
        
        'défini les plages
        Set Plage_E = Range([E1], [E65536].End(xlUp))
        Set Plage_F = Range([F1], [F65536].End(xlUp))
     
        For Each Cel_E In Plage_E
        
            'recherche la valeur de chaque cellule de la colonne E dans
            'la colonne F
            Set Cel_F = Plage_F.Find(Cel_E, , xlValues)
            
            'si une occurence est trouvé dans la colonne F
            'inscrit "Doublon" dans la cellule concernée de la colonne E
            If Not Cel_F Is Nothing Then
            
                    Cel_E = "Doublon"
     
            End If
            
        Next Cel_E
        
        'pour la suppression de cellules, il est préférable
        'de parcourir la plage en partant de la fin
        For I = Plage_E.Count To 1 Step -1
            
            'si la cellule Ex contient le mot "Doublon"
            'les cellules de Ax à Ex sont supprimées
            If Plage_E(I) = "Doublon" Then
            
                Range(Plage_E(I).Offset(0, -4), Plage_E(I)).Delete xlUp
                
            End If
        Next I
        
    End Sub
    0
    1. Contributeur
      Ok je regarde en fin d'aprem
      pour la suppression; un "clearcontents" ne suffirait il pas ?
      Michel
      0
      1. Contributeur
        Tout compte fait en guise d"apéro

        Sub supp_doublons() 
        Dim Lig_E As Long, Lig_F As Long 
        Dim Dico_F As Object, Cptr As Long 
        Dim Ref  'a compléter 
        Dim T_out, Cptr_t As Long 
        Dim start As Single 'pour essai rapidité 
        
        start = Timer 'essai 
        'mémorise colonne F 
        Lig_F = Cells(Cells.Rows.Count, 6).End(xlUp).Row 
        Set Dico_F = CreateObject("scripting.dictionary") 
        For Cptr = 2 To Lig_F 
            Ref = Cells(Cptr, 6) 
            If Not Dico_F.exists(Ref) Then 
                Dico_F.Add Ref, Ref 
            End If 
        Next 
        
        'mémorise lignes en doublon dans E 
        Lig_E = Cells(Cells.Rows.Count, 5).End(xlUp).Row 
        ReDim T_out(0) 
        For Cptr = 2 To Lig_E 
            ReDim Preserve T_out(Cptr_t) 
            Ref = Cells(Cptr, 5) 
            If Dico_F.exists(Ref) Then 
                T_out(Cptr_t) = Cells(Cptr, 5).Row 
               Cptr_t = Cptr_t + 1 
            End If 
        Next 
        
        'supprime les valeurs en doublons colonne A à E 
        Application.ScreenUpdating = False 
        For Cptr = 0 To UBound(T_out) - 1 
            Range(Cells(T_out(Cptr), 1), Cells(T_out(Cptr), 5)).Clear 
        Next 
        
        ' supprime les cellules vides dans la colonne E et trie 
        Range("E2:E" & Lig_E).Sort Range("E2") 
        
        MsgBox Timer - start & " secondes" 
        
        End Sub


        temps pour 1000 lignes 0,12 sec

        nota: je ne sais pas si la fonction de tri "sort" fonctionne pour 600000 lignes !!!!

        sinon, essaies avec cette instruction
        Range("E2:E" & Lig_E).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
        au lieu de
        Range("E2:E" & Lig_E).Sort Range("E2")

        Michel
        0
        1. Merci pour le code, mon code tourne depuis 4 heures et je sais pas quand est ce que ça va s'arrêter, l'excel ne répond plus, est ce que à cause de mon code ou bien excel s'est bloqué?
          0
        2. Contributeur
          Bonsoir tout le monde,

          Tu peux arreter la macro par ctrl+pause pour voir si elle tourne, et la faire continuer ou l'arreter définitivement
          eric
          0
        3. Contributeur
          Bonjour à tous,

          Ton code ou le mien?
          Je viens de ré-essayer: pas de problème avec 1000 lignes

          petite remarque: Avec Excel, Microsoft déconseille des listes de données de plus de 15000 lignes et préconise dans ce cas l'emploi d'Access...
          0
        4. Bonjour,
          Mon code, je l'ai laissé en exécution depuis hier dans le travail.
          Y' a t'il une méthode d'exporter mes données vers Access?
          0
        5. Contributeur
          Peut ^tre pourrais tu essayer le mien? j'ai l'impression que tu te fous complètement du temps que j'ai passé à essayer de t'aider...
          0