[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 !