Médiaforma

VBA Excel – Recherche de doublons dans une colonne

Partagez cet article sur vos réseaux

Cette section va vous présenter un code utile qui pourra certainement vous servir un jour ou l’autre. Le but du jeu est de trouver les cellules qui apparaissent en double (ou plus) dans la colonne où se trouve la cellule active. Il n’y a rien de bien compliqué : il suffit de comparer tour à tour toutes les cellules de la colonne à la première, puis à la deuxième, puis à la troisième, ainsi de suite jusqu’à l’avant-dernière cellule de la colonne. Ici, la couleur d’arrière-plan de la cellule qui apparait en double sera modifiée. Mais rien ne vous empêche de modifier le code pour faire tout autre chose si vous le souhaitez. Voici le code utilisé :

Sub RechercherDoublons()

  Dim col, nbCells, i, j

  col = ActiveCell.Column

  nbCells = Application.WorksheetFunction.CountA(Range(Columns(col), Columns(col)))

  For i = 1 To nbCells - 1

    For j = i + 1 To nbCells

      If Cells(i, col) = Cells(j, col) Then

        Cells(j, col).Interior.Color = RGB(255, 0, 0)

      End If

    Next j

  Next i

End Sub

Examinons ce code.

La première ligne définit les variables qui seront utilisées dans le code :

Dim col, nbCells, i, j

La deuxième ligne stocke dans la variable col la colonne dans laquelle se trouve la cellule active. C’est dans cette colonne que les doublons seront recherchés :

col = ActiveCell.Column

La troisième ligne compte le nombre de cellules non vides de la colonne col. Le résultat est stocké dans la variable nbCells :

nbCells = Application.WorksheetFunction.CountA(Range(Columns(col), Columns(col)))

Le bloc de code suivant utilise deux boucles For Next imbriquées. La première parcourt les cellules de la première (1) à l’avant-dernière (nbCells-1) :

For i = 1 To nbCells - 1

La seconde parcourt les cellules d’indices compris entre i+1 et nbCells :

For j = i + 1 To nbCells

Si les cellules d’indice i, col et j, col sont identiques, un doublon a été trouvé :

If Cells(i, col) = Cells(j, col) Then

Dans ce cas, la cellule d’indice j, col est colorée en rouge :

Cells(j, col).Interior.Color = RGB(255, 0, 0)
 
Commentaires

Bonjour, Ce code serait parfait pour ce que je veux en faire, mais à la place de colorier les doublons en rouge, je voudrais que la macro mette sur le même ligne, dans la colonne ‘BO’, l’information ‘Doublon’ mais je n’y arrive pas, auriez-vous une suggestion (j’ai besoin de garder les anciennes lignes pour des stats mais ne souhaite conserver que la ligne ‘active’. Merci :) Christophe

J’ai essayé d’insérer ce code sans succès :
Range(choix2 & ligne).cell.Offset(0, 67).Value = « Doublon »

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).cell.Offset(0, 67).Value = « Doublon »
Else
Range(ligne & « : » & ligne).Interior.ColorIndex = 3
End If
Exit For
End If
Next
End If

Trackbacks for this post

Laissez un commentaire