Rapport de message :*
 

Re: Comment tester si un fichier excel est déjà ouvert dans une macro

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...