Test si un fichier est déjà ouvert

Bonsoir a tout le forum

je suis sur une problématique de tester si un fichier n'est pas déjà ouvert....

le gros problème c'est que je ne connais pas le nom du fichier si son emplacement avant.

c'est la raison pour laquelle j'utilise l'instruction suivante pour demander a l'utilisateur ou se trouve le fichier.

nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx; *.xls), *.xlsx;*.xls", , "")

et je n'arrive pas a faire un code qui me permette de faire apparaitre un message a l'utilisateur que le fichier est déjà ouvert et qu'il doit le fermer pour poursuivre....

le problème c'est que le message apparait meme quand le fichier n'est pas encore ouvert......

voici le code que j'ai fait :

Sub test()
Dim nom_fichier As String
Dim resultat_test As Boolean

nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx; *.xls), *.xlsx;*.xls", , "")

resultat = ouvrir((nomfichier))
End Sub
Function ouvrir(fichier As String) As Boolean

On Error GoTo erreur
Application.DisplayAlerts = False
Workbooks.OpenText Filename:=(fichier), DataType:=xlDelimited, Tab:=True
ouvrir = True

erreur:
MsgBox "Le fichier est déjà ouvert. Veuillez le fermer et recommencer"
ouvrir = False
End Function

ci joint un fichier test avec le code que j'ai fait et un fichier test d'ouverture vierge. Je tiens a préciser que ce fichier tests n'est pas forcement dans le meme dossier que le fichier contenant le code VBA.

Merci pour votre aide

Fred

42test-forum.xlsm (35.50 Ko)

Bonsoir

Un p'tit conseil : Option Explicit au début d'un module évitera de mélanger les variables

Sub test()
Dim nom_fichier As String
Dim resultat_test As Boolean

nom_fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx; *.xls), *.xlsx;*.xls", , "")

resultat = ouvrir(([surligner=#FF00BF]nomfichier))
End Sub

A tester

Bonjour banzai et le forum

il est vrai qu'en temps normal j'utilise l'instruction Option Explicit

mais hier soir quand j'ai préparer ce fichier test j'avais un mal de crane et j'ai pas fait attention.

pour revenir au problème initial, c'est exactement cela que je voulais.

MERCI BANZAI

Je connaissais déjà l'instruction InStr qui va de gauche a droite, mais je ne connaissait pas l'instruction InStrRev qui va de droite a gauche cela permet d'isoler plus facilement le nom du fichier dans la chaîne de caractères passé en argument contenant le chemin d’accès au fichier et le nom du fichier

Banzai peux tu m'apporté une précision sur le code pour savoir si j'ai bien compris :

l'instruction

Mid(Fichier, InStrRev(Fichier, "\", -1) + 1)

permet de récupérer uniquement le nom du fichier dans le string fichier

et

  Set Wb = Workbooks(Mid(Fichier, InStrRev(Fichier, "\", -1) + 1))

permet de savoir si le fichier est déjà ouvert ?? car en regardant un petit espion sur wb :

il est égal a nothing quand le fichier n'est pas ouvert et est égal à "" quand il est ouvert c'est ça ??

deuxième précision car je commence a peine avec On error :

a quoi sert cette instruction ???

  On Error GoTo 0

c'est un saut à 0 ??? mais c'est quoi 0 ?? fin de fonction ??

je connaissait le On Error resume next, pas celui ci...

Edit : En fouillant sur le net j'ai trouver la réponse de on error goto 0

cela supprime la gestion des erreurs autorise par l'instruction On Error Resume Next

c'est un bon moyen pour tester si il y a une erreur que sur une ou des lignes de codes bien particulières car si j'ai bien compris si on laisse sans faire de desactivation le on error resume next reste valable pour tous le reste du code meme si il y a appel a d'autres sub/function.

tres pratique donc ....

merci pour tes précisions

Fred

Bonjour

Mid(Fichier, InStrRev(Fichier, "\", -1) + 1)

OUI permet de récupérer uniquement le nom du fichier dans le string fichier

 Set Wb = Workbooks(Mid(Fichier, InStrRev(Fichier, "\", -1) + 1))

Si le fichier est déjà ouvert retournera un pointeur (une poignée) permettant de manipuler cet objet (le classeur) afin d'avoir des renseignements sur celui-ci (nom, nombre de feuille etc ....)

Si le fichier n'existe pas retourne Nothing (je crois que ce n'est pas égal à 0) mais à vide

Pour le On Error Goto tu as trouvé

Merci Banzai pour tes précisions j’étais dans le vrai....

sujet fermé

Fred

Rechercher des sujets similaires à "test fichier deja ouvert"