Excel : cherche formule si doublon

marinak -  
Theo.R Messages postés 585 Statut Membre -
Bonjour,

Je n'ai pas réussi à trouver la formule pour un traitement de tableau lourd (67 000 lignes) avec un tri suivant:
dans la colonne A j'ai identifié les doublons,
pour faire le choix d'une seule ligne à garder, j'ai besoin de me référer à la colonne B de la même ligne, et ne retenir que la ligne où le chiffre de la colonne B est le plus élevé.

Illustration :
Colonne A Colonne B
Marie 23
Marie 12
Alexandre 10
Marie 17

Pour arriver à :
Colonne A Colonne B
Marie 23
Alexandre 10

Quel serait la formule à utiliser dans la colonne C ?
=nb.si ? ou autre chose ?

Merci d'avance!

2 réponses

  1. Theo.R Messages postés 585 Statut Membre 31
     
    Bjr,

    A mettre en C2 en formule matricielle (Ctrl+Shift+Entée au lieu de Entrée pour valider) puis à dérouler vers le bas:

    =SI(MAX(SI(A:A=A2;B:B))=B2;"On garde";"On supprime")
    0
    1. marinak
       
      Merci pour votre réponse.

      Ça ne fonctionne pas, toute la colonne affiche "on supprime".

      Il faut que la fonction puisse comparer les valeurs de la colonne B dans les lignes des mêmes valeurs de la colonne A : A1, A2 et A4 ayant la même valeur "Marie", vérifier quelle valeur est plus élevé - B1, B2 ou B4, et mettre "on garde" en face de celle-ci - C1
      0
    2. Theo.R Messages postés 585 Statut Membre 31
       
      Cela fonctionne de mon côté.. vous êtes bien en formule matricielle ?

      Sinon merci de joindre un document via www.cjoint.com pour voir ce qui cloche de votre côté.

      Cdt,
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    Une formule matricielle sur 70000 lignes: je demande à voir la durée si du moins Excel ne plante pas
    Bien qu'il faille penser Excel avant de penser VBA, tes 70000 lignes impliquent une solution par VBA

    je suis parti de la ligne 2 (ent^te en ligne 1)et restitue en cellule F2 pour la démo. durée pour 4300 lignes: 5 à 6/100 de secondes
    Option Explicit
    '---------------
    Sub unique_si_maxi()
    Dim Derlig As Long, T_in
    Dim Dico As Object
    Dim Cptr As Long, Ref As String, Valeur As Double
    Dim Start As Single

    Application.ScreenUpdating = False
    Start = Timer
    Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    T_in = Range("A2:B" & Derlig)
    Set Dico = CreateObject("scripting.dictionary")

    For Cptr = 1 To UBound(T_in)
    Ref = T_in(Cptr, 1)
    Valeur = T_in(Cptr, 2)
    If Not Dico.exists(Ref) Then
    Dico.Add Ref, Valeur
    Else
    If Dico.Item(Ref) < Valeur Then Dico.Item(Ref) = Valeur
    End If
    Next

    Range("E2").Resize(Dico.Count) = Application.Transpose(Dico.keys)
    Range("F2").Resize(Dico.Count) = Application.Transpose(Dico.items)

    Application.ScreenUpdating = True
    MsgBox UBound(T_in) & " lignes traitées en " & Timer - Start & " secondes"
    End Sub


    si ca convient, on mettra le tableau ou tu veux le mettre et je commenterai le code

    La maquette de W
    https://www.cjoint.com/c/FBykzzB8aQD

     Michel
    0
    1. Theo.R Messages postés 585 Statut Membre 31
       
      Oui en effet je n'avais pas considéré la taille du document :s

      Macro à privilégier donc ;)
      0