Optimiser code (copier data entre fichier)
Bonjour,
ma proc ouvre un fichier destination, copie des datas de ce fichier vers un fichier source.
9a marche, mais le soucis c'est que c'est long et que l'on voit les opérations malgré Application.ScreenUpdating.
Merci pour votre aide
Sub info_depuis_fichier()
Dim fd As FileDialog
Dim file_dest As String
Dim path As String
Dim file_src As String
Dim o_existe As Integer
Dim r_existe As Boolean
On Error Resume Next
ActiveSheet.Range("D1") = 1
Application.ScreenUpdating = False
file_src = ActiveWorkbook.Name
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = " "
.Filters.Add "eco", "*.xlsm"
'.InitialFileName = "eco.xlsm"
.AllowMultiSelect = False
End With
If fd.Show = -1 Then path = fd.SelectedItems(1) Else: Exit Sub
Set fd = Nothing
'CODE pour extraire nom fichier+extension d'un path
file_dest = Right(path, Len(path) - InStrRev(path, "\", -1, 1))
Workbooks.Open Filename:=path
'FILTRE si un onglet a bien le codename "eco"
r_existe = False
For o_existe = 1 To Sheets.Count
If Sheets(o_existe).CodeName = "eco" Then
r_existe = True
End If
Next
If r_existe = False Then GoTo close_fichier
Workbooks(file_dest).ActiveSheet.Range("E13:E42").Copy
Workbooks(file_src).ActiveSheet.Range("F15:F44").PasteSpecial xlValues
Workbooks(file_dest).ActiveSheet.Range("B13:B42").Copy
Workbooks(file_src).ActiveSheet.Range("E15:E44").PasteSpecial xlValues
Application.CutCopyMode = False
close_fichier:
Workbooks(file_dest).Close savechanges = False
ActiveSheet.Range("D1") = 0
Application.ScreenUpdating = True
End Sub
Bonjour,
J'ai apporté deux trois modifs mais je ne suis pas sûr que le gain de temps soit très significatif ? A tester pour voir :
Sub info_depuis_fichier()
Dim fd As FileDialog
Dim file_dest As String
Dim path As String
Dim file_src As String
Dim o_existe As Integer
Dim r_existe As Boolean
'On Error Resume Next
ActiveSheet.Range("D1").Value = 1
Application.ScreenUpdating = False
file_src = ActiveWorkbook.Name
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = " "
.Filters.Add "eco", "*.xlsm"
'.InitialFileName = "eco.xlsm"
.AllowMultiSelect = False
End With
If fd.Show = -1 Then path = fd.SelectedItems(1) Else: Exit Sub
Set fd = Nothing
'CODE pour extraire nom fichier+extension d'un path
file_dest = Right(path, Len(path) - InStrRev(path, "\", -1, 1))
Workbooks.Open path
'FILTRE si un onglet a bien le codename "eco"
r_existe = False
For o_existe = 1 To Sheets.Count
If Sheets(o_existe).CodeName = "eco" Then
r_existe = True
Exit For '<--si trouvé, plus la peine d'aller plus loin
End If
Next
If r_existe = False Then GoTo close_fichier
'éviter la copie par passage des valeurs peut être un poil plus rapide ? A tester !
Workbooks(file_src).ActiveSheet.Range("F15:F44").Value = Workbooks(file_dest).ActiveSheet.Range("E13:E42").Value
Workbooks(file_src).ActiveSheet.Range("E15:E44").Value = Workbooks(file_dest).ActiveSheet.Range("B13:B42").Value
close_fichier:
Workbooks(file_dest).Close False
ActiveSheet.Range("D1").Value = 0
Application.ScreenUpdating = True
End Sub
Bonjour Thomas, Theze, bonjour le forum,
Utliser un mot clé VBA comme nom d'un variable (Path) est fortement déconseillé... J'ai remplacé par CC (Chemin Complet)...
Une autre proposition avec, comme Theze, les mêmes doutes quant au gain de temps :
Sub info_depuis_fichier2()
Dim CS As Workbook
Dim OS As Worksheet
Dim fd As FileDialog
Dim CC As String
Dim O As Worksheet
Dim CD As Workbook
Dim OD As Worksheet
Application.ScreenUpdating = False
Set CS = ThisWorkbook
Set OS = CS.ActiveSheet
OS.Range("D1").Value = 1
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Title = " "
.Filters.Add "eco", "*.xlsm"
'.InitialFileName = "eco.xlsm"
.AllowMultiSelect = False
End With
If fd.Show = -1 Then CC = fd.SelectedItems(1) Else: Exit Sub
Set fd = Nothing
Workbooks.Open CC
Set CD = ActiveWorkbook
Set OD = CD.ActiveSheet
'FILTRE si un onglet a bien le codename "eco"
On Error Resume Next
Set O = eco
If Err <> 0 Then
Err.Clear
GoTo close_fichier
End If
On Error GoTo 0
'éviter la copie par passage des valeurs peut être un poil plus rapide ? A tester !
OS.Range("F15:F44").Value = OD.Range("E13:E42").Value
OS.Range("E15:E44").Value = OD.Range("B13:B42").Value
close_fichier:
CD.Close False
OS.Range("D1").Value = 0
Application.ScreenUpdating = True
End Sub
Bonjour,
Utliser un mot clé VBA comme nom d'un variable (Path) est fortement déconseillé...
Tu as raison ThauThème, il est préférable de ne pas utiliser ce genre de mot mais tu remarqueras que Path estune propriété et une propriété doit obligatoirement être précédé d'un point, c'est pour cette raison que je n'ai rien changé car il ne risque absolument pas d'y avoir une mauvaise interprétation par le compilateur contrairement à Val comme on voit assez souvent alors qu'une fonction Val() existe dans VB malgré que le compilateur sait faire la différence mais encore une fois tu as raison de ne pas utiliser ce type de nom qui peut prêter à confusion !
Bonjour le fil, bonjour le forum,
Il est pas fou Theze !... Rien à dire, c'est un pro... Toujours un plaisir de le lire et d'apprendre.
Bonjour
merci à tous pour vos réponse. 9a fonctionne mais par contre j'ai toujours l'écran qui 'flash'.
C'est à dire que l'on voit toutes les opérations se dérouler à l'écran(ouverture fichier, copier,...)