Code Verifier Fichier a l'ouverture en Erreur

Foufoudora

XLDnaute Occasionnel
Bonjour le forum,

je rencontre 2 problemes avec le code suivant:
le code verifie a l'ouverture du FileSouce si un fichier existe:
1- si le fichier n'existe pas il le cree par contre il m'envoie un code erreur '9' subscipt out of range sur la ligne en rouge dans le code.

2- si le fichier existe il ouvre le fichier mais ne ferme pas le fichier source.

Merci par avance de m'eclairer sur ces 2 problemes

Salutations

Private Sub Workbook_Open()
Dim fso As Object, x As Boolean
Dim RepSource As String, FileSource As String
Set fso = CreateObject("Scripting.FileSystemObject")
RepSource = ThisWorkbook.Path
FileSource = ThisWorkbook.Name
x = fso.FileExists(RepSource & "\" & Application.UserName & ".xls")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If x = True Then
Workbooks.Open (RepSource & "\" & Application.UserName & ".xls")
Workbooks(FileSource).Close
Else
ActiveWorkbook.SaveAs (RepSource & "\" & Application.UserName & ".xls")
'Workbooks(FileSource).Activate
Workbooks(FileSource).Close
End If
Application.DisplayAlerts = True
Sheets("Instructions").Activate
End Sub
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Code Verifier Fichier a l'ouverture en Erreur

bonjour Foufoudora

Un des problèmes vient de :

Code:
ActiveWorkbook.SaveAs (RepSource & "\" & Application.UserName & ".xls")
L'aciveWorkbook change de nom !! (d'ailleurs a cet instant il ne doit y avoir qu'un seul fichier ouvert)
pour l'autre, il faudrait verifier si le Name n'a pas besoin d'etre complété par .xls (cas d'un fichier qui n'a pas encore été enregistré
 

Foufoudora

XLDnaute Occasionnel
Re : Code Verifier Fichier a l'ouverture en Erreur

Bonjour Pierrejean, le Forum,

Merci pour ta reponse.
J'ai essaye de remplacer la variable FileSource par le vrai nom du fichier et il me donne la meme erreur.
meme erreur en ecrivant comme ca:
Workbooks(RepSource & "\" & Application.UserName & ".xls").SaveAs

Merci par avance
Salutations
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Code Verifier Fichier a l'ouverture en Erreur

Bonjour Foufoudora, Pierrejean

Essayez le code suivant.

Quand le fichier n'existe pas, il est créé par SaveAs, donc le fichier source n'est plus ouvert, et il ne faut donc pas écrire Workbooks(FileSource).Close

Quand le fichier existe, il est ouvert, mais il faut désactiver par Enable.Events son Workbook_Open()

Code:
Private Sub Workbook_Open()
Dim fso As Object, x As Boolean
Dim RepSource, FileSource As String
Set fso = CreateObject("Scripting.FileSystemObject")
RepSource = ThisWorkbook.Path
FileSource = ThisWorkbook.Name
x = fso.FileExists(RepSource & "\" & Application.UserName & ".xls")
Set fso = Nothing
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If x = True Then
Application.EnableEvents = False
Workbooks.Open (RepSource & "\" & Application.UserName & ".xls")
Application.EnableEvents = True
Sheets("Instructions").Activate
Workbooks(FileSource).Close
End If
ActiveWorkbook.SaveAs (RepSource & "\" & Application.UserName & ".xls")
Sheets("Instructions").Activate
End Sub
A+

Edit : attention, il manquait un E au 2ème EnableEvents
 
Dernière édition:

Foufoudora

XLDnaute Occasionnel
Re : Code Verifier Fichier a l'ouverture en Erreur

Bonjour Job75, Pierrejean, le Forum

Merci pour ta reponse Job75,

j'ai essaye ton code il fonctionne bien si le fichier n'existe pas. par contre j'ai une erreur code 438 : "Object doesn't support property or method" sur la ligne Application.Enablevents = True

Merci par avance
Salutations
 

Foufoudora

XLDnaute Occasionnel
Re : Code Verifier Fichier a l'ouverture en Erreur

Bonjour Job75, pierrejean, le forum

Merci beaucoup, ca fonctionne a merveille.
tu peux me donner l'explication si ca ne te derange pas. je cherche a comprendre
Merci par avance
Bonne journee
Salutations
 

job75

XLDnaute Barbatruc
Re : Code Verifier Fichier a l'ouverture en Erreur

Re

Quand le fichier n'existe pas, je pense que vous avez compris, SaveAs donne un nouveau nom au fichier, il n'est donc plus ouvert sous son ancien nom, mais avec l'ancien nom il existe toujours sur le dique dur.

Quand le fichier existe, la macro l'ouvre, mais n'oubliez pas qu'il possède la même macro Workbook_Open qui va donc s'exécuter si on ne la désactive pas. C'est le rôle de Application.EnableEvents = False qui désactive toute action des évènements (Open en est un). Il faut ensuite impérativement réactiver en donnant la valeur True.

Bien noter aussi que Workbooks(FileSource).Close arrête la macro immédiatement (donc pas besoin de Else dans le test).

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS