Supprimer ligne doublon avec une condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bobjazz

XLDnaute Impliqué
Bonjour le forum,

j'ai une liste dans une feuille excel avec plein de doublon que je ne desire pas . J'ai mis ce code qui fonctionne très bien,

Sub supprimeDoublons()

MaCellule = ("D2")
Range(MaCellule).Select
ActiveCell.CurrentRegion.Sort Key1:=Range(MaCellule), Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend
End Sub

mais je voudrais rajouter que si je trouve des doublons, je garde la ligne qui a des données dans la colonne L.
Je m'explique :
Je contrôle en fonction de la colonne D et si je trouve 3 lignes en doublons il garde celle qui a les données dans la colonne L et là je ne sais pas faire

merci d'avance

Bobjazz
 
Re : Supprimer ligne doublon avec une condition

Bonsoir,

Essaie en ajoutant un test dans le IF:

Code:
    MaCellule = ("D2")
    Range(MaCellule).Select
    ActiveCell.CurrentRegion.Sort Key1:=Range(MaCellule), Order1:=xlAscending, Header:=xlYes
    donnee1 = ActiveCell
    ActiveCell.Offset(1, 0).Select
    
    While ActiveCell <> ""
        If ActiveCell = donnee1 And ActiveCell.Offset(0, 8) = "" Then
            ActiveCell.EntireRow.Delete
            ActiveCell.Offset(-1, 0).Select
            donnee1 = ActiveCell
            ActiveCell.Offset(1, 0).Select
        Else
            donnee1 = ActiveCell
            ActiveCell.Offset(1, 0).Select
        End If
    Wend

Bonne soirée,

mth
 
Re : Supprimer ligne doublon avec une condition

Bonjour le fil, Bonjour le forum,

Pour éviter les Select qui ralentissent l'exécution du code je te propose une autre méthode :
Code:
Sub supprimeDoublons()
Dim MaCellule As Range 'déclare la variable MaCellule
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim x As Integer 'déclare la variable x (incrément)
Dim donnee1 As String 'déclare la variable donnee1 (type à adapter à ton cas)
 
Set MaCellule = Range("D2") 'définit la variable MaCellule
MaCellule.CurrentRegion.Sort Key1:=MaCellule, Order1:=xlAscending, Header:=xlYes 'tri croissant par rapport à la colonne D de la plage des cellules adjacentes à MaCellule
dl = Cells(Application.Rows.Count, 4).End(xlUp).Row 'définit la dernière ligne de la colonne D (4)
For x = dl To 2 Step -1 'boucle inversée de la dernière ligne à la ligne 2
    donnee1 = Cells(x, 4).Value 'définit la variable donnee1
    If Application.WorksheetFunction.CountIf(Range("D2:D" & dl), Cells(x, 4)) > 1 Then 'condition : si il y a plusieurs occurrences de la cellule dans la plage D2:D&dl
        If Cells(x, 12).Value = "" Then Rows(x).Delete 'si la cellule de la colonne L est vide, supprime la ligne
    End If 'fin de la condition
Next x 'prochaine ligne de la boucle
End Sub
 
Re : Supprimer ligne doublon avec une condition

Salut

tu ne précises pas s'il faut garder tous les doublons avec L non vide ou seulement le dernier donc 2 macros à voir.
Code:
Option Explicit
'garde les doublons avec L non vide
Sub supprimeDoublons1()
  Dim L As Long, n As Long
  Range("D2").CurrentRegion.Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlYes
  For L = Range("D2").CurrentRegion.Cells.Count + 1 To 2 Step -1
    If Cells(L, 4) = [D2] And Cells(L, 12) = "" Then Rows(L).Delete
  Next
End Sub
'garde le dernier avec L non vide
Sub supprimeDoublons2()
  Dim L As Long, n As Long
  Range("D2").CurrentRegion.Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlYes
  For L = Range("D2").CurrentRegion.Cells.Count + 1 To 2 Step -1
    If Cells(L, 4) = [D2] Then
      If Cells(L, 12) = "" Or (Cells(L, 12) <> "" And n > 0) Then
        Rows(L).Delete
      Else
        n = n + 1
      End If
    End If
  Next
End Sub
 
Re : Supprimer ligne doublon avec une condition

Bonjour le Forum,

Pardon pour le retard, mais je me suis battu avec orange avant mon fichier pour retrouver ma connexion.
Cela tient ouf
Je viens d'essayer les macros, celle de XLDnaute Barbatruc fonctionne, mais elle ne me supprime pas si j'ai 2 ligne sans donnée dans la colonne L, je mets un fichier en exemple.

Merci d'avance

Bobjazz
 

Pièces jointes

Re : Supprimer ligne doublon avec une condition

Re

on compilant les 2 codes :

Sub supprimeDoublons()
Dim MaCellule As Range
Dim dl As Integer
Dim x As Integer
Dim donnee1 As String

Set MaCellule = Range("D2")
MaCellule.CurrentRegion.Sort Key1:=MaCellule, Order1:=xlAscending, Header:=xlYes
dl = Cells(Application.Rows.Count, 4).End(xlUp).Row
For x = dl To 2 Step -1
donnee1 = Cells(x, 4).Value
If Application.WorksheetFunction.CountIf(Range("D2😀" & dl), Cells(x, 4)) > 1 Then
If Cells(x, 12).Value = "" Then Rows(x).Delete
End If
Next x
MaCellule = ("D2")
Range(MaCellule).Select
ActiveCell.CurrentRegion.Sort Key1:=Range(MaCellule), Order1:=xlAscending, Header:=xlYes
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select

While ActiveCell <> ""
If ActiveCell = donnee1 Then
ActiveCell.EntireRow.Delete
ActiveCell.Offset(-1, 0).Select
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
Else
donnee1 = ActiveCell
ActiveCell.Offset(1, 0).Select
End If
Wend

End Sub

Cela fonctionne, mais je voudrait rajouter les lignes de commandes pour retrier les lignes en fonction des colonne A puis colonne B.

Question hors de mon sujet : comment vous faites pour encadrer les codes pour une meilleur vision.

Merci d'avance

Bobjazz
 
Re : Supprimer ligne doublon avec une condition

bonjour bobjazz, si 🙂🙂,flyonets44 , mth , Robert🙂🙂
cela me parait pas bien simple au depart pour arriver a un resultat
peut être travailler a la source du pb...
revoir ton projet au depart definir ce que tu veus faire
en clair si tu traites des donnees les traiter au moment ou tu les renseignes passer
par une evenentielle par exemple comme cela cela tu te retrouves pas a gerer des doublons excel a des outils super comme
Code:
Dictionary
enfin a mediter!!!
 
Re : Supprimer ligne doublon avec une condition

bonjour laetitia90, si ,flyonets44 , mth , Robert

Merci pour le conseil, mais lorsque je demande une aide sur un code et ne maitrisant pas tout, j'avance avec des questions.
En faite avec le code de Robert, j'arrive bien au résultat que je veux, mais là où je coince, je voudrais rajouter dans le code le faite de revenir dans le tri du départ en vba.
je voudrais prendre en compte que les lignes en fonction de la colonne A (cellule toujours rempli et le nombre de ligne est aléatoire), et trier en fonction de la colonne A puis colonne B.
je fournit un fichier dans le format de mes imports

Merci d'avance

Bobjazz
 

Pièces jointes

Re : Supprimer ligne doublon avec une condition

rebonjour tous 🙂🙂

peut être comme cela???
j'ai mis des "a" dans certaines colonnes de L pour tester
attention a CurrentRegion avec des colonnes vides

ps attention code brut pas optimise sur beaucoup de lignes peut être pas rapide
si j'ai le temps regarderais pour passer par des "tablos" redim preserve ect...
 

Pièces jointes

Dernière édition:
Re : Supprimer ligne doublon avec une condition

RE laetitia90

Si tu es toujours là, justes des questions pour mieux comprendre.

Tu dis
attention a CurrentRegion avec des colonnes vides, tu veux dire quoi normalement si je comprend c'est le tri de la colonne mais les 2 colonne concernées pour le tri sont toujours pleines.
Pour finir, le tri ne se fait pas parfaitement sur la colonne B est la raison de ce que tu me dit
Et
ps attention code brut pas optimise sur beaucoup de lignes peut être pas rapide
si j'ai le temps regarderais pour passer par des "tablos" redim preserve ect...
là aussi, je t'assure ton code est rapide. Je contrôle si j'efface bien les lignes concernées.

En tout cas encore merci.

Pour info, mes extractions ont plusierus onglets concernées et le nombre de lignes peut aller jusqu'à 28000

Kenavo

Bobjazz
Pour finir, le tri ne se fait pas parfaitement sur la colonne B est la raison de ce que tu me dit
 
Re : Supprimer ligne doublon avec une condition

rebonjour tous🙂🙂
l'ideal en fonction de ton dernier post tu mets en feuille 2 le resultat a atteindre comme cela plus simple

CurrentRegion dans ton cas si colonne vide entre dans ton cas colonne E
la selection va se faire de a1:d73 uniquement
c'est pour cela que j'ai ecris
Code:
Range("a2:s65536").Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlYes
je perds bien de a2 jusqu'a s65536 vu que je connais pas le nombre de lignes
je me suis pas casser la tête😱
j'aurais pu ecrire
Code:
Range("a2:"s" & derligne").Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlYes
ou encore
Code:
ActiveSheet.UsedRange.Rows("2:" & ActiveSheet.UsedRange.Rows.Count).Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlYes

la j'ai utilise UsedRange

il faut bien comprendre la nuance en CurrentRegion & UsedRange
fait une recherche sur le forum sujet interessant

pour marquer ton code tu selectionne ton code avec le "mulot" & tu appui sur la touche diése plus haut
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
21
Affichages
2 K
Retour