XL 2010 Verifie Fichier Ouvert GetOpenFilename

cathodique

XLDnaute Barbatruc
Bonjour:),

Je suis coincé, je fais appel à votre aide.
Je voudrai vérifié à l'ouverture d'un fichier que celui-ci n'est pas déjà ouvert.
Voir animation pour le message d'erreur.

VB:
Function FichOuvert(F As String) As Boolean
'myDearFriend!  -  www.mdf-xlpages.com
   On Error Resume Next
   FichOuvert = Not Workbooks(F) Is Nothing
End Function
Sub Ouvrir()
   nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xls*), *.xls*")
   Workbooks.Open Filename:=nom_fichier
Fichier = Dir(nom_fichier)
If FichOuvert(Fichier) Then
         MsgBox "Le fichier " & Fichier & " est ouvert."
      Else
         MsgBox "Le fichier " & Fichier & " n'est pas ouvert."
      End If
   If nom_fichier <> False Then
   End If
End Sub
bug.gif

Avec mes remerciements.
 
Solution
Re, salut patricktoulon,

Dans la fonction de patricktoulon pourquoi écrire Function estOuvert(fichier As String) ???

Puisque GetOpenFileName peut aussi renvoyer un boolean il faut une variable Variant.

Idem avec la fonction de myDearFriend.

A+

job75

XLDnaute Barbatruc
Bonjour cathodique,

Le test pour savoir si le fichier est ouvert doit être fait avant l'ouverture du fichier par Workbooks.Open.

Perso je ne fais pas de test, je préfère fermer le fichier s'il est ouvert :
VB:
Sub Ouvrir()
Dim nom_fichier
nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xls*), *.xls*")
If nom_fichier = False Or nom_fichier = ThisWorkbook.FullName Then Exit Sub
On Error Resume Next
Workbooks(Dir(nom_fichier)).Close False 'ferme le fichier s"il est ouvert
On Error GoTo 0
Workbooks.Open Filename:=nom_fichier 'ouverture
'---
End Sub
A+
 

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
pour tester si un fichier est ouvert en essayant de l'ouvrir en mémoire avec open for input lock read
VB:
Sub test2()
    MsgBox estOuvert("C:\Users\polux\DeskTop\translate interface.xlsm")
End Sub

Function estOuvert(fichier As String)
    Dim x As Integer, E As Integer
    estOuvert = False
    On Error Resume Next
    x = FreeFile: Open fichier For Input Lock Read As #x: Close x
    E = Err
    On Error GoTo 0
    Select Case E
    Case 0: estOuvert = False
    Case 70: estOuvert = True
    Case Else: estOuvert = E
    End Select
End Function
 

cathodique

XLDnaute Barbatruc
Bonjour cathodique,

Le test pour savoir si le fichier est ouvert doit être fait avant l'ouverture du fichier par Workbooks.Open.

Perso je ne fais pas de test, je préfère fermer le fichier s'il est ouvert :
VB:
Sub Ouvrir()
Dim nom_fichier
nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xls*), *.xls*")
If nom_fichier = False Or nom_fichier = ThisWorkbook.FullName Then Exit Sub
On Error Resume Next
Workbooks(Dir(nom_fichier)).Close False 'ferme le fichier s"il est ouvert
On Error GoTo 0
Workbooks.Open Filename:=nom_fichier 'ouverture
'---
End Sub
A+
Bonjour Job75,

En fait à partir de mon fichier, je voudrais ouvrir un fichier en le choisissant. Comme très souvent j'utilise plusieurs fichiers (2 ou 3). Je voulais savoir si le fichier en question n'était pas déjà ouvert pour éviter le message indiquant qu'il est déjà ouvert.

Je te remercie beaucoup.

Bonne journée.
 

cathodique

XLDnaute Barbatruc
Bonjour a tous
pour tester si un fichier est ouvert en essayant de l'ouvrir en mémoire avec open for input lock read
VB:
Sub test2()
    MsgBox estOuvert("C:\Users\polux\DeskTop\translate interface.xlsm")
End Sub

Function estOuvert(fichier As String)
    Dim x As Integer, E As Integer
    estOuvert = False
    On Error Resume Next
    x = FreeFile: Open fichier For Input Lock Read As #x: Close x
    E = Err
    On Error GoTo 0
    Select Case E
    Case 0: estOuvert = False
    Case 70: estOuvert = True
    Case Else: estOuvert = E
    End Select
End Function
Bonjour PatrickToulon :),

Ton code fonctionne lorsqu'on met le chemin complet est mis en "dur" .
Mais comme ci-dessous, ça ne fonctionne pas.
VB:
Sub test2()
nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xls*), *.xls*")
MsgBox estOuvert(nom_fichier)
End Sub
Là, est le problème. Je n'ai pas compris pourquoi?

Merci.
 

job75

XLDnaute Barbatruc
Re, salut patricktoulon,

Dans la fonction de patricktoulon pourquoi écrire Function estOuvert(fichier As String) ???

Puisque GetOpenFileName peut aussi renvoyer un boolean il faut une variable Variant.

Idem avec la fonction de myDearFriend.

A+
 

patricktoulon

XLDnaute Barbatruc
et si ton fichier est sensé être ouvert dans la même instance j'ai beaucoup plus simple
tout simplement en testant le retour de l'evaluation d'un range
VB:
MsgBox not iserror(Evaluate("='[Classeur2.xlsx]Feuil1'!A1:A2"))'formule de base exemple
si c'est faux il n'est pas ouvert
 

Discussions similaires

Réponses
1
Affichages
292
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 182
Messages
2 086 002
Membres
103 084
dernier inscrit
Hervé30120