Conflit d'accès à un fichier Excel sous VBA à partir de Word
2 réponses
arbiel
Bonour
Tout d'abord ce message est assez long car j'ai introduit mon code pour
permettre l'analyse de mes difficultés à qui voudra bien se pencher sur mon
problème, avec mes remerciements.
Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet
d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le
fichier recherché : le fichier semble bien chargé, malgré la demande
d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a
pour l'instant qu'un onglet dans le fichier), mais la partie feuille de
l'écran reste blanche.
Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit
d'accès ?
D'avance merci, et merci d'avoir pris le temps de litre ce message
Pour être plus précis voici la partie concernée du code :
Public Gbl_Excel As Excel.Application
Public Gbl_Word As Word.Application
Public Sub ChargeLeChrono()
Dim LeChrono As Excel.Worksheet
InitApp ("Excel")
Gbl_Excel.Visible = True
Set LeChrono = LOngletChrono()
LeChrono.Parent.Windows(1).Visible = True
LeChrono.Activate
End Sub
Private Function ChargeApplication(Classe As String) _
As Object
On Error Resume Next
Set ChargeApplication = CreateObject(Classe)
If Err.Number <> 0 Then 'une erreur indique que l'application n'est pas
active
Err.Clear
Set ChargeApplication = Nothing
End If
End Function
Private Function InitApplication(Classe As String) _
As Object
On Error Resume Next
Set InitApplication = GetObject(, Classe)
If Err.Number <> 0 Then 'une erreur indique que l'application n'est pas
chargée
Err.Clear
Set InitApplication = ChargeApplication(Classe)
End If
End Function
Sub InitApp(Application As String)
Dim Classe As String
Classe = Application + ".Application"
On Error Resume Next
Select Case Application
Case Is = "Word"
If Gbl_Word.Name <> "Microsoft Word" Then
Set Gbl_Word = InitApplication(Classe)
End If
Case Is = "Excel"
If Gbl_Excel.Name <> "Microsoft Excel" Then
Set Gbl_Excel = Excel.Application
End If
End Select
End Sub
Function LOngletChrono() As Excel.Worksheet
Dim Répertoire As String
Dim Fichier As String
Dim Trouvé As Boolean
Dim Chrono As Excel.Workbook
Dim LeDossier As Excel.Workbook
On Error Resume Next
Trouvé = False
Set Chrono = Nothing
For Each LeDossier In Gbl_Excel.Application.Workbooks
If ChainePurgée(LeDossier.Name, ".xls") = LeChrono Then 'LeChrono ne
contient pas l'extension
Set Chrono = LeDossier
Exit For
End If
Next LeDossier
If Chrono Is Nothing Then
Répertoire = ChaineComplétée(LeRépertoire, "\")
Fichier = ChaineComplétée(LeChrono, ".xls")
Set Chrono = Gbl_Excel.Application.Workbooks.Open _
(FileName:=Répertoire + Fichier, _
ReadOnly:=False)
If Err.Number <> 0 Then
MsgBox Prompt:=LeChrono + " est déjà utilisé ou est introuvable
dans le répertoire " + vbCr + vbLf + _
LeRépertoire
Exit Function
Else
Chrono.Windows(1).Visible = True
End If
End If
For Each LOngletChrono In Chrono.Worksheets
If Left(LOngletChrono.Name, Len(NomGénériqueChrono)) =
NomGénériqueChrono Then
Trouvé = True
Exit For
End If
Next LOngletChrono
If Not Trouvé Then
MsgBox Prompt:=LeChrono + " ne contient pas l'onglet " + vbCr + vbLf
+ _
NomGénériqueChrono + vbCr + vbLf + _
"sensé contenir la liste des documents référencés"
Err.Raise Number:=vbObjectError + 1
End If
End Function
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
parci
On Tue, 27 Sep 2005 03:19:02 -0700, arbiel wrote:
Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le fichier recherché : le fichier semble bien chargé, malgré la demande d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a pour l'instant qu'un onglet dans le fichier), mais la partie feuille de l'écran reste blanche.
Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit d'accès ?
Je ne suis pas certain de bien comprendre. Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile Open sFileName For Binary Access Read Write Lock Read Write As F1 Close F1
FichierAccessible = True Exit Function
Err_FichierAccessible:
Close F1
End Function
On Tue, 27 Sep 2005 03:19:02 -0700, arbiel
<arbiel@discussions.microsoft.com> wrote:
Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet
d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le
fichier recherché : le fichier semble bien chargé, malgré la demande
d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a
pour l'instant qu'un onglet dans le fichier), mais la partie feuille de
l'écran reste blanche.
Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit
d'accès ?
Je ne suis pas certain de bien comprendre.
Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne
une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors
le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile
Open sFileName For Binary Access Read Write Lock Read Write As F1
Close F1
Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le fichier recherché : le fichier semble bien chargé, malgré la demande d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a pour l'instant qu'un onglet dans le fichier), mais la partie feuille de l'écran reste blanche.
Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit d'accès ?
Je ne suis pas certain de bien comprendre. Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile Open sFileName For Binary Access Read Write Lock Read Write As F1 Close F1
FichierAccessible = True Exit Function
Err_FichierAccessible:
Close F1
End Function
arbiel
Merci beaucoup pour le conseil
En reprenant cette votre suggestion, j'ai découvert la propriété "ReadOnly" qui est vrai si le fichier a été ouvert en lecture seulement. Ceci permet effectivement de le refermer, mais j'ai conservé l'ordre d'ouverture Workbooks.Open car il me semble plus facile d'exploiter un WorkBook qu'un fichier binaire.
Mais j'ai aussi détecté un problème avec la création de mesobjets. Je crois ne pas gérer correctement les événements qui leur sont liés.
Merci encore pour votre conseil
"parci" a écrit :
On Tue, 27 Sep 2005 03:19:02 -0700, arbiel wrote:
>Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet >d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le >fichier recherché : le fichier semble bien chargé, malgré la demande >d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a >pour l'instant qu'un onglet dans le fichier), mais la partie feuille de >l'écran reste blanche. > >Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit >d'accès ?
Je ne suis pas certain de bien comprendre. Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile Open sFileName For Binary Access Read Write Lock Read Write As F1 Close F1
FichierAccessible = True Exit Function
Err_FichierAccessible:
Close F1
End Function
Merci beaucoup pour le conseil
En reprenant cette votre suggestion, j'ai découvert la propriété "ReadOnly"
qui est vrai si le fichier a été ouvert en lecture seulement. Ceci permet
effectivement de le refermer, mais j'ai conservé l'ordre d'ouverture
Workbooks.Open car il me semble plus facile d'exploiter un WorkBook qu'un
fichier binaire.
Mais j'ai aussi détecté un problème avec la création de mesobjets. Je crois
ne pas gérer correctement les événements qui leur sont liés.
Merci encore pour votre conseil
"parci" a écrit :
On Tue, 27 Sep 2005 03:19:02 -0700, arbiel
<arbiel@discussions.microsoft.com> wrote:
>Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet
>d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le
>fichier recherché : le fichier semble bien chargé, malgré la demande
>d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a
>pour l'instant qu'un onglet dans le fichier), mais la partie feuille de
>l'écran reste blanche.
>
>Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit
>d'accès ?
Je ne suis pas certain de bien comprendre.
Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne
une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors
le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile
Open sFileName For Binary Access Read Write Lock Read Write As F1
Close F1
En reprenant cette votre suggestion, j'ai découvert la propriété "ReadOnly" qui est vrai si le fichier a été ouvert en lecture seulement. Ceci permet effectivement de le refermer, mais j'ai conservé l'ordre d'ouverture Workbooks.Open car il me semble plus facile d'exploiter un WorkBook qu'un fichier binaire.
Mais j'ai aussi détecté un problème avec la création de mesobjets. Je crois ne pas gérer correctement les événements qui leur sont liés.
Merci encore pour votre conseil
"parci" a écrit :
On Tue, 27 Sep 2005 03:19:02 -0700, arbiel wrote:
>Pour faire bref, sous Word, avec VBA, j'ouvre et présente à l'écran l'onglet >d'un fichier Excel. Tout se passe bien, sauf en cas de conflit d'accès sur le >fichier recherché : le fichier semble bien chargé, malgré la demande >d'exclusivité en lecture-écriture, et l'onglet est l'onglet actif (il n'y a >pour l'instant qu'un onglet dans le fichier), mais la partie feuille de >l'écran reste blanche. > >Quelqu'un peut-il m'indiquer ce que je peux faire pour tester le conflit >d'accès ?
Je ne suis pas certain de bien comprendre. Tu pourrais essayer d'ouvrir le fichier en accès exclusif (retrourne une erreur si le fichier est déjà ouvert par Excel, tu pourrais alors le fermer depuis Excel avant de poursuivre).
Public Function FichierAccessible(sFileName As String) As Boolean
Dim F1 As Integer
On Error GoTo Err_FichierAccessible
F1 = FreeFile Open sFileName For Binary Access Read Write Lock Read Write As F1 Close F1