et encore doublons

  • Initiateur de la discussion marie
  • Date de début
M

marie

Guest
Bonjour à tous j'ai besoin d'un peu d'aide

Voilà j'ai aussi un pb de doublons
J'ai réussi à faire supprimer les doublons mais c'est tout à fait que je veux

Voilà j'ai une liste en colonne A de shipper et le volume en colonne B
les shippers sont tous en double et je voudrais garder que les shippers ayant un volume le plus grand

Dans le fichier joint j'ai commencé à souligner en jaune les lignes que je voudrais garder
car ex. pour le shipper T1043141 je veux la ligne 20 (volume 0.04203)

si qqn peut m'aider

Merci
[file name=Classeur2_20050629111413.zip size=32547]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur2_20050629111413.zip[/file]
 

Pièces jointes

  • Classeur2_20050629111413.zip
    31.8 KB · Affichages: 15

Hervé

XLDnaute Barbatruc
Bonjour marie, andré, le forum

En attendant la soluce d'andré par formule.

une proposition VBA

Traitement en 10 secondes, les doublons n'ont pas besoin d'etre classés;

On doit pouvoir améliorer le temp de traitement.

Sub Bouton1_QuandClic()
Dim tablo As Variant
Dim data As Collection
Dim i As Integer, x As Integer, j As Integer
Dim max As Double

tablo = Range('a2:b' & Range('a65536').End(xlUp).Row)

Set data = New Collection

On Error Resume Next
For i = 1 To UBound(tablo)
    data.Add CStr(tablo(i, 1)), CStr(tablo(i, 1))
Next i
On Error GoTo 0

For i = 1 To data.Count
    max = 0
   
For j = 1 To UBound(tablo, 1)
       
If data.Item(i) = tablo(j, 1) Then
           
If tablo(j, 2) > max Then
                max = tablo(j, 2)
           
End If
       
End If
   
Next j
    x = x + 1
    Sheets('feuil2').Cells(x, 1) = data.Item(i)
    Sheets('feuil2').Cells(x, 2) = max
Next i

End Sub

salut

edition : le renvoi se fait sur la feuille 2

Message édité par: Hervé, à: 29/06/2005 11:49
 

andré

XLDnaute Barbatruc
Rere ..., à toi aussi Hervé,

C'était cela : 216 Ko !

Petite précision : je me suis basé sur le fait que la liste était triée et que par conséquent la plus grande valeur est toujours la dernière de chaque code.

Ândré. [file name=marie_V1.zip size=6550]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/marie_V1.zip[/file]
 

Monique

Nous a quitté
Repose en paix
Bonjour,

Au suivant…
Avec des formules matricielles,
à valider par ctrl, maj et entrée
sans colonne supp.
Les données n'ont pas besoin d'être triées.
[file name=SansDoublonsMarie.zip size=6618]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/SansDoublonsMarie.zip[/file]
 

Pièces jointes

  • SansDoublonsMarie.zip
    6.5 KB · Affichages: 25

2passage

XLDnaute Impliqué
Bonjour,


pfffF.... Monique.... ça fait quelques jours que j'essaye désespérément de comprendre ta façon de régler ce type de problèmes... et... ouiiiin... j'arrive paaaas.... Déjà d'habitude, je capte très modérément mais alors là, c'est un sommet : A quoi sert un x1 ?... je vois '*1' dans la formule, je me dis 'tiens curieux.. il me semblait que *1 ca ne faisait rien.. d'un autre coté.. si Monique le met....'... hop hop, on teste.. et.. ben non ça marche pas sans... Alors... par quelle magie un *1 fait-il quelquechose de nécessaire....

grmblll... j'envisage de multiplier par 12 ma période d'hibernation de 1 mois et de me terrer dasn une grotte, loin d'XL....
 

andré

XLDnaute Barbatruc
Salut Hervé et les autres,

En D2 : =SI(LIGNE()>MAX($A:$A);'';RECHERCHEV(LIGNE();$A:$C;COLONNE()-2;0))

J'emploie les fonctions LIGNE() et COLONNE() au lieu des constantes 2 et 4, afin qu'elles s'incrémentent à la copie, tant vers la bas que vers la droite.
J'aurai même pu écrire $A:B au lieu de $A:$C, cette référence se serait également incrémentée en $A:C en la copiant vers la droite.

LIGNE()>MAX($A:$A) est une condition qui vérifie la présence de la valeur cherchée (sous la fonction RECHERCHEV) dans la colonne A et évite d'envoyer un message d'erreur si elle n'est pas trouvée.
Elle peut aussi être écrite : NB($D1:D1)+2

Le '2' provient du fait que la numérotation en colonne A commence par '2'.
Si en A2 j'avais écris =SI(B2=B3;'';NB(A$1:A1)+1) au lieu de =SI(B2=B3;'';NB(A$1:A1)+2), j'aurai du écrire en D2 :
=SI(LIGNE()-1>MAX($A:$A);'';RECHERCHEV(LIGNE()-1;$A:$C;COLONNE()-2;0)).
C'est un libre choix de ma part.

RECHERCHEV(LIGNE();$A:$C;COLONNE()-2;0))
recherche dans la première colonne de la plage A:C (=A) la valeur du no de la ligne (=2) en demandant de renvoyer la valeur se trouvant sur la même ligne dans la colonne D-2 = 4-2=2.

Je suppose que ce qui t'a quelque peu pertrubé c'est d'avoir remplacé les constantes par les fonctions LIGNE et COLONNE.
Le seul but est l'incrémentation.

J'espère avoir été clair dans mes explications, faute de quoi ... tu sais où j'habite, et je suis toujours à la masion (lol).

Ândré.
 

Hervé

XLDnaute Barbatruc
re pour certains
bonjour monique, 2passage

waouh andré, j'ai compris :lol:

Merci

ligne et colonne : pas bête du tout.

Tu devrais te mettre au VBA, andré, avec des raisonnements pareils tu ferais un malheur.

BOn, ben moi, je vais reposé mon neurone :pinch:

Salut
 

andré

XLDnaute Barbatruc
Resalut Hervé,

Un peu de patience, je vais bientôt m'y mettre.
Mais ma grand-mère m'a toujours dit qu'il fallait d'abord apprendre à bien marcher avant de vouloir courrir.

Maintenant que je maîtrise quelque peu les formules, que je fais de sérieux progrets avec la fonction SOMMEPROD, il me faut encore approndir les matricelles, les TCD et les graphiques.

Et ensuite, tiens toi prêt (mais je t'avertirai avant) je m'attaque au VBA.

Sans vouloir te faire la leçon, j'ai appris, de part ma profession, que tant qu'on ne maîtrise pas les exceptions, on est nulle part.
Et puis, je déteste l'amateurisme, dans le sens 'd'apprentis sorciers'.

Ândré.
 

Discussions similaires

Réponses
10
Affichages
421

Statistiques des forums

Discussions
312 291
Messages
2 086 847
Membres
103 400
dernier inscrit
MINOU WILL