Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

suprimer la ligne qui contien doublon

11 réponses
Avatar
pellet15
Bonjour =E0 tous

J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
varie ( 10 a 300 ou plus)
je voudrais avec une macro supprimer les lignes qui sont en double.


Merci (bonne ann=E9e 2012)

10 réponses

1 2
Avatar
MichD
Bonjour,

Quelle est ta définition de doublon ? Est-ce que les 13 colonnes doivent être identiques ou seulement certaines colonnes ?



MichD
------------------------------------------
"pellet15" a écrit dans le message de groupe de discussion :


Bonjour à tous

J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
varie ( 10 a 300 ou plus)
je voudrais avec une macro supprimer les lignes qui sont en double.


Merci (bonne année 2012)
Avatar
pellet15
On 29 déc, 15:02, "MichD" wrote:
Bonjour,

Quelle est ta définition de doublon ? Est-ce que les 13 colonnes doiven t être identiques ou seulement certaines colonnes ?

MichD
------------------------------------------
"pellet15"  a écrit dans le message de groupe de discussion :


Bonjour à tous

J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
varie ( 10 a 300 ou plus)
je voudrais avec une macro supprimer les lignes qui sont en double.

Merci (bonne année 2012)



Bonjour MichD

Oui tous pareille sur la même ligne,
et dans mes calcule je ne doit pas avoir des répétition de mes donné.

il faut supprimer la ligne qui sont en double.

Merci
Avatar
MichD
Dans l'exemple suivant :

La plage des données est dans A1:Mx
La ligne 1 représente la ligne des étiquettes de colonnes
La ligne x représente la dernière ligne des données

Dans la colonne N2:Nx , par formule, il y a concaténation de toutes les cellules de chaque ligne
Un filtre élaboré est exécuté sur la colonne N1:Nx

Pour ce faire, une plage de critère est utilisée en O1:O2
Après l'exécution du filtre et les suppressions des doublons, les colonnes N et O sont supprimées.

Feuil1 représente la propriété "Name" de l'objet "Feuille" visible seulement dans l'interface
de la fenêtre d'édition de code et non le nom de l'onglet de la feuille.

