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

Almas00

XLDnaute Nouveau
Bonjour Almas00

Vois si cela te convient

Bonjour Pierrejean,

Merci pour votre réponse si rapide. Le problème qui se pose c'est que dans la colonne D que vous avait noté par des chiffres sont plutôt pour moi des noms de séries comme j'ai pu le mettre dans la colonne "indice"
par exemple : c001, D0403.
Du coup le faite de prendre la valeur max bah cela ne fonctionne pas. J'aimerai si possible une condition c'est-à-dire " prendre la valeur dans la colonne D associé à la valeur max trouver dans la colonne C" . Est-ce possible ?

Merci d'avance
 

Ben22play

XLDnaute Nouveau
Bonjour,
je post ici car j'ai le même problème que excel-lent.
Alors voila, enfaîte je souhaite aussi supprimer les doublons mais garder uniquement la dernière ligne du doublons
J'ai des doublons dans la colonne des numéros de compte et je souhaite garder la ligne ou le code statut can est "IN" (toujours la dernière ligne du doublons) mais je n'arrive pas à modifier le code pour mon cas.

voici ci-joint le fichier avec seulement une partie des lignes (40 000 lignes au total).
Merci de votre aide
 

Pièces jointes

  • Classeurdoublons.xlsx
    12.6 KB · Affichages: 90

Ben22play

XLDnaute Nouveau
Merci Pierrejean,
Ton code ne garde que les code statut "In" il me faut aussi les vides qd ils n'ont pas été cloturé(In).
J'avais élaboré ce code

Code:
Sub SupressionDoublons()
' Macro5
' On tri aplhabétiquement les codes scan
' Puis on supprimes les doublons (N° de compte)
' Il garde la derniere ligne avec le OK si il y a
    Columns("J:J").Select
    ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort.SortFields.Add Key:= _
        Range("J1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort
        .SetRange Range("A2:K28194")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Cells.Select
    Range("C1").Activate
    ActiveSheet.Range("$A$1:$K$40000").RemoveDuplicates Columns:=7, Header:= _
        xlYes
End Sub

Il à l'air de marcher, enfaîte il trie par ordre croissant le code statut can et vire les doublons du num compte tout en gardant la dernière de ce numéro de compte présente dans le classeur.
Je suis pas pro vba, je me demandais comment améliorer ce code car le nombre de lignes augmentera au fur et a mesure.
Aurait tu une idée comment remplacer des espaces vides par "Ko" avec du code vba sachant qu'il faut qu'il s’arrête a la dernière ligne?
 

pierrejean

XLDnaute Barbatruc
Re
Voila ton code adapté au nbre de lignes
A tester
Code:
Sub SupressionDoublons()
' Macro5
' On tri aplhabétiquement les codes scan
' Puis on supprimes les doublons (N° de compte)
' Il garde la derniere ligne avec le OK si il y a
    Columns("J:J").Select
    ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort.SortFields.Add Key:= _
        Range("J1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Suivi_Numerisation").Sort
        .SetRange Range("A2:K" & .Range("A" & Rows.Count).End(xlUp).Row)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Cells.Select
    Range("C1").Activate
    ActiveSheet.Range("$A$1:$K$" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=7, Header:= _
        xlYes
End Sub
 

Ben22play

XLDnaute Nouveau
Bonjour Pierre Jean,
J'ai un nouveau problème dans le cadre de mon stage,
Alors voila, enfaite j'ai une centaines de colonnes avec pour entêtes des codes d'anomalies (IFLNV001, IFLNV002, ...) puis sur des milliers lignes des chiffres codés 1 ou 0, je dois remplacer pour chaque colonne les 1 par le code d'anomalies(en entête) et 0 par un espace vide

Code:
Columns("U:U").Select
    Selection.Replace What:="1", Replacement:="EFLNC001", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

j'ai fait un enregistreur de macro tout simple mais j'aimerais trouver une solution pour le faire à chaque colonne avec le moins de code possible, peut être une boucle ?
Voici le fichier que j'ai à traiter en feuille 1 et en feuille 2 ce que je voudrais avoir avec toutes les colonnes.

Merci de ton aide
 

Pièces jointes

  • Classeur2.xlsx
    3.3 MB · Affichages: 53

pierrejean

XLDnaute Barbatruc
Re

Voila ta macro pour toute la feuille
Code:
Sub test()
tablo = Range("A1").CurrentRegion
For n = LBound(tablo, 1) To UBound(tablo, 1)
   For m = LBound(tablo, 2) To UBound(tablo, 2)
      If tablo(n, m) = 1 Then tablo(n, m) = tablo(LBound(tablo, 1), m)
   Next
Next
Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub
 

Ben22play

XLDnaute Nouveau
Désoler de te redéranger PierreJean :confused:
Enfaite, mon fichier avec les anomalies que j'ai envoyé tout à l'heure(imcomplet) commence à la colonne U(j'avais enlevé les colonnes de A à U)
J'ai tenté de mofifier le code pour que les code 1 et 0 prennent les entêtes de colonnes mais qu'a partir de la colonne U mais étant donné que je n'est pas fait le code j'ai du mal à comprendre.
Ta une idée?
Merci
 

pierrejean

XLDnaute Barbatruc
Re

En supposant le début colonne U et fin colonne BI
Code:
Sub test1()
tablo = Range("U1:BI" & Range("U" & Rows.Count).End(xlUp).Row)
For n = LBound(tablo, 1) To UBound(tablo, 1)
   For m = LBound(tablo, 2) To UBound(tablo, 2)
      If tablo(n, m) = 1 Then tablo(n, m) = tablo(LBound(tablo, 1), m)
   Next
Next
Range("U1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
End Sub
 

MamounEl

XLDnaute Nouveau
Bonjour @pierrejean, bonjour à tous,

Je suis confronté à un souci similaire aux précédents cités ici.

J'ai un fichier d'historique des visites médicales de toutes les personnes de la société. Je souhaite garder la date de la visite la plus récente pour chaque matricule donné, et donc supprimer les autres.

Merci de votre aide.
 

Pièces jointes

  • Fichier test.xlsx
    8.9 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 088
Messages
2 085 203
Membres
102 818
dernier inscrit
NeoMaint