VBA: vérifier si un Classeur est ouvert


Lors de l'automatisation d'Excel, il est souvent nécessaire de vérifier si un Classeur est ouvert (déjà). Cette information peut servir pour savoir si le fichier est disponible ou non pour être "manipulé". Il n'est par exemple pas possible de supprimer un fichier ouvert. Tout comme un Classeur déjà ouvert ne peut être ré-ouvert par un autre utilisateur qu'en "lecture seule".

Ceci est d'autant plus important si vous travaillez en réseau et que les fichiers sont partagés par plusieurs utilisateurs.

Voici donc une fonction qui vérifie si un fichier est ouvert ou non – ou plus précisément si le Classeur est disponible à l'utilisation ou non.  Un Classeur ouvert en "lecture seule" par un autre utilisateur reste disponible à l'utilisation et est donc considéré comme "fermé".

Cette fonction retourne une valeur "Vrai" ou "Faux" (= True ou False) selon si le fichier est déjà ouvert ("occupé") ou non.

La fonction utilise un argument: MonClasseur de type String qui contient le chemin complet du Classeur (par ex.: "C:\Test\MonClasseur.xlsx" ).

Voici donc le code VBA de la fonction prêt à l'emploi ainsi qu'un exemple pratique de son utilisation.

Code VBA de la fonction qui vérifie si un Classeur est (déjà) ouvert

Function EstClasseurOuvert(MonClasseur As String)
'par: http://excel-malin.com

Dim NumeroFichier As Long, NumeroErreur As Long

    On Error Resume Next
    NumeroFichier = FreeFile()
    Open MonClasseur For Input Lock Read As #NumeroFichier
    Close NumeroFichier
    NumeroErreur = Err
    On Error GoTo 0

    Select Case NumeroErreur
    Case 0:    EstClasseurOuvert = False
    Case 70:   EstClasseurOuvert = True
    Case Else: Error NumeroErreur
    End Select
End Function

Exemple de l'utilisation (Sub)

Et voici comment l'utiliser en pratique…

Sub ExempleTestOuvertureClasseur()
'par: http://excel-malin.com
    Dim Verification As Boolean
    Dim MonClasseur As String
    
    MonClasseur = "C:\Test\MonClasseur.xlsx"
    
    'd'abord le test si le fichier existe
    If Len(Dir(MonClasseur)) = 0 Then 's'il n'existe pas, montrer un avertissement et quitter la macro
        MsgBox "ERREUR: Le Classeur: [" & MonClasseur & "] n'existe pas..."
        Exit Sub
    Else
    End If
    
    'si le Classeur existe, vérifier s'il est déjà ouvert
    Verification = EstClasseurOuvert(MonClasseur)

    If Verification = True Then
        MsgBox "Le Classeur: [" & MonClasseur & "] est déjà ouvert..."
    Else
        MsgBox "Le Classeur: [" & MonClasseur & "] n'est pas ouvert..."
    End If
End Sub

Attention: cette fonction ne fonctionne que pour les Classeurs Excel (.xls, .xlsx, .xlsm etc.). Elle ne fonctionnera pas pour d'autres types de fichiers (vidéos, fichiers texte,…).

 

16 0



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.