[VBA] - Suppression de doublons dans une plage de données @Jean-Eric

Bonjour,

Pour la suppression des doublons sur une grandes base de données et la conservation de ce qui m'intéresse, je souhaitais passer par un dictionnaire.

J'ai notamment trouvé la proposition de Jean-Eric ici : https://forum.excel-pratique.com/viewtopic.php?t=80573 qui me semble correspondre tout à fait à ce que j'essaie de faire.

Je l'ai légèrement adapté, pour qu'elle ne porte que sur certaines colonnes et pour que le résultat soit renseigné sur une autre feuille.

J'arrive à la faire fonctionner, mais n'arrive pas à avoir exactement ce que je cherche.

Plutôt que de vérifier toutes les colonnes, j'aimerais vérifier les colonnes variabilisées (jo0, jo1, jo2, jo3, jo4, jo5, jo6 et jo7) soit 8 colonnes réparties sur 110 colonnes.

J'aimerais que le résultat final soit renseigné sur la feuille active et n'affiche que les 8 colonnes en question, repositionnées en fonction d'autres variables de colonnes : codeun (= col 62) ; eur (= col 7) ; habnat (= col 2) ; enj (= col 10) ; surf (= col 4) ; cori (= col 5) ; cdzh (= col 8) et etco (= col 9)

Savez-vous comment je devrais m'y prendre ?

Je pense que les modifications à faire se situent à ce niveau de la macro :

a = .Cells(1).CurrentRegion.Value

où l'ensemble des données sont prises en compte.

Peut-on définir un tableau constitué uniquement par les colonnes : (jo0, jo1, jo2, jo3, jo4, jo5, jo6 et jo7 et sur lequel il est possible ensuite d'exécuter le reste du code ?

Je joins un document à ce post pour que vous puissiez voir. Je l'ai construit à l'identique par rapport au fonctionnement de mon document initial.

L'exécution du code se fait dans la feuille "TEST".

Merci de votre attention !

Bonne soirée

Bonjour,

Problème résolu en m'y prenant ainsi :

Public Sub DeleteDuplicates() 'Jean-Eric Excel-Pratique
Dim Dict As Object
Dim a, b()
Dim x As String
Dim i As Long ', J As Long
Dim k As Long, m As Long

Call Set_Feuilles 'temporaire
Call Check_join 'temporaire
Call ent_ei 'temporaire
Call decl_var 'temporaire

With jo
    a = .Cells(1).CurrentRegion.Value
    Set Dict = CreateObject("scripting.dictionary")

    For i = 1 To UBound(a, 1)
        '
        x = ""
        x = x & a(i, jo0) & a(i, jo1) & a(i, jo2) & a(i, jo3) & a(i, jo4) & a(i, jo5) & a(i, jo6) & a(i, jo7)
        Dict(x) = ""
    Next i

    ReDim b(1 To Dict.Count, 1 To UBound(a, 2))
    Set Dict = CreateObject("scripting.dictionary")
    m = 0

    For i = 2 To UBound(a, 1)
        x = ""
        x = x & a(i, jo0) & a(i, jo1) & a(i, jo2) & a(i, jo3) & a(i, jo4) & a(i, jo5) & a(i, jo6) & a(i, jo7)
        If Not Dict.exists(x) Then
            m = m + 1
            b(m, codeun) = a(i, jo0)
            b(m, eur) = a(i, jo1)
            b(m, habnat) = a(i, jo2)
            b(m, enj) = a(i, jo3)
            b(m, surf) = a(i, jo4)
            b(m, cori) = a(i, jo5)
            b(m, cdzh) = a(i, jo6)
            b(m, etco) = a(i, jo7)
            Dict(x) = ""
        End If
    Next i
End With

    Application.ScreenUpdating = False
With ActiveSheet.Cells(2, 1)
        .Resize(UBound(b), UBound(b, 2)) = b
End With
    Set Dict = Nothing
End Sub

Je n'ai pas trouvé mieux, si vous avez une proposition pour améliorer ce code je suis toujours preneur !

En attendant, il fait très bien le travail et très rapidement !

Bonne journée !

Rechercher des sujets similaires à "vba suppression doublons plage donnees jean eric"