1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| Function CheckFileOpen(Chm As String, Optional Classeur As String, Optional T As String = "00:00:30", Optional Cpt As Byte)
Dim Sep$, i As Byte
'----------------------------------------------------------------------------------------------------------------------
'====================== Créé par : RyuAuodidacte 20/09/2017 - Fonction CheckFileOpen pour Mac/PC ======================
' Fonction permettant de vérifier la disponibilité d'un fichier en local ou réseau pou y effectuer une procédure
'-------------------------------------------------------------------------------------------------------------
' PS : une partie des MsgBox sont là à titre d'indication pour test de la fonction, j'ai essayé de prendre en compte un max de cas possible
' Bien sur c'est à adapter
et se centrer seulement sur le cas voulu si besoin
'-------------------------------------------------------------------------------------------------------------
' PARAMETRES
' Chm = Chemin complet du fichier ou Chemin du dossier où se trouve le fichier
' Classeur = Variable représentant le nom du classeur (Extension du ficher compris)
' T = Temps d'attente souhaité pour une nouvelle tentative d'ouverture de fichier jusqu'à temps que celui-ci soit disponible
' Cpt = Compteur : nombre Maxi de tentatives d'ouvertures du fichier lorsque celui-ci est en cours d'utilisation par un autre User
'----------------------------------------------------------------------------------------------------------------------
'======== Reconnaissance du séparateur selon la plateforme (Mac/PC) ========
Sep = Application.PathSeparator
'======== Vérification et séparation en 2 variables du Chemin et du Classeur ========
If InStrRev(Chm, ".") > 0 Then
Classeur = Mid(Chm, InStrRev(Chm, Sep) + 1): Chm = Mid(Chm, 1, InStrRev(Chm, Sep))
Else
If Right(Chm, 1) > Sep Then Chm = Chm & Sep
End If
'======== Vérification que le paramètre Classeur ne soit pas manquant, si il l'est on quitte la fonction ========
If Classeur = "" Then MsgBox "Mettre la variable ""Classeur"" en paramètre." & vbCrLf & "Celle-ci est manquante !": CheckFileOpen = False: Exit Function
'======== Vérification si le Classeur est disponible afin d'éffectuer par la suite une procédure | Si paramètre manquant ou chemin faux, indication que la procédure va s'arrêter ========
Application.DisplayAlerts = False
On Error Resume Next
If Workbooks(Classeur).Names Is Nothing Then
Workbooks.Open Chm & Classeur, Notify:=False
If Workbooks(Classeur).ReadOnly Then
MsgBox "Le classeur """ & Classeur & """ est utilisé par " & vbCrLf & "un autre User ou sur une autre instance"
Do
Workbooks(Classeur).Close False:
If Cpt > 0 Then i = i + 1: If Cpt = i - 1 Then CheckFileOpen = 1: Exit Function
Application.Wait Now + TimeValue(T): Workbooks.Open Chm & Classeur, Notify:=False
If Workbooks(Classeur).ReadOnly Then MsgBox "Le classeur """ & Classeur & """ n'est pas encore disponible" Else MsgBox "Le classeur """ & Classeur & """ est disponible": CheckFileOpen = True: Exit Do
Loop While Workbooks(Classeur).ReadOnly
Else
MsgBox "Ouverture du classeur : " & Classeur: CheckFileOpen = True
End If
Else
MsgBox "Le classeur """ & Classeur & """ est déjà en cours d'utilisation sur cette instance": CheckFileOpen = True
End If
On Error GoTo 0
Application.DisplayAlerts = True
End Function |
Partager