Vérifier si fichier deja ouvert, adaptation à mon cas

Z

Zarkoff

Guest
Bonjour,

J'ai attentivement regardé la macro de thierry ici:
http://www.excel-downloads.com/html/French/forum/messages/1_7348_7348.htm

Je n'arrive cependant pas à l'adapter :
Voici mon code :

Workbooks.Open Filename:=Open_File
MsgBox "Please save this file as a backup to not work on Vendor File", vbOKOnly
save_name = "Scan-Upload File-" & Format(month_form, "00") & "-" & WorksheetFunction.Proper(Right(year_form, 2))
save_file = Application.GetSaveAsFilename(InitialFilename:=save_name, fileFilter:="Excel Files (*.xls), *.xls")
'
On Error Resume Next
Workbooks(save_file).Activate
If Err = 0 Then Workbooks(save_file).Close
'
If save_file <> False Then
ActiveWorkbook.SaveAs Filename:=save_file, CreateBackup:=False
MsgBox "Save as " & save_file, vbOKOnly, "Work File"
Else: MsgBox "You must save this file", vbOKOnly: GoTo Fin3
End If

Bref le VB Code n'arrive pas à voir que le fichier est deja ouvert.
Peut-être est-ce parce que la variable "save_file" est de la forme
c:\repertoire\scan-upload file-09-03.xls il faudrait peut-être qu'il n'y ait pas le chemin mais je ne sais pas comment l'enlever de mon string (wouarf).

Merci de m'éclairer.
 
Z

ZON

Guest
Bonjour Zarkoff et le forum,


D'aprés ce que je comprends, tu veux enregitrer la classeur save_file dans le répertoire que choisit l'utilisateur. En essayant de faire un saveas si le classeur est déjà ouvert, on a une erreur 1004 normalement:

save_name = "Scan-Upload File-" & Format(month_form, "00") & "-" & WorksheetFunction.Proper(Right(year_form, 2))
save_file = Application.GetSaveAsFilename(InitialFilename:=save_name, fileFilter:="Excel Files (*.xls), *.xls")
'

If save_file <> False Then
on error resume next
ActiveWorkbook.SaveAs save_file
if err.number=1004 then workbook(save_filename).close 0 'Il est ouvert
MsgBox "Save as " & save_file, vbOKOnly, "Work File"
Else: MsgBox "You must save this file", vbOKOnly: GoTo Fin3
End If


Sinon mets le code complet de ta procédure d'enregistrement, car il manque ton fin3, la variable openfile...


A+++
 
Z

Zarkoff

Guest
Zon,

Premièrement merci pour ta réponse très rapide.

J'ai donc testé :

month_form, provient d'un formulaire
year_form, provient d'un formulaire

MsgBox "Please load Vendor File", vbOKOnly
Open_File = Application.GetOpenFilename("All Type (*.*), *.*")
If Open_File = False Then GoTo Fin3
Workbooks.Open Filename:=Open_File
MsgBox "Please save this file to not work on Vendor File", vbOKOnly
Again:
save_name = "Scan-Upload File-" & Format(month_form, "00") & "-" & WorksheetFunction.Proper(Right(year_form, 2))
save_file = Application.GetSaveAsFilename(InitialFilename:=save_name, fileFilter:="Excel Files (*.xls), *.xls")
'
' CHECK IF THIS FILE IS ALREADY OPEN !!!
If save_file <> False Then
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=save_file ', CreateBackup:=False
If Err.Number = 1004 Then Workbooks(save_name).Close 0
MsgBox "Save as " & save_file, vbOKOnly, "Work File"
Else: MsgBox "You must save this file", vbOKOnly: GoTo Again
End If

Fin3
Exit Sub

Alors voila ce qui se passe :
- Open_file est le fichier source, vu que la macro va travailler pour le modifier, je demande à l'utilisateur de sauvegarder sous un autre nom (pour éviter tout problème)
- L'utilisateur est invité à sauvegarder sous le save_name mais peut le changer !

Le code modifié ne fait deja plus planter la macro, c'est deja ca mais :
si un fichier indentique au save_name est deja ouvert, la macro enregistre le nouveau fichier sous open_file et travail dessus :-((

Je ne comprends pas ou est l'erreur.

NB :
Open_file est du type 'c:\repertoire\nom_fichier_source.xls'
Save_name est du type 'nom_du_fichier_cible' (sans .xls, mais j'ai essayé en le rajoutant, ca ne change rien)
Save_file est du type 'c:\repertoire\nom_fichier_destination.xls'
 

Statistiques des forums

Discussions
314 085
Messages
2 105 646
Membres
109 408
dernier inscrit
demichoux50