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
| Sub Demo2()
Dim F8, F6, Coll As New Collection, L$, D(), Lig(), i&, j&, Ligne, N As Integer, dater, T!
F8 = Feuil8.UsedRange.Value
F6 = Feuil6.UsedRange.Value
T = Timer
On Error Resume Next
For i = 2 To UBound(F8)
Coll.Add i, CStr(F8(i, 5))
If Err Then
L = Coll(F8(i, 5))
Coll.Remove F8(i, 5): Coll.Add L & " " & i, CStr(F8(i, 5))
End If
Err.Clear
Next
For i = 3 To UBound(F6)
Coll (F6(i, 4))
If Err.Number = 0 Then
a = Split(Coll(F6(i, 4)), " ")
For j = 0 To UBound(a)
If CDate(F8(a(j), 2)) >= CDate(F6(i, 10)) Then
N = N + 1: ReDim Preserve D(1 To N): ReDim Preserve Lig(1 To N)
D(N) = CLng(CDate(F8(a(j), 2))): Lig(N) = a(j)
End If
Next
dater = CDate(Application.Min(D))
If Not Err Then
Ligne = CLng(Lig(Application.Match(CLng(dater), D, 0)))
F6(i, 16) = dater
F6(i, 17) = F8(Ligne, 3)
F6(i, 13) = F8(Ligne, 4)
End If
End If
If F6(i, 16) = "" Then
F6(i, 16) = "NO"
F6(i, 17) = "NO"
F6(i, 13) = "NO"
End If
Err.Clear: N = 0: dater = "": Ligne = "": Erase D, Lig
Next
On Error GoTo 0
Application.ScreenUpdating = False
Res = Index_Tab(F6, 3, 13): Feuil6.Cells(3, 13).Resize(UBound(Res), UBound(Res, 2)) = Res: Erase Res
Res = Index_Tab(F6, 3, 16, 17): Feuil6.Cells(3, 16).Resize(UBound(Res), UBound(Res, 2)) = Res: Erase Res
Application.ScreenUpdating = True
MsgBox "Temps d'execution : " & Format(Timer - T, "0.000 s")
End Sub
Function Index_Tab(VA As Variant, Entete As Byte, ParamArray Arr()) 'Les paramètres : 1- Variable tableau | 2- Entete (afin de la supprimer ou pas) Í 3-Array (colonne voulu de la variable tableau, ex : 4, 7, 9)
Dim VB(), i&, j&
ReDim VB(1 To UBound(VA) - Entete + 1, 1 To UBound(Arr) + 1)
For i = Entete To UBound(VA)
For j = 1 To UBound(Arr) + 1: VB(i - Entete + 1, j) = VA(i, Arr(j - 1)): Next
Next
Index_Tab = VB
End Function |
Partager