Suppression des Valeurs Dupliquées dans Excel VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

David Gagnon

Last updated on décembre 23, 2021

Ce tutoriel montre comment supprimer les doublons à l’aide de la méthode RemoveDuplicates en VBA.

Méthode RemoveDuplicates

Lorsque des données sont importées ou collées dans une feuille de calcul Excel, elles peuvent souvent contenir des valeurs en double. Vous pouvez avoir besoin de nettoyer les données entrantes et de supprimer les doublons.

Heureusement, il existe une méthode simple dans l’objet Range de VBA qui vous permet de le faire.

Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes

La syntaxe est la suivante : RemoveDuplicates([Columns],[Header]

  • [Columns] – Spécifiez les colonnes à vérifier pour les valeurs en double. Toutes les colonnes doivent correspondre pour être considérées comme des doublons.
  • [Header] – Les données comportent-elles un en-tête ? xlNo (par défaut), xlYes, xlYesNoGuess

Techniquement, les deux paramètres sont facultatifs. Cependant, si vous ne spécifiez pas l’argument Columns, aucun doublon ne sera supprimé.

La valeur par défaut pour Header est xlNo. Bien sûr, il est préférable de spécifier cet argument, mais si vous avez une ligne d’en-tête, il est peu probable que la ligne d’en-tête corresponde à un doublon.

Notes d’Utilisation de RemoveDuplicates

  • Avant d’utiliser la méthode RemoveDuplicates, vous devez spécifier une plage à utiliser.
  • La méthode RemoveDuplicates supprime toutes les lignes contenant des doublons, mais conserve la ligne originale avec toutes les valeurs.
  • La méthode RemoveDuplicates ne fonctionne que sur les colonnes et non sur les lignes, mais un code VBA peut être écrit pour rectifier cette situation (voir plus loin).

Données Utilisées pour les Exemples VBA

Afin de montrer comment le code d’exemple fonctionne, les données suivantes sont utilisées :

Suppression des Lignes en Double

Ce code supprimera toutes les lignes dupliquées en se basant uniquement sur les valeurs de la colonne A :

Sub SupprimerDoublonsEx1()
Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Remarquez que nous avons explicitement défini la plage « A1:C8 ». Au lieu de cela, vous pouvez utiliser la plage UsedRange. La plage UsedRange déterminera la dernière ligne et colonne utilisée de vos données et appliquera RemoveDuplicates à cette plage entière :

Sub SupprimerDoublons_UsedRange()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

UsedRange est incroyablement utile, car il vous évite d’avoir à définir explicitement la plage.

Après avoir exécuté ces codes, votre feuille de calcul ressemblera maintenant à ceci :

Remarquez que, comme seule la colonne A (colonne 1) a été spécifiée, le doublon  » Pommes  » qui figurait auparavant à la ligne 5 a été supprimé. Cependant, la quantité (colonne 2) était différente.

Pour supprimer les doublons, en comparant plusieurs colonnes, nous pouvons spécifier ces colonnes en utilisant une méthode Array.

Suppression des Doublons en Comparant Plusieurs Colonnes

Sub SupprimerDoublons_ColonnesMultitples()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub

Le tableau indique à VBA de comparer les données en utilisant les deux colonnes 1 et 2 (A et B).

Les colonnes du tableau ne doivent pas nécessairement être dans un ordre consécutif.

Sub ExempleSimple()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYes
End Sub

Dans cet exemple, les colonnes 1 et 3 sont utilisées pour la comparaison des doublons.

Cet exemple de code utilise les trois colonnes pour vérifier les doublons :

Sub ExempleSimple()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYes
End Sub

Suppression des Lignes en Double d’un Tableau

La fonction RemoveDuplicates peut également être appliquée à un tableau Excel exactement de la même manière. Cependant, la syntaxe est légèrement différente.

Sub ExempleSimple()
ActiveSheet.ListObjects("Tableau1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _
En-tête:=xlYes
End Sub

Cette opération supprime les doublons dans le tableau sur la base des colonnes 1 et 3 (A et C). Cependant, elle ne met pas en ordre le formatage des couleurs du tableau, et vous verrez des lignes vides colorées au bas du tableau.

Suppression des Doublons dans les objets VBA Array

Si vous avez besoin de supprimer les valeurs en double d’une variable de type « Array » (tableau), vous pouvez bien sûr sortir votre tableau dans une plage Excel, utiliser la méthode RemoveDuplicates et réassigner le tableau à la variable VBA.

Cependant, nous avons également écrit une procédure VBA pour supprimer les doublons d’un tableau.

Suppression des Doublons dans les Lignes de Données à l’Aide de VBA

La méthode RemoveDuplicates ne fonctionne que sur les colonnes de données, mais en sortant des sentiers battus, vous pouvez créer une procédure VBA pour traiter les lignes de données.

Supposons que vos données se présentent comme suit sur votre feuille de calcul:

Vous avez les mêmes doublons que précédemment dans les colonnes B et E, mais vous ne pouvez pas les supprimer à l’aide de la méthode RemoveDuplicates.

La solution consiste à utiliser VBA pour créer une feuille de calcul supplémentaire, y copier les données en les transposant en colonnes, supprimer les doublons, puis les recopier en les transposant en lignes.

Sub DoublonsEnRangées()
    'Désactivez la mise à jour de l'écran et les alertes - nous voulons que le code s'exécute
    'correctement sans que l'utilisateur voie ce qui se passe
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Ajoutez une nouvelle feuille de calcul
    Sheets.Add After:=ActiveSheet
    'Nommez la nouvelle feuille de calcul 'FeuilleTemporaire'
    ActiveSheet.Name = "FeuilleTemporaire"
    'Copie les données de la feuille de calcul d'origine
    Sheets("Feuil1").UsedRange.Copy
    'Activez la nouvelle feuille qui a été créée
    Sheets("FeuilleTemporaire").Activate
    'Coller transpose les données pour qu'elles soient maintenant en colonnes
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Suppression des doublons pour les colonnes 1 et 3
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    'Effacez les données de la feuille de calcul d'origine
    Sheets("Feuil1").UsedRange.ClearContents
    'Copie les colonnes de données de la nouvelle feuille de calcul créée
    Sheets("FeuilleTemporaire").UsedRange.Copy
    'Activez la feuille originale
    Sheets("Feuil1").Activate
    'Coller transposer les données non dupliquées
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Supprimez la feuille de copie - elle n'est plus nécessaire
    Sheets("FeuilleTemporaire").Delete
    'Activez la feuille originale
    Sheets("Feuil1").Activate
    'Réactivez la mise à jour de l'écran et les alertes
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Ce code suppose que les données originales en lignes se trouve sur une feuille de calcul appelée ‘Feuil1’

Après avoir exécuté ce code, votre feuille de calcul ressemblera à ceci :

Le doublon « Pommes » dans la colonne E a maintenant été supprimé. L’utilisateur se retrouve avec un classeur « propre », sans feuilles de calcul superflues, et l’ensemble du processus s’est déroulé en douceur, sans clignotement de l’écran ni messages d’avertissement.

vba-free-addin

Module Complémentaire d'Exemples de Code VBA

Accédez facilement à tous les exemples disponibles sur le site.

Naviguez simplement dans le menu, cliquez, et le code sera inséré directement dans votre module. Module complémentaire .xlam.

(Aucune installation requise!)

Téléchargement gratuit

Retour aux exemples de code VBA