Vérifier si fichier excel ouvert

Résolu/Fermé
Nico - 12 sept. 2011 à 10:46
 Nico - 14 sept. 2011 à 14:29
Bonjour,

j'utilise un userform comme moteur de recherche.
une fois la recherche lancée j'ai ce code qui m'ouvre une base de données excel en lecture seule pour éviter les mauvaises manip
voici le code
monfichier = "C:\mesdocuments\dossier\fichier\basededonnees.xlsm"
Application.Workbooks.Open Filename:=monfichier, ReadOnly:=True

jusque là aucun soucis
par contre si j'effectue uen seconde recherche, la macro me ferme la base de données pour me la rouvrir immédiatement.
Serait il possible que la macro vérifie si le fichier est déjà ouvert en lecture seule et dans ce cas elle passe à la suite, sinon elle l'ouvre comme actuellement.

Si vous pouviez me dire le code à utiliser.
Merci de votre aide
A voir également:

3 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
12 sept. 2011 à 11:05
Bonjour,

Tu peux générer et gérer l'erreur :
fich = "D:\tmp\test.xls"
On Error Resume Next
If IsError(s = Workbooks("test.xls").Name) Then
    On Error GoTo 0
    Application.Workbooks.Open Filename:=fich, ReadOnly:=True
End If
On Error GoTo 0

eric
0
bonjour et merci de ton aide
j'avais tenté de contourner ça avec la gestion d'erreur mais je n'ai aucune erreur, je pense que ça doit venir du fait que je lui impose la lecture seule. au début je n'imposais pas la lecture seule et effectivement j'avais une erreur qui se déclenchait si la base était ouverte, là ce n'est plus le cas :-(
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
Modifié par eriiic le 12/09/2011 à 11:47
Re,

Et en résumé ça marche pour toi ? si oui met en résolu
J'ai testé avant de poster, pour moi c'est ok...
Je déclenche l'erreur si non ouvert avec workbooks("xxx").name, pas en tentant de l'ouvrir

eric
0
non ce n'est pas bon, quand je mets cette gestion d'erreur la première recherche est ok mais ensuite les suivantes sont impossibles. ça me bascule sur ma condition IF que si la feuille n'existe pas alors j'ai un message qui me l'indique. et même en faisant des recherches sur des feuilles existantes j'ai ce message
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 sept. 2011 à 12:06
Bonjour tous les 2

En fait la difficulté vient du fait qu'il y a 2 instances d'excel

trouvé sur un autre forum
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
12 sept. 2011 à 12:16
Salut michel,

Chez moi il me l'ouvrait dans la même session, mais pourquoi pas...
Je dois m'absenter qcq jours encore, mes apparitions ici seront un peu plus rares.
A+ :+)
eric
0
je ne vais pas pouvoir vous répondre si ça fonctionne de suite car on m'a donné d'autre priorité
je vous tiens au courant, je le ferai les essais au calme pour éviter les bêtises
0
bon j'ai découvert un truc qui a faussé mon premier essai.
initialement je faisais une boucle sur chaque feuille de ma base de données en regardant si le contenu de la cellule A1 correspondait à la feuille que je cherchais.
sauf que j'avais changé avant ce post en introduisant uen fonction qui me permet de faire cette recherche de feuille directement sur le nom de la feuille. Mais avec cette fonction faut impérativement que les majuscules soient respectées sinon message indiquant que la feuille n'existe pas.

voilà pourquoi ta proposition me mettait systématiquement ce message mais ça n'avait rien à voir avec ta solution.
donc je vais revenir au statut initial et je testerai vos 2 propositions en vous donnant le résultat
0
Bonjour,
de retour après essai et ça fonctionne avec ta proposition eriiic.
j'ai simplement rajouté
Workbooks("monfichier.xlsm").Activate après
On Error GoTo 0
concrètement je gagne 36 secondes à chaque nouvelle recherche vu que j'ai chronométré le temps d'accès entre la lancement de la recherche et la possibilité d'utiliser ma base de données. ça prend 36 secondes
par curiosit&é j'ai testé la différence entre la recherche direct sur le nom de la feuille (36s) et avec l'ancienne méthode en lisant le contenu de chaque cellule A1 et ça prend 51s ... gain de temps indéniable

Merci à vous pour votre aide
0