Titre du sujet : Re: Comment tester si un fichier excel est déjà ouvert dans une macro par Guy le 12/02/2011 00:21:51
Bonjour Didier, le forum, basket,
Il est vrai que la bienséance aurait commandé une permutation des salutations mais je m’en voudrais de ne pas souligner l’à-propos de la remarque de Didier. Ceci dit, poursuivons.
Il y a bien évidemment trente-six façons de procéder. En voici une.
Dans un module de code copier le bout de code suivant :
Option Explicit
Dim objExcel As Excel.Application
'---------------------------------------------------------------------------------------
' Procédure : ClasseurEstOuvert
' Auteur : 2pme, Guy Courville
' Date : vendredi 11 février 2011
' Détails : Le jeu consiste à ouvrir le classeur dans une instance invisible d'Excel
' et à tester la propriété ReadOnly de ce classeur. C'est la valeur de cette
' propriété qui est retournée par la fonction.
'
' Note 1 : Le paramètre strNomFichierComplet doit porter le chemin complet du classeur
' comme son nom l'indique.
'
' Note 2 : Aucun gestionnaire d'erreur n'est actif.
'
'---------------------------------------------------------------------------------------
'
Function ClasseurEstOuvert(strNomFichierComplet As String) As Boolean
Set objExcel = New Excel.Application
With objExcel
' L'instance d'Excel qui porte le fichier ne doit pas être visible
.Visible = False
.Workbooks.Open (strNomFichierComplet)
' Si le classeur est déjà ouvert cette propriété sera à True
ClasseurEstOuvert = .Workbooks(1).ReadOnly
.Quit
End With
' Ne pas oublier de supprimer la référence à Excel
' sinon une autre instance fantôme hantera votre système...
Set objExcel = Nothing
End Function
Le temps d'exécution est assez important (un peu moins de deux secondes sur mon poste) puisqu'une nouvelle instance d'Excel est créée. Cette lenteur, toute relative, ne devrais pas gêner outre mesure je crois.
Cordialement,
Guy
Édition : Dans ce qui précède on suppose que le classeur n'est pas en mode lecture seule à dessein...
|