Supprimer doublons en conservant la dernière ligne

Bonjour,

J'aimerais supprimer les doublons d'un tableau en conservant la dernière ligne arrivée.

J'utilise l'instruction : Sheets("Liste").Range("A1:I17").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 7), Header:=xlYes

Cela fonctionne bien mais la ligne qui est conservée est la première ligne. Comment préciser que la ligne qui doit être conservée est la dernière ?

Par exemple, dans le fichier en PJ, j'aimerais conserver les lignes 3,5 et 17 en sachant que d'autres lignes peuvent se rajouter à la suite et qu'automatiquement, ma macro doit supprimer les lignes précédentes qui ont les mêmes données dans les colonnes A, B, C, D,E et G.

Merci pour votre aide.

Audrey.

Salut Audrey,

une piste que je n'ai pas vraiment le temps (fuite d'eau) de tester en profondeur : d'abord, opérer un tri de ton tableau.
- Key1:= les dates, xlDescending ;
- Key2:= Nb d'ajustements, xlDescending
- RemoveDuplicates ;
- éventuellement, retrier selon le tri d'origine

Range("A1:I117").Sort key1:=[F2], order1:=xlDescending, key2:=[G2], order2:=xlDescending, Orientation:=xlTopToBottom, Header:=xlYes
Range("A1:I17").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 7), Header:=xlYes


A+

Bonjour,

Je vous remercie pour votre aide.

J'ai essayé cette instruction mais j'ai un message d'erreur d'exécution 1004.

Aussi, pour les même données en colonnes A, B, C, D,E et G, les dates ne sont pas forcément dans l'ordre chronologique. La dernière ligne en doublon peut avoir une date antérieur comme postérieure à la précédente ligne.

Audrey.

Bonjour,

Je pense que j'ai une piste sur la base de vos conseils.

J'ai ajouté une colonne date et heure de saisie et j'ai enregistré la macro en faisant :

1: tri personnalisé par nom (de A à Z), phase (de A à Z), catégorie (de A à Z), nb réajustement (plus petit au plus grand), date et heure de saisie (plus récent au moins récent)

2 : suppresion des doublons

Ce qui donne le code suivant :

Range("Tableau12[[#Headers],[Nom]]").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select

ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Clear

ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Add2 Key:=Range("Tableau12[Nom]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Add2 Key:=Range("Tableau12[Phase]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Add2 Key:=Range("Tableau12[Catégorie]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Add2 Key:=Range("Tableau12[Nb réajustement]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Add2 Key:=Range("Tableau12[Date et heure de saisie]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Range("Tableau12[#Tout]").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 7), Header:=xlYes

ActiveWorkbook.Worksheets("Liste").ListObjects("Tableau12").Sort.SortFields. _
Clear
Range("A2").Select

J'ai maintenant la dernière ligne saisie qui se trouve en haut de la liste ce qui permet de supprimer les autres lignes et de conserver la plus récente.

Toutefois, quand je vais voir le code et que je souhaite le réexécuter, j'ai un message d'erreur "La méthode Range de l'objet global a échoué".

Avez-vous une idée qui explique pourquoi cela fonctionne quand j'enregistre la macro mais plus quand je l'exécute à nouveau ?

Merci pour votre aide.

Audrey.

Salut Audrey,

les tableaux structurés sont encore un monstre du Loch Ness pour moi mais, ainsi, "à l'ancienne"..

With Range("A1:I" & Range("A" & Rows.Count).End(xlUp).Row)
    .Sort key1:=[G2], order1:=xlDescending, Orientation:=xlTopToBottom, Header:=xlYes
    .Sort _
        key1:=[A2], order1:=xlDescending, _
        key2:=[B2], order2:=xlDescending, _
        key3:=[I2], order3:=xlDescending, _
        Orientation:=xlTopToBottom, Header:=xlYes
    .RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 7), Header:=xlYes
End With

Á tester sur un fichier réel...


A+

Bonjour curulis57,

Je ne comprends pas car cela fonctionne quand je l'execute pour la première fois à partir de la feuille de code puis quand je réexecute, ca ne fonctionne plus, j'ai un message d'erreur "référence de tri non valide".

J'ai passé 1j et demi à rechercher une solution, je suis un peu désespérée.

Merci en tout cas de votre aide.

Audrey.

Salut Audrey,

désolé, j'ai couru la campagne Excel et je t'ai oubliée...
Où en es-tu avec ton problème de doublons ?

Si il te faut encore de l'aide, peux-tu me rafraîchir la mémoire ?
Comme je revois le tableau, il fallait supprimer les lignes sur base des doublons de la colonne 'Dates', mais par 'Catégorie', après avoir trier 'Dates et heures de saisie' en xlDescending ?

Juste ?


A+

Rechercher des sujets similaires à "supprimer doublons conservant derniere ligne"