1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Sub entrainement()
Dim Plage As Range
Dim tabdates_compta_max(1 To 10, 1 To 2)
Dim Cel As Range
Dim Adr As String
Dim I As Integer
Dim J As Integer
'défini la plage de recherche en colonne A
Set Plage = Range([A1], [A65536].End(xlUp))
'boucle pour récupérer les 10 plus grandes dates
'(en ordre croissant, de la plus récente à la plus ancienne)
'avec le numéro de ligne où se trouve la date correspondante
With Application.WorksheetFunction
'défini J à 1 pour correspondre à I en début de boucle
J = 1
For I = 1 To UBound(tabdates_compta_max)
tabdates_compta_max(I, 1) = CDate(.Large(Plage, J))
' tabdates_compta_max(I, 2) = Plage.Find(tabdates_compta_max(I, 1), , _
' xlValues, xlWhole).Row
Set Cel = Plage.Find(tabdates_compta_max(I, 1), , _
xlValues, xlWhole)
If Not Cel Is Nothing Then
'mémorise l'adresse de la cellule pour ne pas y revenir dessus (fin de boucle Do Loop)
Adr = Cel.Address
Do
'récupère les différents numéros de ligne dans la même dimension
tabdates_compta_max(I, 2) = tabdates_compta_max(I, 2) & "," & Cel.Row
'incrémente J afin de récupérer un seule fois les dates en doublon
'tout en récupérant les différents numéros de ligne
'J est incrémenté pour récupérer l'indice correspondant pour la fonction Large
J = J + 1
'cherche la suivante
Set Cel = Plage.FindNext(Cel)
Loop While Adr <> Cel.Address
'supprime la première virgule inutile
tabdates_compta_max(I, 2) = Replace(tabdates_compta_max(I, 2), ",", "", 1, 1)
End If
Next I
End With
'pour l'exemple, affiche le résultat dans la fenêtre de débogage
'c'est ici que tu vas utiliser tes 10 dates...
For I = 1 To UBound(tabdates_compta_max)
Debug.Print tabdates_compta_max(I, 1) 'date
Debug.Print tabdates_compta_max(I, 2) 'numéro de la ligne
Next I
End Sub |