VBA test si fichier ouvert

Bonjour,

Dans mon entreprise, nous avons un fichier nommé COMPTABILITE .xls. Ce fichier est en réseau.

La macro suivante permet de savoir si un autre utilisateur l’a ouvert depuis son poste, mais elle ne fonctionne pas correctement.

En effet, si le fichier est ouvert sur mon poste, la macro fonctionne parfaitement. Mais si un autre utilisateur l’a ouvert sur son poste, la macro indique malgré tout que le fichier n’est pas ouvert.

Pourriez-vous me dire ce qui ne vas pas.

En vous remerciant de votre aide.

Sub Ctrl_Fichier_Ouvert()

Dim Wb As Workbook

  For Each Wb In Workbooks
    If Wb.Name = "COMPTABILITE.xls" Then '
     MsgBox "Le fichier " & Wb.Name & " est déjà ouvert !"
      Exit For
    End If
  Next Wb
  If Wb Is Nothing Then

    MsgBox "Le fichier n'est pas ouvert"
  End If
End Sub

Bonjour,

C'est normal, en fait dans ce code tu vérifie, pour chaque classeur (Wb) présent dans la collection "Workbooks" si il correspond au fichier à tester, sauf que la collection "Workbooks" correspond aux classeurs Excel ouverts dans ton instance d'Excel.

(Donc déjà si tu lances 2 instances d'Excel sur ton pc avec ton fichier Comptabilité dans une, et ton fichier avec ta macro dans l'autre, je ne suis pas certain que cela fonctionne).

Pour ma part, j'utilise le code suivant :

Function IsFileOpen(filename As String) As Boolean

Dim filenum As Integer, Errnum As Integer

On Error Resume Next

filenum = FreeFile()

Open filename For Input Lock Read As #filenum
Close filenum

Errnum = Err

On Error GoTo 0

Select Case Errnum
    Case 0
        IsFileOpen = False
    Case 70
        IsFileOpen = True
End Select

End Function

Que je n'ai qu'à simplement appelé en faisant :

IsFileOpen(chemin de mon fichier sur le serveur)

Qui me retourne vrai ou faux, valeur que je peux tester pour soit avertir l'utilisateur si le fichier est ouvert / fermé, soit faire mon traitement.

Cordialement.

Bonjour Zirak,

Hélàs, çà ne marche toujours pas

Bonjour,

Tu as bien fais un copier / coller de la fonction ci-dessus sans la modifier ?

Pourrais-tu poster le bout de code réalisé pour l'appeler ?

"Cela ne marche toujours pas", mais la macro t'indique quoi ? Quel est le message d'erreur (si il y en a un) ?

Cordialement,

Bonjour,

Bon, voilà une autre macro qui fonctionne parfaitement ! Si MonFichier.xls est ouvert par un autre utilisateur, on valide le message OK puis fin.

Par contre je voudrais incorporer cette macro dans une autre macro, mais je ne sais pas comment m'y prendre.

J'expose mon cas. Une macro (appelons M) permet de copier des données du fichier Base.xls vers MonFichier.xls.

Si MonFichier.xls est ouvert par un autre utilisateur, la macro M ne s'exécute pas et indique le messge "Attention, le fichier est ouvert par un autre utilisateur ! Réessayer, plus tard."

Si MonFichier.xls n'est pas ouvert, la macro M s'exécute. Mais comment faire ? Pouvez-vous m'aiguiller ?

Cordialement.

Option Explicit

Sub TestFileOpened()

    If IsFileOpen("\\chemin du fichier\ Monfichier.xls") Then

        MsgBox "Attention, le fichier est ouvert par un autre utilisateur ! Fin du traitement Réessayer, plus tard."

    Else        

    End If

End Sub

Function IsFileOpen(filename As String)
    Dim filenum As Integer, errnum As Integer

    On Error Resume Next
    filenum = FreeFile()

    Open filename For Input Lock Read As #filenum
    Close filenum
    errnum = Err
    On Error GoTo 0

    Select Case errnum

        Case 0
         IsFileOpen = False

        Case 70
            IsFileOpen = True

        Case Else
            Error errnum
    End Select

End Function
sophang a écrit :

Bonjour,

Bon, voilà une autre macro qui fonctionne parfaitement !

C'est exactement le code que je t'ai fourni et qui ne "marchait pas" dans ton message de ce matin...

J'expose mon cas. Une macro (appelons M) permet de copier des données du fichier Base.xls vers MonFichier.xls.

Si MonFichier.xls est ouvert par un autre utilisateur, la macro M ne s'exécute pas et indique le messge "Attention, le fichier est ouvert par un autre utilisateur ! Réessayer, plus tard."

Si MonFichier.xls n'est pas ouvert, la macro M s'exécute. Mais comment faire ? Pouvez-vous m'aiguiller ?

Bein tu appelles ta macro M dans ton "Else" de ton test d'ouverture :

Sub TestFileOpened()

    If IsFileOpen("\\chemin du fichier\ Monfichier.xls") Then

        MsgBox "Attention, le fichier est ouvert par un autre utilisateur ! Fin du traitement Réessayer, plus tard."

    Else        
           ' code de la macro M ou appel vers cette macro            
    End If

End Sub

Ok, c'est bon maintenant. C'est nickel !

Rechercher des sujets similaires à "vba test fichier ouvert"