En cas de doublons - prendre la ligne avec la plus grande valeur

Excel-lent

XLDnaute Barbatruc
Bonjour le forum,

J'ai trouvé des tonnes de posts traitant des doublons, mais aucun traitant de ce cas.

J'ai un tableau :
Colonne A : Immatriculation
Colonne B : Date Fin
Colonne C : Km Fin

J'ai des doublons sur la colonne A que je souhaite supprimer.
Mais je ne souhaite pas garder n'importe quelle ligne. Je veux garder la ligne qui a la valeur en colonne C la plus grande.

Un exemple vaut mieux qu'un long discours, alors en voici un ci-joint.

Solution formule ou VBA, je n'ai pas de préférence.

Merci d'avance pour tout.
 

Pièces jointes

  • Retenir valeur la plus grande.xls
    13 KB · Affichages: 385
  • Retenir valeur la plus grande.xls
    13 KB · Affichages: 331
  • Retenir valeur la plus grande.xls
    13 KB · Affichages: 315

SergiO

XLDnaute Accro
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Bonsoir Excel-lent,

Peut-on trier le tableau d'origine?

Si oui, une solution par formules.

@+
 

Pièces jointes

  • Retenir valeur la plus grande-1.zip
    6.4 KB · Affichages: 701
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

bonsoir Excel-lent

Salut Sergio

une solution Vba

Edit:

Avais pas rafraichi

Salut Catrice
 

Pièces jointes

  • Retenir valeur la plus grande.xls
    28.5 KB · Affichages: 679
  • Retenir valeur la plus grande.xls
    28.5 KB · Affichages: 548
  • Retenir valeur la plus grande.xls
    28.5 KB · Affichages: 591

homekore

XLDnaute Nouveau
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Bonjour,

J'ai la même problématique que Excel-lent, J'ai adapté le code de PierreJean. Ca fonctionne, mais j'ai beaucoup de lignes ( + de 128K) du coup le traitement est très lent.

Avez vous des idées pour améliorer la vitesse de traitement par hasard?

Merci pour votre aide.
 

Excel-lent

XLDnaute Barbatruc
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Bonjour Homekore,

Depuis Excel a fait des progrés! Si tu as la version Excel 2010 (je crois que 2007 le fait également), il y a un nouveau bouton très pratique nommé "supprimer les doublons" dans le ruban "Données".

C'est automatique et très rapide.

Le plus simple et le plus rapide sinon :
-> trier la base de donnée ainsi
------* 1er Tri colonne A (pour reprendre l'exemple initial) : ordre croissant/décroissant (aucune importance)
------* 2ème Tri colonne C : ordre décroissant (trés important)

-> rajouter une 4ème colonne et écrire sur la seconde ligne (ligne 3) de ta base de donnée :
=SI(A3=A2;"Doublon - ligne à supprimer";"")

-> Recopier cette formule vers le bas

-> mettre un filtre automatique sur la ligne de titre (ligne 1)

-> colonne 4 : filtrer toutes les lignes contenant : "Doublon - ligne à supprimer"

-> supprimer les lignes figurant à l'écran (les lignes non filtrés)

-> supprimer la colonne 4 qui ne sert plus à rien

-> supprimer si tu le souhaite le filtre automatique

Finiiiiiiiiii ;)

Bonne après midi
 

pierrejean

XLDnaute Barbatruc
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Bonjour homekore

teste cette version
NB:
1) J'ai prevu un tri mais s'il est deja effectif tu pourras le supprimer lors de l'adaptation
2) en cas de problème avec l'adaptation , poste un fichier exemple

Edit: Salut Excel-lent (avais pas rafraichi !!)
 

Pièces jointes

  • Retenir valeur la plus grande.xls
    42 KB · Affichages: 243
  • Retenir valeur la plus grande.xls
    42 KB · Affichages: 209
  • Retenir valeur la plus grande.xls
    42 KB · Affichages: 247
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Bonjour,

Voir PJ

On ne modifie pas le tableau d'origine.

Code:
Sub test3()
  a = Range("A3:C" & [C65000].End(xlUp).Row)
  Set dico = CreateObject("Scripting.Dictionary")
  colkm = UBound(a, 2)
  For i = LBound(a) To UBound(a)
    clé = a(i, 1)
    If dico.exists(clé) Then
      If a(i, colkm) > a(dico(clé), colkm) Then dico(clé) = i
    Else
      dico(clé) = i
    End If
  Next i
  ligne = 3
  For Each clé In dico.keys
     For k = 1 To UBound(a, 2): Cells(ligne, k + 4) = a(dico(clé), k): Next k
     ligne = ligne + 1
  Next
End Sub

ou

-spécifique à cet exemple où il n'y a que 3 colonnes.
-Doit être + rapide si beaucoup de lignes: on n'utilise pas Cells() pour écrire dans le tableur.

Code:
Sub test4()
  Application.ScreenUpdating = False
  a = Range("A3:C" & [C65000].End(xlUp).Row)
  Set dico = CreateObject("Scripting.Dictionary")
  Set dicoDate = CreateObject("Scripting.Dictionary")
  For i = LBound(a) To UBound(a)
    If a(i, 3) > dico(a(i, 1)) Then dico(a(i, 1)) = a(i, 3): dicoDate(a(i, 1)) = a(i, 2)
  Next i
  [E3].Resize(dico.Count) = Application.Transpose(dico.keys)
  [F3].Resize(dico.Count) = Application.Transpose(dicoDate.items)
  [G3].Resize(dico.Count) = Application.Transpose(dico.items)
End Sub

JB
 

Pièces jointes

  • Retenir valeur la plus grande.xls
    30 KB · Affichages: 264
  • Retenir valeur la plus grande.xls
    30 KB · Affichages: 222
  • Retenir valeur la plus grande.xls
    30 KB · Affichages: 261
Dernière édition:

homekore

XLDnaute Nouveau
Re : En cas de doublons - prendre la ligne avec la plus grande valeur

Merci à tous pour vos retours !

Il faut que j' analyse vos Codes/astuces (Excel-lent!) maintenant! Pour le moment j'ai testé celui de JB, il est super rapide, impressionnant!

Merci encore
 

Almas00

XLDnaute Nouveau
Bonjour,

J'aurai une question s'il vous plaît, j'ai pris la macro de PierreJean qui fonctionne très bien dans mon cas mais dans mon cas j'aimerai prendre une autre valeur dans la colonne D "indice" associé à la valeur max de la colonne C. Serait-il possible ?
Merci d'avance
 

Pièces jointes

  • Copie de Retenir valeur la plus grande-7.xls
    34.5 KB · Affichages: 78
Dernière édition:

Discussions similaires