Bonjour le Forum

(La résolution de cette discussion servira à répondre en partie à celle que j'avais ouverte "Classeur en lecture seule avec condition" en échange avec Mondev, pour laquelle je cherche une solution, mais le problème reste indépendant. Ai-je bien fait ?)

Sur ce même Forum, j'ai trouvé une fonction proposée par "Bouley" en Février 2006, et qui renvoie l'information quant à l'ouverture d'un classeur par moi-même, ou un autre de mes collègues de travail.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Function FichierEstOuvert(ByRef FichierTeste As Variant) As Boolean
    Dim FICHIER As Long
    On Error GoTo Erreur
    FICHIER = FreeFile
    Open FichierTeste For Input Lock Read As #FICHIER
    Close #FICHIER
    FichierEstOuvert = False
    Exit Function
Erreur:
    FichierEstOuvert = True
End Function
Voici mon code intégré dans un classeur "Annexe.xls":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_Open()
Dim NomCl As String
NomCl = "TATA.xls"
 
If FichierEstOuvert(NomCl) = True Then
    MsgBox "Ouvert !"
    Workbooks(NomCl).Close (False)
Else
     MsgBox "Non Ouvert !"
End If
End Sub
Immédiatement après l'ouverture d'une session Excel, j'ouvre ce classeur :

Msgbox ==> "Ouvert !"

Puis

Erreur d'exécution'9'
L'indice n'appartient pas à la sélection.
sur la lgne de code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Workbooks(NomCl).Close (False)
!!!!!????

Jusque là, cette fonction ne m'a posé aucun problème.

Je dois dire que dans une même session antérieure Excel, j'avais ouvert les 2 classeurs. D'autre part, il n'y a aucune liaison entre "TATA" et "Annexe".

Problème annexe :

Plus généralement, il arrive qu'un collègue utilise un classeur Excel puis le referme.
Si je cherche à l'ouvrir, j'ai un message "Ce classeur est déjà utilisé par ..."
Si le collègue reboote son classeur, alors je peux l'ouvrir sans problème ??!!

A quoi est dûe cette anomalie ?
Existe-t-il une instruction VBA pour lever ce genre de problème ?

Merci à tous.

Marcel