Comment gérer les doublons sur deux colonnes VBA

Résolu
Bonjour,

Je travaille actuellement sur un fichier excel pour mes études et cela fait maintenant deux semaines que je bloque, je cherche sur les forum des solutions mais aucune ne convient.

Alors je vous explique, je cherche dans un premier temps à identifier des doublons mais selon des critères particuliers:

Je cherche à identifier des doublons en les surlignant par rapport à la colonnes A et D petite information les doublons apparaissent lors d'injections d'autres fichiers

Donc si il y a deux numéro identiques dans la colonne A et que dans la colonne D les statuts sont les même je voudrais qu'il soit supprimer par contre si dans la colonne D les statut sont différent je voudrais qu'il apparaissent en vert par exemple ( si possible le premier identifier en vert et le second en rouge ).

Voilà ce que j'aimerais obtenir



J'aimerais également ajouter un bouton permettant d'effectuer cette action en cliquant dessus

En espérant que vous pourrez m'aider,

Cordialement

8 réponses

  1. Option Explicit
    
    Const coCod = "A"   ' colonne code
    Const coSta = "D"   ' colonne statut
    Const lideb = 2     ' premiere ligne des données
    Const vert = 50     ' code couleur
    Const rouge = 3     ' idem
    
    Private Sub btOK_Click()
    Dim li As Long, lifin As Long, cod As Long, sta As String, lili As Long
    Dim obj As Object, plage As Range
    ' inhibe la maj de la feuille après chaque modification
    Application.ScreenUpdating = False
    ' derniere ligne non vide de la colone cocod
    lifin = Range(coCod & Rows.Count).End(xlUp).Row
    ' boucle sur les lignes en partant de la dernière (à cause des suppressions eventuelles de lignes
    For li = lifin To lideb + 2 Step -1
      ' plage où on va rechercher le code cod
      Set plage = Range(coCod & lideb & ":" & coCod & li - 1)
      ' code et statut ligne i
      cod = Range(coCod & li).Value
      sta = Range(coSta & li).Value
      ' recherche cod dans plage
      Set obj = plage.Find(cod, , , xlWhole)
      ' si cod est trouvé
      If Not obj Is Nothing Then
        ' on recupere sa ligne
        lili = obj.Row
        ' si le statut ligne lili = statut ligne i alors on supprime la ligne li
        If Range(coSta & lili).Value = sta Then
          Rows(li).Delete
        ' sinon on met en rouge la ligne lili et en vert la ligne li
        Else
          Range(coCod & lili & ":" & coSta & lili).Font.ColorIndex = rouge
          Range(coCod & li & ":" & coSta & li).Font.ColorIndex = vert
        End If
      End If
    Next li
    ' activation de la maj de la feuille
    Application.ScreenUpdating = True
    End Sub

    Bon après midi
    3
    1. Merci ccm81
      Bon après midi également
      0
    2. Bonjour ccm81,

      Pourrait-tu m'indiquer comment appliquer une règle de surbrillance à la place de la couleur du texte.

      Merci d'avance
      Cordialement
      0
  2. Pour la couleur de la cellule
    Range(coCod & lili & ":" & coSta & lili).Interior.ColorIndex = 4

    Cdlmnt
    2
    1. Merci ccm
      0
  3. Bonjour

    Peut il y avoir des "triplons" ou plus ? Si oui, que doit on en faire ?

    Cdlmnt
    1
    1. Non logiquement il ne devrait pas y en avoir car si il y a un doublon et que le statut ne change pas d'état il est supprimé.
      0
  4. Donc si il y a deux numéro identiques dans la colonne A et que dans la colonne D les statuts sont les même je voudrais qu'il soit supprimer
    lequel ? le premier ou le second ?
    1
    1. c'est les même donc pas d'importance que ce soit le premier ou le second
      0
  5. Un début de réponse à adapter

    https://www.cjoint.com/?3CEqnVADpI6

    Cdlmnt
    1
    1. Merci ccm81

      j'ai du mal a comprendre ce que t'as fait mais je vais me pencher dessus.
      juste une petit question je fais comment pour modifier les colonnes ? à place de la colonne "D" je marque "F" ou il faut que je change d'autre chose dans les lignes ?
      0
  6. juste une petit question je fais comment pour modifier les colonnes ? à place de la colonne "D" je marque "F"
    Oui
    1
    1. ça fonctionne Merci beaucoup ccm81
      0
    2. Si tu as beaucoup de lignes, ajoutes ceci pour inhiber la maj de la feuille pendant l'exécution
      Après les déclarations de variables
      Application.ScreenUpdating = False
      Avant End
      Application.ScreenUpdating = True
      0
    3. Oui, il y a pour le moment 700 lignes d'accord j'ajoute ca
      0
  7. Si c'est fini, merci de mettre le sujet à Résolu (en haut à droite de ton premier message)

    Bonne fin de journée
    1
    1. Bonjour ccm81,

      J'essaye de comprendre le code que tu m'as envoyé hier mais j'ai un peu de mal
      pourrais-tu m'aider en mettant des commentaires à coté des lignes stp ?
      0
  8. Que veux tu dire par surbrillance
    Si c'est caractère gras
    Range(coCod & lili & ":" & coSta & lili).Font.Bold = True

    Cdlmnt
    1
    1. Bonjour ccm,

      Je parle de la couleur de la cellule sur excel quand on veut faire ceci il y a marqué regle de surbrillance.

      Merci

      Cordialement
      0