Bonjour souki,
j'ai trouvé dans mon code VBA une bonne optimisation à faire ; remplace tout ce bloc :
With Cells(j, 4)
.Value = Tbl(i, 2) 'Nom
.Offset(, 1) = Tbl(i, 3) 'Prénom
.Offset(, 2) = Tbl(i, 4) 'Nb d'heure
.Offset(, 3) = Tbl(i, 5) 'compte rendu
.Offset(, 4) = Tbl(i, 6) 'Divers
End With
par cette seule ligne :
Cells(j, 4).Resize(, 5) = Application.Index(Tbl, i, [Column(B:F)])
ça fera la même chose, plus rapidement ; peut-être que le gain de temps ne sera perceptible que pour un très grand nombre de lignes dans ton tableau de la feuille "A1" ? mais de toute façon, le code VBA de la macro est plus court ! attention : dessous, laisse l'instruction j = j + 1
le code VBA complet est donc celui-ci :
Option Explicit
Sub Essai()
If ActiveSheet.Name <> "A2" Then Exit Sub
Dim Tbl, OT$, n&
OT = [D3]: If OT = "" Then Exit Sub 'sortie, car pas de N° OT
With Worksheets("A1")
n = .Cells(Rows.Count, 2).End(3).Row: If n = 1 Then Exit Sub
n = n - 1: Tbl = .[B2].Resize(n, 6)
End With
Dim i&, j&: j = 11: Application.ScreenUpdating = 0
i = Cells(Rows.Count, 4).End(3).Row
If i > 10 Then Range("D11:H" & i).ClearContents
For i = 1 To n
If Tbl(i, 1) = OT Then
Cells(j, 4).Resize(, 5) = Application.Index(Tbl, i, [Column(B:F)])
j = j + 1
End If
Next i
End Sub
tu peux tester avec ce fichier :
dhany