Suppression des Valeurs Dupliquées dans Excel VBA
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.