'-----------------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("N1") = "Concaténation"
.Range("N2:N" & DerLig) = "¢&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
'Déterminer la plage de critère
.Range("O1") = ""
.Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, _
Criteriarange:þuil1.Range("O1:O2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

.ShowAllData
.Range("N:O").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------


MichD
------------------------------------------
"pellet15" a écrit dans le message de groupe de discussion :


On 29 déc, 15:02, "MichD" wrote:
Bonjour,

Quelle est ta définition de doublon ? Est-ce que les 13 colonnes doivent être identiques ou seulement certaines colonnes ?

MichD
------------------------------------------
"pellet15" a écrit dans le message de groupe de discussion :


Bonjour à tous

J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
varie ( 10 a 300 ou plus)
je voudrais avec une macro supprimer les lignes qui sont en double.

Merci (bonne année 2012)



Bonjour MichD

Oui tous pareille sur la même ligne,
et dans mes calcule je ne doit pas avoir des répétition de mes donné.

il faut supprimer la ligne qui sont en double.

Merci
Avatar
pellet15
On 29 déc, 19:18, "MichD" wrote:
Dans l'exemple suivant :

La plage des données est dans A1:Mx
La ligne 1 représente la ligne des étiquettes de colonnes
La ligne x représente la dernière ligne des données

Dans la colonne N2:Nx , par formule, il y a concaténation de toutes les cellules de chaque ligne
Un filtre élaboré est exécuté sur la colonne N1:Nx

Pour ce faire, une plage de critère est utilisée en O1:O2
Après l'exécution du filtre et les suppressions des doublons, les col onnes N et O sont supprimées.

Feuil1 représente la propriété "Name" de l'objet "Feuille" visible seulement dans l'interface
de la fenêtre d'édition de code et non le nom de l'onglet de la feuil le.

'-----------------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
    DerLig = .Range("A65536").End(xlUp).Row
    .Range("N1") = "Concaténation"
    .Range("N2:N" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2& M2"
    'Déterminer la plage de critère
    .Range("O1") = ""
    .Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)> =2"
    'Filtre avancé sur la plage A1:Mx
    With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
        .AdvancedFilter Action:=xlFilterInPlace, _
            Criteriarange:uil1.Range("O1:O2")
        .Offset(1).Resize(.Rows.Count - 1). _
            SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With

    .ShowAllData
    .Range("N:O").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------

MichD
------------------------------------------
"pellet15"  a écrit dans le message de groupe de discussion :


On 29 déc, 15:02, "MichD" wrote:









> Bonjour,

> Quelle est ta définition de doublon ? Est-ce que les 13 colonnes doiv ent être identiques ou seulement certaines colonnes ?

> MichD
> ------------------------------------------
> "pellet15"  a écrit dans le message de groupe de discussion :
>

> Bonjour à tous

> J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
> varie ( 10 a 300 ou plus)
> je voudrais avec une macro supprimer les lignes qui sont en double.

> Merci (bonne année 2012)

Bonjour  MichD

Oui tous pareille sur la même ligne,
et dans mes calcule je ne doit pas avoir des répétition de mes donn é.

il faut supprimer la ligne qui sont en double.

Merci



Bonjour MichD

Cela fonctionne mais un peut trop !
je veut supprimer le double mais pas le premier...

voici les modification que j'ai apporter, quoi faire pour garder une
des deux ligne ?
J'ai juste changer le "N pour P et O pour le Q" puis effacer a la
place de supprimer colonne OetQ .

Sub test()
Dim DerLig As Long
On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("p1") = "Concaténation"
.Range("p2:p" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
'Déterminer la plage de critère
.Range("q1") = ""
.Range("q2").FormulaLocal = "=Nb.Si(p1:p" & DerLig & ";p2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("p1:p" & .Range("p65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace,
Criteriarange:uil1.Range("q1:q2")
.Offset(1).Resize(.Rows.Count -
1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.ShowAllData
.Range("p:q").EntireColumn.Clear
End With
Application.ScreenUpdating = True
End Sub


Merci
Avatar
Gloops
pellet15 a écrit, le 30/12/2011 16:56 :
Cela fonctionne mais un peut trop !
je veut supprimer le double mais pas le premier...



J'ai failli le dire, mais je me suis dit, non, connaissant MichD, il n'a
pas pu oublier ça ...

A ce que je me rappelle, l'astuce consiste à introduire un numéro
d'ordre entre les doublons, comme ça ensuite on peut sélectionner sur
NUMORDRE=1.

En revanche, j'ai un trou sur les modalités d'application ...

Un autre moyen consiste à passer par une extraction xml (à partir de la
version 2003 si je ne m'abuse). Là aussi, il est vrai qu'il ne suffit
pas de le dire.
Avatar
MichD
Si tu veux conserver le premier doublon, tu ajoutes dans la colonne P:P le numéro de la ligne
et tu fais un tri décroissant sur cette colonne. Tu appliques le filtre élaboré et tu fais un tri
à nouveau sur la colonne P:P pour retrouver l'ordre initial des données. Et il y a suppression
des colonnes N, O, P

'------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("N1") = "Concaténation"
.Range("N2:N" & DerLig) = "¢&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
With .Range("P1:P" & DerLig)
.Formula = "=Row()"
.Value = .Value
End With
With Range("A1:P" & DerLig)
.Sort key1:=.Item(2, .Columns.Count), order1:=xlDescending, Header:=xlYes
End With
'Déterminer la plage de critère
.Range("O1") = ""
.Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, _
Criteriarange:þuil1.Range("O1:O2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.ShowAllData
With Range("A1:P" & DerLig)
.Sort key1:=.Item(2, .Columns.Count), order1:=xlAscending, Header:=xlYes
End With

.Range("N:P").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'------------------------------------



MichD
------------------------------------------
"pellet15" a écrit dans le message de groupe de discussion :


On 29 déc, 19:18, "MichD" wrote:
Dans l'exemple suivant :

La plage des données est dans A1:Mx
La ligne 1 représente la ligne des étiquettes de colonnes
La ligne x représente la dernière ligne des données

Dans la colonne N2:Nx , par formule, il y a concaténation de toutes les cellules de chaque ligne
Un filtre élaboré est exécuté sur la colonne N1:Nx

Pour ce faire, une plage de critère est utilisée en O1:O2
Après l'exécution du filtre et les suppressions des doublons, les colonnes N et O sont supprimées.

Feuil1 représente la propriété "Name" de l'objet "Feuille" visible seulement dans l'interface
de la fenêtre d'édition de code et non le nom de l'onglet de la feuille.

'-----------------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("N1") = "Concaténation"
.Range("N2:N" & DerLig) = "¢&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
'Déterminer la plage de critère
.Range("O1") = ""
.Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, _
Criteriarange:þuil1.Range("O1:O2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

.ShowAllData
.Range("N:O").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------

MichD
------------------------------------------
"pellet15" a écrit dans le message de groupe de discussion :


On 29 déc, 15:02, "MichD" wrote:









> Bonjour,

> Quelle est ta définition de doublon ? Est-ce que les 13 colonnes doivent être identiques ou seulement certaines colonnes
> ?

> MichD
> ------------------------------------------
> "pellet15" a écrit dans le message de groupe de discussion :
>

> Bonjour à tous

> J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
> varie ( 10 a 300 ou plus)
> je voudrais avec une macro supprimer les lignes qui sont en double.

> Merci (bonne année 2012)

Bonjour MichD

Oui tous pareille sur la même ligne,
et dans mes calcule je ne doit pas avoir des répétition de mes donné.

il faut supprimer la ligne qui sont en double.

Merci



Bonjour MichD

Cela fonctionne mais un peut trop !
je veut supprimer le double mais pas le premier...

voici les modification que j'ai apporter, quoi faire pour garder une
des deux ligne ?
J'ai juste changer le "N pour P et O pour le Q" puis effacer a la
place de supprimer colonne OetQ .

Sub test()
Dim DerLig As Long
On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("p1") = "Concaténation"
.Range("p2:p" & DerLig) = "¢&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
'Déterminer la plage de critère
.Range("q1") = ""
.Range("q2").FormulaLocal = "=Nb.Si(p1:p" & DerLig & ";p2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("p1:p" & .Range("p65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace,
Criteriarange:þuil1.Range("q1:q2")
.Offset(1).Resize(.Rows.Count -
1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.ShowAllData
.Range("p:q").EntireColumn.Clear
End With
Application.ScreenUpdating = True
End Sub


Merci
Avatar
pellet15
On 30 déc, 13:14, "MichD" wrote:
Si tu veux conserver le premier doublon, tu ajoutes dans la colonne P:P l e numéro de la ligne
et tu fais un tri décroissant sur cette colonne. Tu appliques le filtre élaboré et tu fais un tri
à nouveau sur la colonne P:P pour retrouver l'ordre initial des donné es. Et il y a suppression
des colonnes N, O, P

'------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
    DerLig = .Range("A65536").End(xlUp).Row
    .Range("N1") = "Concaténation"
    .Range("N2:N" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2& M2"
    With .Range("P1:P" & DerLig)
        .Formula = "=Row()"
        .Value = .Value
    End With
    With Range("A1:P" & DerLig)
        .Sort key1:=.Item(2, .Columns.Count), order1:=xlDesce nding, Header:=xlYes
    End With
    'Déterminer la plage de critère
    .Range("O1") = ""
    .Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)> =2"
    'Filtre avancé sur la plage A1:Mx
    With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
        .AdvancedFilter Action:=xlFilterInPlace, _
            Criteriarange:uil1.Range("O1:O2")
        .Offset(1).Resize(.Rows.Count - 1). _
            SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .ShowAllData
        With Range("A1:P" & DerLig)
        .Sort key1:=.Item(2, .Columns.Count), order1:=xlAscen ding, Header:=xlYes
    End With

    .Range("N:P").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'------------------------------------

MichD
------------------------------------------
"pellet15"  a écrit dans le message de groupe de discussion :


On 29 déc, 19:18, "MichD" wrote:









> Dans l'exemple suivant :

> La plage des données est dans A1:Mx
> La ligne 1 représente la ligne des étiquettes de colonnes
> La ligne x représente la dernière ligne des données

> Dans la colonne N2:Nx , par formule, il y a concaténation de toutes l es cellules de chaque ligne
> Un filtre élaboré est exécuté sur la colonne N1:Nx

> Pour ce faire, une plage de critère est utilisée en O1:O2
> Après l'exécution du filtre et les suppressions des doublons, les c olonnes N et O sont supprimées.

> Feuil1 représente la propriété "Name" de l'objet "Feuille" visibl e seulement dans l'interface
> de la fenêtre d'édition de code et non le nom de l'onglet de la feu ille.

> '-----------------------------------------------
> Sub test()
> Dim DerLig As Long

> On Error Resume Next
> Application.ScreenUpdating = False
> With Feuil1
>     DerLig = .Range("A65536").End(xlUp).Row
>     .Range("N1") = "Concaténation"
>     .Range("N2:N" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L 2&M2"
>     'Déterminer la plage de critère
>     .Range("O1") = ""
>     .Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)> =2"
>     'Filtre avancé sur la plage A1:Mx
>     With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
>         .AdvancedFilter Action:=xlFilterInPlace, _
>             Criteriarange:uil1.Range("O1:O2")
>         .Offset(1).Resize(.Rows.Count - 1). _
>             SpecialCells(xlCellTypeVisible).EntireRow.Delet e
>     End With

>     .ShowAllData
>     .Range("N:O").EntireColumn.Delete
> End With
> Application.ScreenUpdating = True
> End Sub
> '-----------------------------------------------

> MichD
> ------------------------------------------
> "pellet15"  a écrit dans le message de groupe de discussion :
>

> On 29 déc, 15:02, "MichD" wrote:

> > Bonjour,

> > Quelle est ta définition de doublon ? Est-ce que les 13 colonnes do ivent être identiques ou seulement certaines colonnes
> > ?

> > MichD
> > ------------------------------------------
> > "pellet15"  a écrit dans le message de groupe de discussion :
> >

> > Bonjour à tous

> > J'ai une feuille (Base) qui a 13 colonnes et un nombre de ligne qui
> > varie ( 10 a 300 ou plus)
> > je voudrais avec une macro supprimer les lignes qui sont en double.

> > Merci (bonne année 2012)

> Bonjour  MichD

> Oui tous pareille sur la même ligne,
> et dans mes calcule je ne doit pas avoir des répétition de mes donn é.

> il faut supprimer la ligne qui sont en double.

> Merci

Bonjour MichD

Cela fonctionne mais un peut trop !
je veut supprimer le double mais pas le premier...

voici les modification que j'ai apporter, quoi faire pour garder une
des deux ligne ?
J'ai juste changer le "N pour P et O pour le Q" puis effacer a la
place de supprimer colonne OetQ .

Sub test()
Dim DerLig As Long
On Error Resume Next
Application.ScreenUpdating = False
With Feuil1
    DerLig = .Range("A65536").End(xlUp).Row
    .Range("p1") = "Concaténation"
    .Range("p2:p" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2& M2"
    'Déterminer la plage de critère
    .Range("q1") = ""
    .Range("q2").FormulaLocal = "=Nb.Si(p1:p" & DerLig & ";p2)> =2"
    'Filtre avancé sur la plage A1:Mx
    With .Range("p1:p" & .Range("p65536").End(xlUp).Row)
        .AdvancedFilter Action:=xlFilterInPlace,
Criteriarange:uil1.Range("q1:q2")
        .Offset(1).Resize(.Rows.Count -
1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .ShowAllData
    .Range("p:q").EntireColumn.Clear
End With
Application.ScreenUpdating = True
End Sub

Merci


--------------------------------------------------------------------------- --------------------------------------------
Ce la ne fonctionne pas plus , tous est supprimer ?

voici un exemple de mon fichier...

http://cjoint.com/?0LEuAWCKMYK

quoi faire pour corriger ..
Merci
Avatar
MichD
J'ai testé la macro et elle fonctionne très bien. Le hic, c'est que tu n'as pas de doublons dans cette plage de cellule
A1M15.

Tu m'as dit que ta définition d'un doublon était à l'effet qu'il doit y avoir la même chose dans toutes les cellules d'une
même ligne lorsque la comparaison est faite avec les autres lignes...

Dans la procédure suivante, j'ai seulement introduit un point d'arrêt "Stop" pour arrêter la macro. Élargis la colonne N:N et
regarde son contenu... est-ce qu'il y a 2 cellules qui soient identiques ?????????????????????????????????


'-------------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
'Application.ScreenUpdating = False
With Feuil1
DerLig = .Range("A65536").End(xlUp).Row
.Range("N1") = "Concaténation"
.Range("N2:N" & DerLig) = "¢&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2&M2"
With .Range("P1:P" & DerLig)
.Formula = "=Row()"
.Value = .Value
End With
With Range("A1:P" & DerLig)
.Sort key1:=.Item(2, .Columns.Count), order1:=xlDescending, Header:=xlYes
End With

'-----------------

Stop

'-----------------

'Déterminer la plage de critère
.Range("O1") = ""
.Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)>=2"
'Filtre avancé sur la plage A1:Mx
With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, _
Criteriarange:þuil1.Range("O1:O2")
.Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.ShowAllData
With Range("A1:P" & DerLig)
.Sort key1:=.Item(2, .Columns.Count), order1:=xlAscending, Header:=xlYes
End With

.Range("N:P").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------

Ceci est mon dernier message sur ce fil.


MichD
------------------------------------------
Avatar
pellet15
On 30 déc, 14:52, "MichD" wrote:
J'ai testé la macro et elle fonctionne très bien. Le hic, c'est que t u n'as pas de doublons dans cette plage de cellule
A1M15.

Tu m'as dit que ta définition d'un doublon était à l'effet qu'il do it y avoir la même chose dans toutes les cellules d'une
même ligne lorsque la comparaison est faite avec les autres lignes...

Dans la procédure suivante, j'ai seulement introduit un point d'arrêt "Stop" pour arrêter la macro. Élargis la colonne N:N et
regarde son contenu... est-ce qu'il y a 2 cellules qui soient identiques ?????????????????????????????????

'-------------------------------------------
Sub test()
Dim DerLig As Long

On Error Resume Next
'Application.ScreenUpdating = False
With Feuil1
    DerLig = .Range("A65536").End(xlUp).Row
    .Range("N1") = "Concaténation"
    .Range("N2:N" & DerLig) = "&B2&C2&D2&E2&F2&G2&H2&I2&K2&L2& M2"
    With .Range("P1:P" & DerLig)
        .Formula = "=Row()"
        .Value = .Value
    End With
    With Range("A1:P" & DerLig)
        .Sort key1:=.Item(2, .Columns.Count), order1:=xlDesce nding, Header:=xlYes
    End With

    '-----------------

    Stop

    '-----------------

    'Déterminer la plage de critère
    .Range("O1") = ""
    .Range("O2").FormulaLocal = "=Nb.Si(N1:N" & DerLig & ";N2)> =2"
    'Filtre avancé sur la plage A1:Mx
    With .Range("N1:N" & .Range("N65536").End(xlUp).Row)
        .AdvancedFilter Action:=xlFilterInPlace, _
            Criteriarange:uil1.Range("O1:O2")
        .Offset(1).Resize(.Rows.Count - 1). _
            SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .ShowAllData
        With Range("A1:P" & DerLig)
        .Sort key1:=.Item(2, .Columns.Count), order1:=xlAscen ding, Header:=xlYes
    End With

    .Range("N:P").EntireColumn.Delete
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------

Ceci est mon dernier message sur ce fil.

MichD
------------------------------------------



Bonjour MichD

cela fonctionne si les doublons ne sont pas dessous un de l'autre en
premier (ils sont tous supprimer),
lorsque ils sont distant (seul les doublon sont supprimer).

quoi faire pour corriger ?
J'ai fait un fichier comme exemple....(exécuter macro CTRL-Maj=D )

http://cjoint.com/?ALFrPpPj0UF

Merci
Avatar
MichD
Essaie ceci :


'-------------------------------------------
Sub test()
Dim Sh As Worksheet, Sh1 As Worksheet
Dim Rg As Range

Set Sh = Worksheets("Feuil1") 'Nom onglet Feuille où sont les données
Set Sh1 = Worksheets.Add

Application.ScreenUpdating = False
With Sh
If Not IsEmpty(.UsedRange) Then
With .Range("A:M")
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With
Set Rg = .Range("A1:M" & DerLig)
Else
Exit Sub
End If
End With
With Rg
.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Sh1.Range("A1"), Unique:=True
.Clear
Sh1.UsedRange.Copy .Item(1, 1)
End With
Application.DisplayAlerts = False
Sh1.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
'-------------------------------------------


MichD
------------------------------------------
1 2