Supprimer les doublons en gardant "la dernière ligne ajoutée"

leop93

XLDnaute Occasionnel
Bonjour amis XLDiens !

Pour changer, j'ai encore un soucis et un besoin incomensurable de votre aide... Mais si, mais si. :D

Dans mon classeur, lorsque j'ai un état X et que j'utilise mon bouton d'actualisation, la ligne avec l'état X est transférée vers une autre feuille de ce même classeur.

Le soucis, c'est que si je modifie une des colonnes de cette ligne (dans mon cas la colonne priorité), lorsque je réactualise pour renvoyer la ligne avec la nouvelle valeur de priorité, c'est celle-ci qui est supprimée par ma fonction anti-doublons et l'ancienne qui est gardée...

Voici le code ma fonction anti-doublons:

Code:
Sub Doublons()
Dim r As Range, ncol%, d As Object, t$, col%, doublon As Range
Set r = [A:N]
Set r = Intersect(r, ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
ncol = r.Columns.Count
Set d = CreateObject("Scripting.Dictionary")
For Each r In r.Rows
  t = ""
  For col = 1 To ncol
    t = t & r.Cells(col) & Chr(1)
  Next
  t = UCase(Application.Trim(t))
  If d.Exists(t) Then
    Set doublon = Union(IIf(doublon Is Nothing, r, doublon), r)
  Else
    d(t) = t
  End If
Next
If Not doublon Is Nothing Then doublon.EntireRow.Delete
End Sub

Ma question est donc, comment faire pour que ça soit la première ligne qui soit supprimée et non celle que l'on vient d'ajouter avec la modification de valeur dans la colonne priorité ?

Bon après-midi

Leop93
 

Pièces jointes

  • A TESTER - PROGRAMME BASIQUE (sans priorité, sans compte à rebours, sans ...).xlsm
    104.4 KB · Affichages: 88

youky(BJ)

XLDnaute Barbatruc
Re : Supprimer les doublons en gardant "la dernière ligne ajoutée"

Bonjour leop93,
Pour cela il va falloir lui faire regarder de la fin et revenir au début.
La commande Step sera donc utilisée avec -1 pour le faire compter à l'envers
Tu as
For col = 1 To ncol
à remplacer par...
For col =ncol To 1 Step -1

Je n'ai pas testé
Bruno
 

leop93

XLDnaute Occasionnel
Re : Supprimer les doublons en gardant "la dernière ligne ajoutée"

Binvite Youky

Merci pour ton aide, mais le soucis c'est qu'il s'agit d'un classement automatique donc si la valeur est plus petite que la dernière ajoutée, ça sera le mauvais qui sera supprimé.

Bon samedi

Leop93
 

job75

XLDnaute Barbatruc
Re : Supprimer les doublons en gardant "la dernière ligne ajoutée"

Bonjour leop93, salut Bruno,

Pas essayé de comprendre le fichier, mais comme il s'agit d'une de mes macros la voici modifiée en commençant, comme l'indique Bruno, par la fin :

Code:
Sub Doublons()
 Dim r As Range, ncol%, d As Object, i&, t$, col%, doublon As Range
 Set r = [A:N]
 Set r = Intersect(r, ActiveSheet.UsedRange)
 If r Is Nothing Then Exit Sub
 ncol = r.Columns.Count
 Set d = CreateObject("Scripting.Dictionary")
 For i = r.Rows.Count To 1 Step -1 'on commence par la fin
   t = ""
   For col = 1 To ncol
     t = t & r.Cells(i, col) & Chr(1)
   Next
   t = UCase(Application.Trim(t))
   If d.Exists(t) Then
     Set doublon = Union(IIf(doublon Is Nothing, r.Rows(i), doublon), r.Rows(i))
   Else
     d(t) = t
   End If
 Next
 If Not doublon Is Nothing Then doublon.EntireRow.Delete
End Sub
Pas compris en quoi le "classement automatique" pose problème...

A+
 
Dernière édition:

leop93

XLDnaute Occasionnel
Re : Supprimer les doublons en gardant "la dernière ligne ajoutée"

Bonjour Job

Merci pour la modification de ton code. Cependant après plusieurs essais ça ne fonctionne pas non plus. Enfin ça fonctionne, mais le résultat escompté n'est pas au rendez-vous. (j'avais déjà essayé avec Step -1)

Ce qui pose soucis c'est le classement automatique des priorités. Par exemple j'ai cette ligne qui est dans mon classeur:
XXXX XX XXXXX 14 (14 étant le numéro de priorité)
J'ajoute cette ligne:
XXXX XX XXXXX 14
Ce doublon est bien supprimé puisque parfaitement identique. (bon)

Maintenant, je modifie la priorité de la première ligne (sans créer une nouvelle ligne) ce qui donne:
XXX XX XXXX 3
Lors du transfert de cette ligne dans ma feuille appellée DESSIN, lorsque la fonction doublon regarde ces deux lignes:
XXXX XX XXXXX 14 (ligne déjà présente puisque "classée" précédemment)

XXXX XX XXXXX 3 (ligne identique à la précédente sauf que la priorité a été modifiée)
Il n'arrive pas à voir que ce sont les mêmes à cause de la valeur de la priorité, donc il garde les deux lignes. (pas bon)

Et si je stoppe la comparaison de ligne avant la valeur de la priorité, il garde uniquement la première ligne ou la dernière ligne (en fonction du Step -1 ou non)...

Je me demandais donc s'il était possible qu'il garde la dernière modification et non la dernière "place" dans la feuille.

Je ne sais pas si j'ai bien expliqué, demandez moi si certaines zones sont floues.

Bonne semaine à tous

Leop93
 

leop93

XLDnaute Occasionnel
Re : Supprimer les doublons en gardant "la dernière ligne ajoutée"

Re

J'ai choisi la solution de la facilité, pour éviter ce soucis de doublons mal effacé, enfin pas comme je le souhaite.

Donc il n'y a plus de gestion de la priorité en tri automatique et il se fait par l'option données / Trier avec des valeurs personnalisées...

Merci quand même pour votre aide

Leop93
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 185
dernier inscrit
salhit