Excel : cherche formule si doublon
Fermé
marinak
-
23 févr. 2016 à 17:43
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 - 24 févr. 2016 à 13:34
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 - 24 févr. 2016 à 13:34
A voir également:
- Excel : cherche formule si doublon
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
2 réponses
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
23 févr. 2016 à 17:47
23 févr. 2016 à 17:47
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:
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")
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
Modifié par michel_m le 24/02/2016 à 11:26
Modifié par michel_m le 24/02/2016 à 11:26
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
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
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
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
24 févr. 2016 à 13:34
24 févr. 2016 à 13:34
Oui en effet je n'avais pas considéré la taille du document :s
Macro à privilégier donc ;)
Macro à privilégier donc ;)
24 févr. 2016 à 10:19
Ç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
24 févr. 2016 à 12:06
Sinon merci de joindre un document via www.cjoint.com pour voir ce qui cloche de votre côté.
Cdt,