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

Snoozex

XLDnaute Nouveau
Bonjour,

Je me permets de déterrer ce poste car je n'arrive pas a adapter les script proposé à mon fichier...
ma problématique est quasi identique (tri des doublons) mais encore un peu plus complex :

J'ai une liste de machines pour lesquelles je relève un certain nombre de compteur (ce sont des imprimantes)
Le soucis est que cette liste me donne les compteurs les plus récent ainsi que les anciens!
J'aimerais donc ne faire apparaître que les compteurs les plus récent pour un numéro de contrat identique.
Le soucis est que j'ai plusieurs lignes a garder pour chaque machine.
un exemple :
pour la machine N° 3402672445 il faudrait que je garde toute les lignes ayant la date la plus haute soit 10/12/2017. Ce qui représente 10 lignes. Les autre lignes pour la même machine peuvent disparaitre.

Ca c'est la première étape! Car après je souhaite, si cela est possible, mettre tous ces compteurs sur la même ligne : créer de nouvelles colonnes avec le nom des compteurs et y mettre les valeurs "comtpeur_value" correspondante. Afin de n'avoir plus qu'une ligne par N°contrat avec toutes les infos!

J'espère avoir été assès clair ... et merci d'avance !
 

Pièces jointes

  • imprimante.xlsx
    565 KB · Affichages: 29

CISCO

XLDnaute Barbatruc
Bonjour

Cf. en pièce jointe. Avec des formules matricielles (colonnes G, I et suivantes), et vu la hauteur de ton fichier (plus de 24000 lignes, 777 n° de contrat différents, sauf erreur de ma part (donc il faut tirer les formules au moins jusqu'à la ligne 778 !)), ça rame. Si tu as un ordi plus puissant que le mien, si tu ne t'en sers pas 5 fois par jour, c'est OK. Sinon, cela serait mieux avec une macro.

A vérifier bien sûr.

@ plus

P.S 1 : La formule dans I2 peut être tirée vers le bas et vers la droite.
P.S 2 : Cela ne fonctionne tel que que si les dates sont données par ordre décroissant pour chaque n° de contrat, les plus récentes en premier donc.
P.S 3 : Pour que cela soit vraiment pratique pour toi, il faudra définir une ou des plages dynamiques, dont la hauteur s'adapte automatiquement à la hauteur de ton fichier réel et réécrire les formules en les utilisant. Ainsi, tu n'auras pas à réécrire les formules lors des diverses mises à jour.
 

Pièces jointes

  • imprimante.xlsx
    1 MB · Affichages: 41
Dernière édition:

Snoozex

XLDnaute Nouveau
Merci beaucoup Cisco!
J'avoue ne pas comprendre ta formule mais peut importe ;)
Par contre quelques chose m’échappe : lorsque j'ouvre ton fichier, que je me place dans une formule (par exemple celle de la colonne P comptant le nombre de contrat différent, et que je valide sans rien changer cela m'affiche "0"! idem dans la colonne "num-contrat". Du coût impossible de le transposer dans mon fichier j'ai le même problème.

une idée??
 

CISCO

XLDnaute Barbatruc
Bonjour

A chaque fois que tu vois devant et derrière la formule, dans la barre de formule, des accolades, { et }, cela signifie qu'il s'agit d'une formule matricielle.
Pour qu'elle fonctionne correctement, il faut la valider en cliquant dans la barre de formule et avec les trois touches Ctrl+maj+entrer.
Excel rajoute ensuite automatiquement les accolades en question. Les calculs sont faits ensuite sur toutes les plages énumérées dans la formule, et pas uniquement avec le contenu de la première cellule de chacune de ces plages.

@ plus

P.S : Pour ce qui est des formules matricielles, cf. entre autre , post #10.
 

CISCO

XLDnaute Barbatruc
Bonsoir

Ok cela fonctionne merci !
Par contre c'est super long pour calculer effectivement ! (j'ai pourtant un I7 avec 8Go de RAM... ca fait bien 5 minute qu'il calcule la colonne "num-contrat"

Chez moi, cela prenait à peu près ce temps là, puis ensuite tout s'affichait en même temps.

C'est le défaut des calculs matriciels, utilisés sous cette forme. Vu que la formule calcule les résultats pour beaucoup de valeurs, pour finalement n'en afficher qu'un pris dans la liste obtenue, puis recommence dans la cellule en dessous ou à coté, c'est long. Pour résoudre cela, deux ou trois possibilités :
* Chercher à utiliser moins de formules matricielles
* Utiliser l'autre forme de formules matricielles, celle travaillant directement sur une grande plage. Dans ce cas, la formule ne refait pas le calcul dans chaque cellule. Mais cela n'est pas toujours possible.
* Faire avec du VBA, beaucoup plus puissant et rapide.

Si je trouve plus simple dans ton cas, j'essayerai.

@ plus
 
Dernière édition:

Snoozex

XLDnaute Nouveau
impressionnant ! c'est pas plus rapide ... c'est instantané!! Merci mille fois!

Juste une question : peut importe le nombre de ligne du fichier cela fonctionne?
pourquoi sort-il des date au format anglais? (je peux les convertir pas de soucis... mais bizar quand même)
 

cathodique

XLDnaute Barbatruc
pourquoi sort-il des date au format anglais? (je peux les convertir pas de soucis... mais bizar quand même)
Bonjour Snoozex, Cisco, Pierrejean:)

Je me souviens qu'une astuce avait été donnée par Laetitia90 concernant les dates.
Reprise sur le site de Boisgontier, pour éviter l'inversion des jour et des mois il faut utiliser la propriété '.Value2'.
C'est ce que j'ai fait dans le fichier de Pierrejean du post#38, et ça fonctionne!
VB:
tablo = Range("A2:D" & Range("A" & Rows.Count).End(xlUp).Row).Value2
' au lieu de
tablo = Range("A2:D" & Range("A" & Rows.Count).End(xlUp).Row)
Voilà, juste pour le partage.

Bonne année 2018 à toutes et à tous.

ps: je crois que ça concerne aussi les nombres décimaux (séparateur '.')
 

Marjo2

XLDnaute Occasionnel
Bonjour,
Je vois qu'il y a un début de code qui pourrait me convenir mais je vais pousser un peu plus la difficulté.
Je vous explique :
- Je conserve l'onglet "EXPORT"
- Dans l'onglet "RESULTAT1", je dois supprimer les doublons de la colonne D (Code+CC) en conservant la dernière date (colonne J) mais en conservant une ligne de chaque type (colonne K) (ils existent 4 types mais ne seront pas forcément utilisés les 4 sur un même code)
- Dans l'onglet "RESULTAT2", je mets le résultat de la formule :
si "Genre Mvt" (colonne K) = "E" ou "C" alors conserver la ligne la plus récente des 2 et ajouter en colonne Q "Date de dernier mouvement"
si "Genre Mvt" (colonne K) = "R" ou "F" alors conserver la ligne la plus récente des 2 et ajouter en colonne Q "Date de dernière entrée"

Vu le nombre de ligne, j'opterai pour un VBA.
Est-ce que l'un d'entre vous serez m'aider ?

Merci d'avance
 

Pièces jointes

  • TEST STOCK.xlsx
    4.2 MB · Affichages: 22

Sgt_Pepper

XLDnaute Nouveau
Bonjour,

Je rebondis sur cette discussion car je crois que mon cas n'existe pas encore dans les diverses options proposées - mais mon niveau catastrophique en VBA est possiblement responsable...

Je cherche à isoler :
- l'événement le plus récent (colonne A "Date de mouvement")
- pour chaque matricule existant (colonne BI "Matricule", données dynamiques dans le fichier réel utilisé i.e. ce ne sont pas toujours les mêmes cellules qui sont peuplées ou vides)
- à condition que les codes emploi précédent (colonne AD "Code emploi précédent") et suivant (colonne AN "Code emploi actuel") ne soient pas les mêmes.

Les autre colonnes de A à BI sont peuplées dans le fichier réel mais n'ont pas d'impact sur les éléments à isoler. Le fichier est par défaut non trié.
La base de données réelle fait environ 20 000 lignes.

Le résultat, dont un exemple pour ce cas précis est donné en onglet vert, doit être :
1. présenté dans un autre onglet identifié (pour ne pas supprimer de données dans la base de données source, puisqu'une action de macro est irréversible si j'ai bien compris)
2. écrasé intégralement à chaque nouvelle itération de la macro

J'ai du mal à imaginer le niveau de complexité de ce que je demande, je sais simplement que je me casse la tête dessus depuis 1 semaine. Si une bonne âme experte est prête à m'aider sur ce sujet, ce sera avec grand plaisir !

Merci et bonne journée !
 

Pièces jointes

  • Exemple à trier.xlsx
    14.2 KB · Affichages: 1

Slakhdine

XLDnaute Nouveau
bonjour M @pierrejean . moi également j'ai un problème qui se ressemble aux autres. mon problème c'est que je veux juste souligner en couleur les doublons ( ceux qui ont le même code DR "dans la première colonne") avec la valeur minimal" dans la colonne R".
voici mon fichier avec la macro , je crois qui'il me faudra juste une petite modification pour qu'il soit bon .
merci par avance
cordialement.
 

Pièces jointes

  • PROG ENVOI SMS.xlsm
    54.3 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 183
Messages
2 086 005
Membres
103 087
dernier inscrit
sarah.caneri