Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conflit d'accès à un fichier Excel sous VBA à partir de Word

2 réponses
Avatar
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

2 réponses

Avatar
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
Avatar
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