Microsoft 365 Suppression de doublons

ivan27

XLDnaute Occasionnel
Bonsoir à tous,

Je cherche à supprimer des lignes avec doublons.

Dans le classeur en pièce jointe :
Une feuille ''kpi'' avec un tableau qui s'étend sur les colonnes "BH:CG" sur lequel je dois supprimer des lignes avec doublons.
Une feuille ''liste'' avec un tableau sur les colonnes "A:B"

1 - Si sur le tableau de la feuille ''kpi'' une référence de la colonne BY existe sur la feuille ''liste'' colonne B, alors je supprime la ligne concernée sur la feuille ''kpi''.
2 - Si sur le tableau de la feuille ''kpi'' je trouve des références identiques sur la colonne BY, alors je supprime la ligne qui contient la valeur ''XXXXXX'' en colonne BH.

J'ai coloré les lignes qui doivent être supprimées dans mon exemple.

Merci d'avance pour votre aide,

Ivan
 

Pièces jointes

  • doublon.xlsx
    21.9 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Un essai en VBA. Le code est dans le module de la feuille "kpi"..
Cliquer sur le bouton Hop !
Pas spécialement recherché la rapidité d'exécution. Si trop lent, le signaler pour une autre version.

Le code :
VB:
Sub SupprCustRef()
Dim derlig&, i&, ref, neq, t, r, colBH&, colCG&, effacer As Boolean, N&, M&
   Application.ScreenUpdating = False
   If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
   derlig = Cells(Rows.Count, "bh").End(xlUp).Row
   If derlig = 2 Then Exit Sub
   For i = Cells(Rows.Count, "bh").End(xlUp).Row To 3 Step -1
      ref = Cells(i, "by")
      On Error Resume Next
      neq = Application.Match(ref, Worksheets("liste").Columns("b:b"), 0)
      On Error GoTo 0
      If Not IsError(neq) Then
         Range("bh" & i & ":cg" & i).Delete xlShiftUp: N = N + 1
      End If
   Next i
   derlig = Cells(Rows.Count, "bh").End(xlUp).Row
   If derlig <= 3 Then Exit Sub
   Range(Cells(2, "bh"), Cells(derlig, "cg")).Sort key1:=Range("by2"), order1:=xlAscending, Header:=xlYes
   t = Range("bh1:by" & derlig + 1)
   colBH = 1: colCG = UBound(t, 2)
   For i = derlig + 1 To 3 Step -1
      If InStr(t(i, colBH), "XXXXXX") > 0 Then
         effacer = False
         effacer = (t(i + 1, colCG) = t(i, colCG)) Or (t(i - 1, colCG) = t(i, colCG))
         If effacer Then Range("bh" & i & ":cg" & i).Delete xlShiftUp: M = M + 1
      End If
   Next i
   MsgBox N & " ligne(s) supprimée(s) - Pas dans liste" & vbLf & vbLf & _
          M & " ligne(s) supprimée(s) - Doublon XXXXXX"
End Sub
 

Pièces jointes

  • ivan27- doublon- v1.xlsm
    41.6 KB · Affichages: 13
Dernière édition:

ivan27

XLDnaute Occasionnel
Re bonsoir le forum, chris, mapomme,

Merci beaucoup mapomme pour cette proposition qui fonctionne parfaitement sur mon fichier test.
chris, mon niveau sur PowerQuery n'est pas suffisamment élevé pour que je m'en sorte dans cette situation.
Bonne fin de week-end à tous
Ivan
 

chris

XLDnaute Barbatruc
RE
Re bonsoir le forum, chris, mapomme,

Merci beaucoup mapomme pour cette proposition qui fonctionne parfaitement sur mon fichier test.
chris, mon niveau sur PowerQuery n'est pas suffisamment élevé pour que je m'en sorte dans cette situation.
Tu as besoin de quelqu'un pour te donner le code VBA donc ton niveau VBA n'est pas meilleur que ton niveau PowerQuery...

Ayant déjà vu que tu privilégiais VBA dans d'autres fils, je n'ai pas pris la peine de faire la requête, très simple au demeurant.

Sorry mais je suis toujours ébahi par ce genre de commentaire.
Personne parmi ceux qui postent ici des solutions PowerQuery ne se sont réveillés un matin expert PQ.
C'est en forgeant qu'on devient forgeron et donc en essayant qu'on progresse...
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 025
Messages
2 084 736
Membres
102 648
dernier inscrit
radhwane taibi