Bonjour,
A l'aide de ce forum et de codes trouvés sur internet j'ai créé une macro pour
- importer des classeurs dans une feuille "RECAP" en les consolidant (ils ont tous la même structure et je reçois 1 fichier par fournisseur)
- supprimer les lignes de ma feuille "Production_Schedule" qui correspondent aux lignes des fournisseurs dans la feuille "RECAP"
- copier les lignes consolidées à la suite de la feuille "'Production_Schedule"
Voici le résultat de cette macro, mais est ce possible de l'améliorer notamment pour que l'exécution soit plus rapide ?
Merci beaucoup
A l'aide de ce forum et de codes trouvés sur internet j'ai créé une macro pour
- importer des classeurs dans une feuille "RECAP" en les consolidant (ils ont tous la même structure et je reçois 1 fichier par fournisseur)
- supprimer les lignes de ma feuille "Production_Schedule" qui correspondent aux lignes des fournisseurs dans la feuille "RECAP"
- copier les lignes consolidées à la suite de la feuille "'Production_Schedule"
Voici le résultat de cette macro, mais est ce possible de l'améliorer notamment pour que l'exécution soit plus rapide ?
Code:
Sub Compilation_1()
Public ProdSchedule As Worksheet, shRecap As Worksheet
Public FichierR$, CheminR$
Set ProdSchedule = ThisWorkbook.Worksheets("Production_Schedule")
Set shRecap = ThisWorkbook.Worksheets("RECAP")
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
With ProdSchedule
If .FilterMode Then
.ShowAllData
End If
Columns("A:AM").EntireColumn.Hidden = False
End With
Stop
'Consolider les production schedules
shRecap.Visible = True
Do While FichierR <> ""
Set F = Workbooks.Open(CheminR & FichierR)
derligne = F.Sheets(1).Range("A65000").End(xlUp).Row
With F.Worksheets(1)
If .FilterMode Then .ShowAllData
Sheets("Feuil1").Columns("A:AM").EntireColumn.Hidden = False
End With
F.Sheets(1).Range("A2:AI" & derligne).Copy shRecap.Range("A65000").End(xlUp).Offset(1, 0)
F.Close SaveChanges:=False
FichierR = Dir
Loop
'Supprimer les lignes des production schedules importés
Dim cel As Range, derlig&, derL&, i&
Application.ScreenUpdating = False
derlig = Sheets("Production_Schedule").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Production_Schedule")
derL = .Cells(Rows.Count, 1).End(xlUp).Row
For i = derL To 2 Step -1
Set cel = shRecap.Range("c2:c" & derlig).Find(.Range("c" & i).Value, lookat:=xlWhole)
If Not cel Is Nothing Then
.Rows(i).Delete
Set cel = Nothing
End If
Next i
End With
shRecap.Activate
'Ne pas afficher les cellules vides
ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:="<>"
'Selectionner toutes les cellules pleines et indiquer la date
shRecap.Activate
Range("AI2").FormulaR1C1 = "=""Importé le ""&TEXT(now(),""jj-mmm-aa hh:mm"" )"
[AI2:AI2].AutoFill Range("AI2:AI" & Cells(Rows.Count, 1).End(xlUp).Row)
derL_MAJ = shRecap.Cells(Rows.Count, 1).End(xlUp).Row
derL_TB = 1 + Sheets("Production_Schedule").Cells(Rows.Count, 1).End(xlUp).Row
shRecap.Range("a2:AI" & derL_MAJ).Copy
Sheets("Production_Schedule").Activate
Range("A" & derL_TB).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'vider RECAP
With Sheets("RECAP")
.Rows("2:65536").EntireRow.Delete
.Visible = False
End With
'*****************
'Retirer les filtres et lancer les macros pour la mise en forme
Sheets("Production_Schedule").Activate
'supprimer les fichiers reçus
Kill CheminR & "*.*"
MsgBox "Les Production Schedules ont été importés !"
End Sub
Merci beaucoup