Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Suppression des doublons et récupération données cellules

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

UltrAzimut

XLDnaute Nouveau
Bonsoir,
Sur une feuille ("Feuil1") j'ai une liste de noms sur plusieurs colonnes. J'ai donc défini une plage "NOM".
Sur une feuille appelé "Feuil2", j'ai un bouton et je souhaiterai que lorsque je clique dessus, la liste de noms s'affiche dans la colonne A à partir de la ligne 6.

Pour ce faire, ma macro est la suivante :

Code:
Sub RecupNom()
Dim i As Integer
i = 1
With Sheets("Feuil1")
For Each C In .Range("NOM")
     If Not IsEmpty(C) Then
     With Sheets("Feuil2")
         .Range("A" & 5 + i) = [C]
         .Range("B" & 5 + i) = C.Offset(0, 1)
     End With
     i = i + 1
     End If
Next
End With
End Sub

Maintenant, cette liste de noms comporte des doublons que je souhaiterai supprimer lorsque je génère la liste.

Comment puis je procéder ?

Merci
 
Re : Suppression des doublons et récupération données cellules

Bonsoir UltrAzimut, le Forum

La méthode d'utilisation d'un Object Collection en Forçant une Erreur si il y a Duplication de sa Key permet très simplement d'éradiquer des Doublons.

Voici cette méthode appliquée à ton Code :


Code:
Option Explicit
Sub RecupNom()
Dim i As Integer, x As Integer
Dim ColBase As New Collection
Dim TabPlage As Variant, Container As Variant
Dim Item As Variant
 
    With Sheets("Feuil1")
        TabPlage = .Range("MyName")
    End With
    
 
On Error Resume Next
    For i = 1 To UBound(TabPlage)
        If Not IsEmpty(TabPlage(i, 1)) Then
            ColBase.Add CStr(Trim(TabPlage(i, 1))) & "#" & CStr(Trim(TabPlage(i, 2))), CStr(Trim(TabPlage(i, 1))) & "#" & CStr(Trim(TabPlage(i, 2)))
        End If
    Next
On Error GoTo 0
    For Each Item In ColBase
      Container = Split(Item, "#")
      x = x + 1
        
             With Sheets("Feuil2")
                 .Range("A" & 5 + x) = Container(0)
                 .Range("B" & 5 + x) = Container(1)
             End With
    Next
 
 
End Sub

NB Cet Algo détectera les doublons d'info sur les Deux Colonnes (Exemple Colonne "A" = Nom, Colonne "B" = Adresse) par conséquent Même Nom, Même Adresse sera considéré comme doublon (et ignoré) par contre même Nom, adresse différente sera accepté.

Cordialement

@+Thierry
 
Re : Suppression des doublons et récupération données cellules

Bonsoir le fil, _Thierry,

_Thierry que cela fait plaisir à te revoir.... Très apprécié car il y avait un très gros manque.

Bonne soirée.

Jean-Pierre
 
Re : Suppression des doublons et récupération données cellules

Bonsoir le forum,

Merci Thierry pour tes explications et la modification de mon code. Néanmoins, le résultat attendu est correcte lorsque la plage de cellule est continue, lorsque celle ci est discontinu sur plusieurs colonnes, seule la première colonne est traité.
Comme un ex est plus parlant, je joins un fichier avec un classeur composé de 4 feuilles. Le bouton valider de la feuille 2 traite les infos de la feuille 1 dont la plage de cellule "NOMS" est continue. Sur la feuille 4, le bouton traite les infos de la feuille 3, la plage de cellules discontinue est nommée "NOMSBIS". Le résultat n'est alors pas correcte puisque tous les noms concernés ne sont pas récupérés.
D'apres mes recherches, l'utilisation de "application.union" pourrait etre une solution mais j'avoue ne pas avoir obtenu le bon résultat.

ex :
Code:
 With Sheets("XXXXX")
        TabPlage = .Range(.Cells(x, x), .Cells(x, x))
        TabPlage = Application.Union(TabPlage, .Cells(x,x), Cells(x, x).Resize(25))
        TabPlage = Application.Union(TabPlage, .Cells(x, x), Cells(x, x).Resize(x))
        TabPlage = Application.Union(TabPlage, .Cells(x, x), Cells(x, x).Resize(x))
    End With

Merci pour l'aide apportée
 

Pièces jointes

Re : Suppression des doublons et récupération données cellules

Bonsoir le forum,

Lorsque les plages sont discontinues, pour arriver au résultat que je souhaitais, il m'a fallu modifier le code comme ceci :
Code:
Option Explicit
Sub RecupNom()
Dim i As Integer, x As Integer
Dim ColBase As New Collection
Dim TabPlage, TabPlage2, TabPlage3 As Variant, Container As Variant
Dim Item As Variant
 
    With Sheets("Feuil1")
        TabPlage = .Range("Plage1") //
        TabPlage2 = .Range("Plage2") // on suppose 3 plages 
        TabPlage3 = .Range("Plage3") //
    End With
    
 
On Error Resume Next
    For i = 1 To UBound(TabPlage)
        If Not IsEmpty(TabPlage(i, 1)) Then
            ColBase.Add CStr(Trim(TabPlage(i, 1))) & "#" & CStr(Trim(TabPlage(i, 2))), CStr(Trim(TabPlage(i, 1))) & "#" & CStr(Trim(TabPlage(i, 2)))
        End If
    Next
On Error Resume Next
    For i = 1 To UBound(TabPlage2)
        If Not IsEmpty(TabPlage2(i, 1)) Then
            ColBase.Add CStr(Trim(TabPlage2(i, 1))) & "#" & CStr(Trim(TabPlage2(i, 2))), CStr(Trim(TabPlage2(i, 1))) & "#" & CStr(Trim(TabPlage2(i, 2)))
        End If
    Next
On Error Resume Next
    For i = 1 To UBound(TabPlage3)
        If Not IsEmpty(TabPlage3(i, 1)) Then
            ColBase.Add CStr(Trim(TabPlage3(i, 1))) & "#" & CStr(Trim(TabPlage3(i, 2))), CStr(Trim(TabPlage3(i, 1))) & "#" & CStr(Trim(TabPlage3(i, 2)))
        End If
    Next
On Error GoTo 0
    For Each Item In ColBase
      Container = Split(Item, "#")
      x = x + 1
        
             With Sheets("Feuil2")
                 .Range("A" & 5 + x) = Container(0)
                 .Range("B" & 5 + x) = Container(1)
             End With
    Next
 
 
End Sub

Merci Thierry pour le code de départ

@ bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
786
Réponses
5
Affichages
912
Réponses
7
Affichages
178
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
740
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…