Dans un fichier Excel, je dois exécuter une macro indiquant:
- d'ouvrir et de fermer 4 fichiers Excel, qui me servent de base de données, à des emplacements différents sur le C:\
- si l'un des 4 fichiers est déjà ouvert, de ne pas l'ouvrir à nouveau
Re : VBA Ouverture et fermeture fichier sous condition
Re,
reprenons depuis le début,
Dit moi sous quelle condition ton classeur doit ce fermer.
Code:
If FileSourceOpen = False Then 'Si le fichier est fermé alors on l'ouvre
Set OPSourceFile = Workbooks.Open("c:\dossier\base1.xls")
FileSourceOpen = True
End If
'Pareil pour l'autre
If FileSourceOpen2 = False Then
Set OPSourceFile2 = Workbooks.Open("c:\dossier\base2.xls")
FileSourceOpen2 = True
End If
Avec le code là, les classeur ne sont pas fermer, mais la macro ne plante pas si ils sont ouvert. A présent, il faut que tu nous dise sous quelle condition, ton classeur doit être fermé afin de pouvoir creer la procédure de fermeture des fichier.
Re : VBA Ouverture et fermeture fichier sous condition
en fait, dans "ThisWorkBook", j'ai la procédure "Sub WorkBook_Open()", dans laquelle je mets le test du fichier :
Code:
On Error Resume Next
Set Wb = Workbooks("NomFichier1.xls")
If Err <> 0 Then Workbooks.Open Filename:="chemin_complet" & "NomFichier1_.xls", UpdateLinks:=1 ', ReadOnly=1 (uniquement pour l'avoir en lecture seule)
que tu peux répéter 4 fois pour tes 4 fichiers...
qui vérifie si le fichier est déjà ouvert, sinon, ça l'ouvre
et, toujours dans "ThisWorkBook", j'ai une autre procédure "Sub Workbook_BeforeClose(Cancel As Boolean)"
dans laquelle j'ai:
Code:
On Error Resume Next
Workbooks("NomFichier1.xls").Close False
Workbooks("NomFichier2.xls").Close False
dès que je ferme le fichier maître, les fichiers enfants sont également fermés (en fait, j'ai mis d'autres conditions pour la fermeture, mais ça ne change rien pour toi)
Re : VBA Ouverture et fermeture fichier sous condition
Okay, alors:
J'ai un fichier dans lequel j'exécute une macro. Cette macro doit:
1) ouvrir 4 fichiers différents de base de données
2) s'il y a un message d'erreur indiquant qu'un des fichiers est déjà ouvert, ne pas l'ouvrir et rien faire
3) fermer uniquement les fichiers que la macro vient d'ouvrir et conserver les fichiers déjà ouvert avant l'exécution de la macro.
Re : VBA Ouverture et fermeture fichier sous condition
okay. Voici le code avec ta procédure:
Sub Test()
Application.DisplayAlerts = False
On Error Resume Next
Set Wb = Workbooks("Base1.xls")
If Err <> 0 Then Workbooks.Open Filename:="C:\Dossier\Base1.xls", UpdateLinks:=1 ', ReadOnly=1 (uniquement pour l'avoir en lecture seule)
On Error Resume Next
Workbooks("Base1.xls").Close False
End Sub
Si le fichier "Base1" est déjà ouvert avant l'exécution de la macro, celle-ci en s'exécutant n'ouvre pas de nouveau le fichier mais le ferme systématiquement après, qu'il soit déjà ouvert avant la macro ou pas. Or je voudrais que ce fichier reste ouvert s'il l'est avant l'exécution de la macro.
Re : VBA Ouverture et fermeture fichier sous condition
dsl pour le retard,
essaye avec:
If Err <> 0 Then
Workbooks.Open Filename:="C:\Dossier\Base1.xls", UpdateLinks:=1 ', ReadOnly=1 (uniquement pour l'avoir en lecture seule)
x=false
end if
et à la fin:
if x = false then
On Error Resume Next
Workbooks("Base1.xls").Close False
x=true
end if
en fait, j'ajoute une condition "x" (bolean) que je teste pour savoir si le fichier et ouvert par la macro ou avant (x=true si ouvert avant)
à +