XL 2016 Extraction date minimum dans une liste avec doublons

porcinet82

XLDnaute Barbatruc
Hello tout le monde,

Ça fait un moment que je ne suis pas passé ici mais je bloque sur un truc (peut être tout con ?!) et j'aurai besoin de votre aide.
Le titre n'est pas forcément très parlant mais le fichier en pj devrait vous comprendre de vite cerner la demande.
J'ai simplifié au maximum, donc en gros j'ai une liste de noms contenant des doublons avec chacun une date.
Je souhaiterai extraire pour chaque nom unique après reformatage du nom, la date minimum.
Dans le fichier j'ai présenté le résultat dans des cellules pour faciliter la compréhension mais dans les faits j'aurai besoin de le stocker dans un tableau afin de pouvoir les utiliser ensuite.
Je ne vous mets même pas de bout de code parce que je pense que je suis parti dans le mauvais sens avec à la fois des tableaux, des splits et des collections...
Merci par avance pour votre aide et n'hésitez pas si ce n'est pas suffisamment clair...

@+
 

Pièces jointes

  • Exemple.xlsx
    12 KB · Affichages: 13

porcinet82

XLDnaute Barbatruc
Merci Roblochon pour ta proposition et pour la découverte de powerQuery que je ne connaissais pas.
Ça fonctionne sur la feuille mais comme je le mentionnais dans mon premier message (mais peut etre pas assez clairement,), ce "problème" fait partie d'un ensemble de macros et j'aurai donc besoin de le traiter par macros. Et quand je parlais de stockage dans un tableau, j'aurai du parler de Array.

Bref, si toi ou quelqu'un d'autre à une idée, je vous remercie par avance.
 

Efgé

XLDnaute Barbatruc
Bonjour porcinet82 :) , bonjour Roblochon

En utilisant un dictionnaire.
Le code n'est qu'un exemple.
VB:
Sub test()
Dim i&
Dim Dico As Object
Dim Tmp, X, Tab_Nom, Tab_Val, Nom


'Création du dictionnaire
Set Dico = CreateObject("Scripting.dictionary")

For i = 4 To 9 'Boucle sur les lignes du tableau source
'Netoyage des noms (à vérifier sur les données réelles)
Tmp = Split(Cells(i, 1), "_")
Nom = Right(Tmp(0), 1)
X = Left(Tmp(1), 1)
If IsNumeric(X) Then Nom = Nom & "." & X
'-------------------------------------------------------

'utilisation du dictionnaire
If Dico(Nom) < Cells(i, 2) Then Dico(Nom) = Cells(i, 2)
Next i

'Récupération en tableaux
Tab_Nom = Dico.Keys
Tab_Val = Dico.Items

'Visualisation sur feuille
Cells(6, 10).Resize(UBound(Tab_Nom) + 1, 1).FormulaLocal = Application.Transpose(Tab_Nom)
Cells(6, 11).Resize(UBound(Tab_Val) + 1, 1).FormulaLocal = Application.Transpose(Tab_Val)

End Sub

Pour toutes les possibilité des dico, elles sont nombreuses, voir le site de J.Boisgontier:


Cordialement
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Salut Efgé,

Je n'ai pas pris le temps de repasser ici avant, mais un grand merci pour ton aide !
Grâce à toi j'ai découvert les Dictionnary que je ne connaissait pas mais qui s'avèrent être un outils intéressant et puissant, et ton code m'a permis de solutionner mon problème ! :)
A bientôt !
 

Discussions similaires

Réponses
13
Affichages
342