Repérer les doublons, supprimer les doublons ou les lignes vides sont des problèmes récurrents avec Excel.  Pour gérer toutes ces situations et aider le plus grand nombre d’entre vous, j’ai décidé de créer un « outil » facile à utiliser et qui ne nécessite aucune connaissance particulière !


Avant que les visiteurs qui ne connaissent rien aux macros ne prennent peur en voyant le code, je préfère le répèter : c’est une solution simple d’utilisation et adaptée aux débutants (tout est détaillé dans la vidéo).

 

Cet outil vous permettra (au choix) de :

  1. Colorer les doublons (colorer la cellule seule)
  2. Colorer les doublons (colorer la ligne entière)
  3. Effacer les doublons (en laissant la ligne vide)
  4. Supprimer les doublons (en supprimant la ligne entière)
  5. Supprimer les lignes vides

Explications détaillées :

Le code à copier :
Sub doublons_et_lignes_vides()
 
    'Macro : Sébastien Mathier - Excel-Pratique.com
    'A propos de cette macro : www.blog-excel.com/gerer-doublons-et-lignes-vides/
    
    choix = InputBox("Avant d'utiliser cet outil, n'oubliez pas d'enregistrer votre fichier !" & Chr(10) & Chr(10) & "Choisissez l'action qui vous intéresse :" & Chr(10) & Chr(10) & "1. Colorer les doublons (colorer la cellule)" & Chr(10) & "2. Colorer les doublons (colorer la ligne entière)" & Chr(10) & "3. Effacer les doublons (en laissant la ligne vide)" & Chr(10) & "4. Supprimer les doublons (ligne entière)" & Chr(10) & "5. Supprimer les lignes vides" & Chr(10) & Chr(10) & "Entrez le n° de l'action et cliquez sur OK :", "Gestion des doublons - Blog-Excel.com")
    If choix = "" Then Exit Sub
 
    choix2 = ""
    If choix = 1 Or choix = 2 Or choix = 3 Or choix = 4 Then choix2 = InputBox("Entrez la lettre de la colonne où les doublons doivent être recherchés :", "Gestion des doublons - Blog-Excel.com")
    If choix = 5 Then choix2 = InputBox("Entrez la lettre de la colonne à prendre en compte (si la cellule de cette colonne est vide, la ligne sera supprimée) :", "Gestion des doublons - Blog-Excel.com")
    If choix2 = "" Then Exit Sub
 
    Application.ScreenUpdating = False
    test = Timer
 
    der_ligne = Range(choix2 & "65000").End(xlUp).Row
 
    Dim tab_cells()
    ReDim tab_cells(der_ligne - 1)
 
    For ligne = 1 To der_ligne
        tab_cells(ligne - 1) = Range(choix2 & ligne)
    Next
 
    nb = 0
    If choix = 4 Or choix = 5 Then compteur = 0
 
    For ligne = 1 To der_ligne
        contenu = tab_cells(ligne - 1)
 
        If (choix = 1 Or choix = 2) And contenu <> "" Then 'Colorer doublons
            For i = 1 To der_ligne
                If contenu = tab_cells(i - 1) And ligne <> i Then 'Si doublon
                    nb = nb + 1
                    If choix = 1 Then
                        Range(choix2 & ligne).Interior.ColorIndex = 3
                    Else
                        Range(ligne & ":" & ligne).Interior.ColorIndex = 3
                    End If
                    Exit For
                End If
            Next
        End If
 
        If (choix = 3 Or choix = 4) And ligne > 1 And contenu <> "" Then 'Effacer/supprimer doublons
            For i = 1 To ligne - 1
                If contenu = tab_cells(i - 1) Then 'Si doublon
                    nb = nb + 1
                    If choix = 3 Then
                        Range(ligne & ":" & ligne).ClearContents
                    Else
                        Range(ligne + compteur & ":" & ligne + compteur).Delete
                        compteur = compteur - 1
                    End If
                    Exit For
                End If
            Next
        End If
 
        If choix = 5 And contenu = "" Then 'Lignes vides
            Range(ligne + compteur & ":" & ligne + compteur).Delete
            compteur = compteur - 1
            nb = nb + 1
        End If
    Next
 
    res_test = Format(Timer - test, "0" & Application.DecimalSeparator & "000")
    Application.ScreenUpdating = True
 
    If nb = 0 And choix = 5 Then
        dd = MsgBox("Aucune ligne vide trouvée ...", 64, "Résultat")
    ElseIf nb = 0 Then
        dd = MsgBox("Aucun doublon trouvé dans la colonnne " & UCase(choix2) & " ...", 64, "Résultat")
    ElseIf choix = 5 Then
        dd = MsgBox(nb & " lignes supprimées (en " & res_test & " secondes)", 64, "Résultat")
    ElseIf choix = 4 Then
        dd = MsgBox(nb & " doublons supprimés (en " & res_test & " secondes)", 64, "Résultat")
    ElseIf choix = 3 Then
        dd = MsgBox(nb & " doublons effacés (en " & res_test & " secondes)", 64, "Résultat")
    Else
        dd = MsgBox(nb & " doublons passés en rouge (en " & res_test & " secondes)", 64, "Résultat")
    End If
 
End Sub

 

Si vous pensez en avoir besoin un jour, n’oubliez pas de mettre cette page dans vos favoris ;-)

 

Avez-vous apprécié cette macro ? Avez-vous d’éventuelles questions à son sujet ?

N’hésitez pas à laisser des commentaires …