Salut Safach,
voivi ton fichier, à tester sur une copie de tes fichiers, bien sûr.
La macro.démarre à l'ouverture du fichier.
Private Sub Workbook_Open()
'
Dim tTab, tExtract(), iIdx%, sSheet$
'
Application.ScreenUpdating = False
'
For x = Sheets.Count To 3 Step -1
If CDate(Sheets(x).Name) < Date Then
With Sheets(x)
sSheet = Sheets(x).Name
tTab = .Range("A9:W" & .Range("A" & Rows.Count).End(xlUp).Row).Value
For y = 1 To UBound(tTab, 1)
If tTab(y, 20) = "" Then _
iIdx = iIdx + 1: _
ReDim Preserve tExtract(9, iIdx): _
tExtract(0, iIdx - 1) = CDate(sSheet): _
tExtract(1, iIdx - 1) = tTab(y, 2): _
tExtract(2, iIdx - 1) = tTab(y, 3): _
tExtract(3, iIdx - 1) = tTab(y, 4): _
tExtract(7, iIdx - 1) = tTab(y, 20): _
tExtract(9, iIdx - 1) = tTab(y, 23)
Next
End With
End If
Next
'
On Error Resume Next
If Not Workbooks("Safach-2") Is Nothing Then Set sWBk = Workbooks.Open(ThisWorkbook.Path & "\" & "Safach-2.xlsx")
If Not sWBk Is Nothing Then
With sWBk.Sheets(1)
.Range("B7:K" & .Range("B" & Rows.Count).End(xlUp).Row + 1).Value = ""
.Range("B7").Resize(iIdx, 10).Value = WorksheetFunction.Transpose(tExtract)
End With
End If
On Error GoTo 0
'
End Sub
Petit plus pour la route :
- pour créer une nouvelle feuille, ton USF2 te propose d'office la date de la 3e feuille + 1 jour et vérifie que la valeur encodée est bien une date ;
- le format de la date est immédiatement le bon (dd-mm-yyyy) : plus besoin de vérifier...
Private Sub UserForm_Activate()
'
ladate = DateAdd("d", 1, CDate(Sheets(3).Name))
'
End Sub
J'ai nommé tes fichiers "Safach-1" et "Safach-2" : à toit à modifier cela après les tests.
A+