Désolé, j'ai mal compris votre question d'abord. Voici un code de travail qui a fini plus complexe que ce que je voulais que ce soit: D
Option Explicit
Private Function inCollection(ByRef myCollection As Collection, ByRef value As Variant) As Boolean
Dim i As Integer
inCollection = False
For i = 1 To myCollection.Count
If (myCollection(i) = value) Then
inCollection = True
Exit Function
End If
Next i
End Function
Sub listMinimums()
Dim source As Range
Dim target As Range
Dim row As Range
Dim i As Integer
Dim datas As New Collection
Dim minRows As New Collection
Set source = Range("A2:C5")
Set target = Range("D2")
target.value = source.value
For Each row In source.Rows
With row.Cells(1, 1)
If (inCollection(datas, .value) = False) Then
datas.Add .value
minRows.Add row.row, .value
End If
If (Me.Cells(minRows(.value), 2) > row.Cells(1, 2)) Then
minRows.Remove (.value)
minRows.Add row.row, .value
End If
End With
Next row
'output'
For i = 1 To minRows.Count
target(i, 1) = Me.Cells(minRows(i), 1)
target(i, 2) = Me.Cells(minRows(i), 2)
target(i, 3) = Me.Cells(minRows(i), 3)
Next i
Set datas = Nothing
Set minRows = Nothing
End Sub
Note: Vous pouvez remplacer Me
avec le nom de votre feuille.
C'est l'un de ces exemples Excel où je voudrais vraiment jeter les données dans Access et exécuter une requête. Utiliser 'GroupBy' et la fonction' Min' vous donneront exactement ce que vous cherchez. Quelque chose comme: 'SELECT Colonne1, Colonne2, Min (Colonne3) Comme Colonne3 FROM Table GROUP BY Colonne1'. Certes, écrire le code pour cela est un excellent exercice, mais parfois en utilisant un outil comme Access peut être très utile pour quelque chose comme ça. –
Il n'y a pas besoin d'Access, Excel est assez content d'ADO. – Fionnuala
Cela aurait été facile dans Access - mais l'outil est Excel ... L'exemple ADO semble intéressant. –