web-dev-qa-db-fra.com

Supprimer les doublons de la plage de cellules dans Excel vba

J'essaie de supprimer les doublons dans Excel 2013 VBA. mais j'obtiens l'erreur "l'objet ne prend pas en charge cette propriété ou cette méthode". Le problème est que je n'ai pas de plage statique à sélectionner. Je veux supprimer les doublons du curseur de colonne 'abcd'.

Cells.Find(what:="abcd").Activate
ActiveCell.EntireColumn.Select
Set rng = Selection
ActiveSheet.rng.RemoveDuplicates
11
Hideandseek

Vous devez indiquer à la méthode Range.RemoveDuplicates quelle colonne utiliser. De plus, puisque vous avez indiqué que vous disposez d'une ligne d'en-tête, vous devez le dire à la méthode .RemoveDuplicates.

Sub dedupe_abcd()
    Dim icol As Long

    With Sheets("Sheet1")   '<-set this worksheet reference properly!
        icol = Application.Match("abcd", .Rows(1), 0)
        With .Cells(1, 1).CurrentRegion
            .RemoveDuplicates Columns:=icol, Header:=xlYes
        End With
    End With
End Sub

Votre code d'origine semblait vouloir supprimer les doublons d'une seule colonne tout en ignorant les données environnantes. Ce scénario est atypique et j'ai inclus les données environnantes afin que le processus .RemoveDuplicates ne brouille pas vos données. Publiez un commentaire si vous vouliez vraiment isoler le processus RemoveDuplicates dans une seule colonne.

14
user4039065

Pour supprimer les doublons d'une seule colonne

 Sub removeDuplicate()
 'removeDuplicate Macro
 Columns("A:A").Select
 ActiveSheet.Range("$A$1:$A$117").RemoveDuplicates Columns:=Array(1), _ 
 Header:=xlNo 
 Range("A1").Select
 End Sub

si vous avez un en-tête, utilisez Header:=xlYes

Augmentez votre portée selon vos besoins.
vous pouvez atteindre 1000 comme ceci:

ActiveSheet.Range("$A$1:$A$1000")

Plus d'informations ici ici

5
mahi_0707