Bonjour,
J'ai ci-dessous deux codes qui mettent assez longtemps à s'exécuter ( parfois plus d'une minute) et que je souhaiterai optimiser afin de gagner du temps d'execution.
Les .select y sont en partie pour quelque chose mais pas uniquement je pense.
Mes codes ci-dessous :
Le premier ci-dessous vient ouvrir un second fichier, y copie une partie des cellules vers le fichier initial, ferme le second fichier.
Il supprimer ensuite une ligne sur deux sur la copie venant d'être réalisée sur le fichier initial (mise en cohérence des données)
Puis recopie ces données mises en cohérence vers une autre feuille du classeur source.
Code n° 2 : fusionne des cellules d'une feuil suivant une condition et applique une "formula" local dans une autre Feuil du classeur.
Merci d'avance pour votre aide.
Désolé d'avance de ne pas transmettre de fichier. Données sensibles.
Bonne journée
J'ai ci-dessous deux codes qui mettent assez longtemps à s'exécuter ( parfois plus d'une minute) et que je souhaiterai optimiser afin de gagner du temps d'execution.
Les .select y sont en partie pour quelque chose mais pas uniquement je pense.
Mes codes ci-dessous :
Le premier ci-dessous vient ouvrir un second fichier, y copie une partie des cellules vers le fichier initial, ferme le second fichier.
Il supprimer ensuite une ligne sur deux sur la copie venant d'être réalisée sur le fichier initial (mise en cohérence des données)
Puis recopie ces données mises en cohérence vers une autre feuille du classeur source.
VB:
Sub Suivi()
Application.ScreenUpdating = False
Dim CD As Workbook, OD As Worksheet, BSF As FileDialog
Dim fs As Byte, CS As Workbook, OS As Worksheet
Dim FN As Byte
Dim wb As Workbook
Dim lig As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Sheets("Suivi").Unprotect Password:="sandman"
Worksheets("Suivi").Range("A15:S5000").ClearContents
Set CD = ThisWorkbook
Set OD = CD.Worksheets(1)
Set BSF = Application.FileDialog(msoFileDialogOpen)
BSF.AllowMultiSelect = True
BSF.Show
If BSF.SelectedItems.Count = 0 Then Exit Sub
For fs = 1 To BSF.SelectedItems.Count
Application.Workbooks.Open (BSF.SelectedItems(fs))
Set CS = ActiveWorkbook
Set OS = CS.Worksheets(1)
If Left(CS.Name, 10) = "Export" Then
OS.Range("B14:I104").Copy
CD.Activate
Sheets("Suivi").Select
Range("A15").Select
ActiveSheet.Paste
End If
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Next
With Feuil130
Range("A12").Select
End With
Application.DisplayAlerts = False
CS.Close
Application.DisplayAlerts = True
' Suppression une ligne sur 2 pour la Feuil de Suivi pour mise en cohérence des données brut
With Worksheets("Suivi")
Dim NpTotal As Double
Application.ScreenUpdating = False
NpTotal = Range("a65535").End(xlUp).Row
For i = 2 To NpTotal + 1
Rows(i + 1).Delete
Next
End With
'Copie du suivi vers le rapport
Sheets("Suivi").Range("H9:H23").Copy
With Sheets("Rapport")
.Range("P28").PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
Sheets("Suivi_K7").Range("H24:H38").Copy
With Sheets("Rapport")
.Range("P80").PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
Sheets("Suivi").Range("H39:H53").Copy
With Sheets("Rapport")
.Range("P54").PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
Sheets("Suivi").Unprotect Password:="sandman"
Worksheets("Suivi").Range("A3:H8").ClearContents
Sheets("Suivi").Range("A3:H8").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Sheets("Suivi").Protect Password:="sandman"
Application.ScreenUpdating = True
Sheets("Rapport").Select
Range("J18").Select
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Code n° 2 : fusionne des cellules d'une feuil suivant une condition et applique une "formula" local dans une autre Feuil du classeur.
Code:
Sub MiseenFormeStat()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Archive (NE JAMAIS SUPP LE DOC)").Activate
With Sheets("Archive (NE JAMAIS SUPP LE DOC)")
For e = 8 To Range("A65500").End(xlUp).Row
If Not IsEmpty(Range("A" & e)) And Range("A" & e) Like "*du*" Then
Cells(e, 1).Resize(, 10).Merge
Else
Cells(e, "I") = SemJourNuit(e, 0)
Cells(e, "J") = SemJourNuit(e, 1)
End If
Next e
End With
Sheets("Statistiques").Activate
With Sheets("Statistiques")
[F36:F87].FormulaLocal = "=NB.SI.ENS('Archive (NE JAMAIS SUPP LE DOC)'!$I$9:$I$65000;$E36;'Archive (NE JAMAIS SUPP LE DOC)'!$J$9:$J$65000;$F$35)"
[G36:G87].FormulaLocal = "=NB.SI.ENS('Archive (NE JAMAIS SUPP LE DOC)'!$I$9:$I$65000;$E36;'Archive (NE JAMAIS SUPP LE DOC)'!$J$9:$J$65000;$G$35)"
End With
Sheets("SUIVIMANOEUVRE").Select
End Sub
Merci d'avance pour votre aide.
Désolé d'avance de ne pas transmettre de fichier. Données sensibles.
Bonne journée