Cette question a été modifiée en raison de longs commentaires et mises à jour des réponses proposées.
Comme demandé ici est le module 13;
Sub SaveInFormat()
Application.DisplayAlerts = False
Workbooks.Application.ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data\" & Format(Date, "yyyymm") & "DB" & ".xlsx", leFormat:=51
Application.DisplayAlerts = True
End Sub
Il y a aussi des problèmes avec la gestion des erreurs, je sais que je me suis trompé, mais je suis plus intéressé par la correction de la fonction de fermeture au moment où j'y vais. Voici le code de gestion des erreurs qui nécessite un peu de travail
Sub test()
Dim wk As String, yr As String, fname As String, fpath As String
Dim owb As Workbook
wk = ComboBox1.Value
yr = ComboBox2.Value
fname = yr & "W" & wk
fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data"
owb = Application.Workbooks.Open(fpath & "\" & fname)
On Error GoTo ErrorHandler:
ErrorHandler:
If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then Exit Sub Else Call Clear
'Do Some Stuff
Call Module13.SaveInFormat
owb.Close
c'est votre code de test plus ma modification du chemin et du nom du fichier
Après la discussion, poster la réponse mise à jour:
Option Explicit
Sub test()
Dim wk As String, yr As String
Dim fname As String, fpath As String
Dim owb As Workbook
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
End With
wk = ComboBox1.Value
yr = ComboBox2.Value
fname = yr & "W" & wk
fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data"
On Error GoTo ErrorHandler
Set owb = Application.Workbooks.Open(fpath & "\" & fname)
'Do Some Stuff
With owb
.SaveAs fpath & Format(Date, "yyyymm") & "DB" & ".xlsx", 51
.Close
End With
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
End With
Exit Sub
ErrorHandler: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then
Else: Call Clear
End Sub
Gestion des erreurs:
Vous pouvez essayer quelque chose comme ceci pour détecter une erreur spécifique:
On Error Resume Next
Set owb = Application.Workbooks.Open(fpath & "\" & fname)
If Err.Number = 1004 Then
GoTo FileNotFound
Else
End If
...
Exit Sub
FileNotFound: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then
Else: Call Clear
Je vais essayer de répondre à plusieurs choses différentes, mais ma contribution peut ne pas couvrir toutes vos questions. Peut-être que plusieurs d'entre nous peuvent en retirer des morceaux différents. Cependant, ces informations devraient vous être utiles. Et c'est parti..
Ouverture d'un fichier séparé:
ChDir "[Path here]" 'get into the right folder here
Workbooks.Open Filename:= "[Path here]" 'include the filename in this path
'copy data into current workbook or whatever you want here
ActiveWindow.Close 'closes out the file
Ouverture d'un fichier avec une date spécifiée s'il existe:
Je ne sais pas comment rechercher dans votre répertoire pour voir si un fichier existe, mais dans mon cas, je ne prendrais pas la peine de le rechercher, j'essaierais simplement de l'ouvrir et de faire une vérification d'erreur afin que s'il ne n'existe pas alors affichez ce message ou faites xyz.
Quelques déclarations de vérification d'erreur courantes:
On Error Resume Next 'if error occurs continues on to the next line (ignores it)
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" 'try to open file here
Ou (meilleure option):
s'il n'y en a pas, ouvrez une boîte de message ou une boîte de dialogue pour dire "le fichier n'existe pas, voulez-vous en créer un nouveau?
vous voudrez probablement utiliser le GoTo ErrorHandler
indiqué ci-dessous pour y parvenir
On Error GoTo ErrorHandler:
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" 'try to open file here
ErrorHandler:
'Display error message or any code you want to run on error here
Beaucoup plus d'informations sur la gestion des erreurs ici: http://www.cpearson.com/Excel/errorhandling.htm
Aussi, si vous voulez en savoir plus ou devez en savoir plus en général sur VBA, je recommanderais le site de Siddharth Rout, il a beaucoup de tutoriels et d'exemples de code ici: http://www.siddharthrout.com/vb-dot- net-et-Excel /
J'espère que cela t'aides!
Exemple sur la façon de s'assurer que le code d'erreur ne s'exécute PAS CHAQUE fois:
si vous déboguez le code sans le Exit Sub
AVANT le gestionnaire d'erreurs, vous vous rendrez vite compte que le gestionnaire d'erreurs sera exécuté à chaque fois qu'il y aura une erreur ou non. Le lien sous l'exemple de code montre une réponse précédente à cette question.
Sub Macro
On Error GoTo ErrorHandler:
ChDir "[Path here]"
Workbooks.Open Filename:= "[Path here]" 'try to open file here
Exit Sub 'Code will exit BEFORE ErrorHandler if everything goes smoothly
'Otherwise, on error, ErrorHandler will be run
ErrorHandler:
'Display error message or any code you want to run on error here
End Sub
Aussi, regardez cette autre question car vous avez besoin de plus de référence sur la façon dont cela fonctionne: le bloc goto ne fonctionne pas VBA