vérifier si un fichier est déja ouvert
Dernière réponse : dans Programmation
Bonjour,
Je voudrais savoir comment vérifier qu'un fichier est ouvert.
En effet, j'aimerais lancer une macro d'export vers un fichier précis(D:\toto.xls) mais si celui est déja ouvert ou utilisé ma macro d'export ne fonctionne pas et mon logiciel plante
Le bur de savoir si ce fichier est ouvert est de pouvoir le fermer l'application Excel qui lui correspond (car fichier masqué) si l'utilisateur ouvre un autre fichier excel bah il aura un fenpere vide.
Merci de votre aide
Je voudrais savoir comment vérifier qu'un fichier est ouvert.
En effet, j'aimerais lancer une macro d'export vers un fichier précis(D:\toto.xls) mais si celui est déja ouvert ou utilisé ma macro d'export ne fonctionne pas et mon logiciel plante
Le bur de savoir si ce fichier est ouvert est de pouvoir le fermer l'application Excel qui lui correspond (car fichier masqué) si l'utilisateur ouvre un autre fichier excel bah il aura un fenpere vide.
Merci de votre aide
Autres pages sur : verifier fichier ouvert
Lassé par la pub ? Créez un compte
Bonsoir
Function VerifOuvertureClasseur(Fichier As String) As Boolean
Dim n As Integer
On Error Resume Next
n = FreeFile()
Open Fichier For Input Lock Read As #n
Close n
If Err.Number = 0 Then VerifOuvertureClasseur = False
If Err.Number = 70 Then VerifOuvertureClasseur = True
On Error GoTo 0
End Function
Dim n As Integer
On Error Resume Next
n = FreeFile()
Open Fichier For Input Lock Read As #n
Close n
If Err.Number = 0 Then VerifOuvertureClasseur = False
If Err.Number = 70 Then VerifOuvertureClasseur = True
On Error GoTo 0
End Function
Mais quelle horreur !!!!!!!!!! Kiki, ton code fonctionne, et tu réponds exactement à la question de darksoilt. C'est ça le pire.
Mais bon sang, apprenez à coder proprement. Quand on ouvre une session, un fichier, on en garde un descripteur pour pouvoir le fermer proprement.
Pour vérifier si Excel tient un fichier, on parcourt toutes les sessions pour trouver laquelle.
En plus, GetObject() le fait pour nous.
Mais bon sang, apprenez à coder proprement. Quand on ouvre une session, un fichier, on en garde un descripteur pour pouvoir le fermer proprement.
Pour vérifier si Excel tient un fichier, on parcourt toutes les sessions pour trouver laquelle.
En plus, GetObject() le fait pour nous.
Tant pis pour toi, tant pis pour nous.
Bye. Bye.
Je le répète, un mutawa aurait non seulement supprimé ton message mais en plus, il t'aurait banni. Il ne me semble pas que j'ai fait l'un ou l'autre.
___________________________
Taper au petit bonheur la chance en espérant provoquer une erreur ou pas est une façon de programmer particulièrement crade.
Par ailleurs, VB possède de grosses lacunes. De nombreux cas doivent donc être traités par des astuces plus ou moins sales. La FAQ de développez.com propose de telles astuces et il n'est pas malsain de s'en inspirer, ni même de les exploiter telle quelles.
En revanche, quand une solution propre et efficace existe, c'est elle qu'il faut implémenter.
Coder propre, c'est un ensemble de principes qui permettent d'obtenir des applications efficientes, facile à maintenir, facile à débugger. Les virus et autres malwares ne prolifèrent que parce que les programmes sont vite faits, mal faits, sans aucune précaution, ni réflexion. Au niveau d'une petite macro en VBA, cela peut sembler anodin, c'est un tel état d'esprit que je ne peux m'empêcher de le signaler.
En m'insurgeant ainsi, je ne m'attaquais pas à Kiki en particulier, mais à la tendance générale. Si certains se sentent visés, qu'ils y réfléchissent plutôt que de fuir.
Bye. Bye.
Je le répète, un mutawa aurait non seulement supprimé ton message mais en plus, il t'aurait banni. Il ne me semble pas que j'ai fait l'un ou l'autre.
___________________________
Taper au petit bonheur la chance en espérant provoquer une erreur ou pas est une façon de programmer particulièrement crade.
Par ailleurs, VB possède de grosses lacunes. De nombreux cas doivent donc être traités par des astuces plus ou moins sales. La FAQ de développez.com propose de telles astuces et il n'est pas malsain de s'en inspirer, ni même de les exploiter telle quelles.
En revanche, quand une solution propre et efficace existe, c'est elle qu'il faut implémenter.
Coder propre, c'est un ensemble de principes qui permettent d'obtenir des applications efficientes, facile à maintenir, facile à débugger. Les virus et autres malwares ne prolifèrent que parce que les programmes sont vite faits, mal faits, sans aucune précaution, ni réflexion. Au niveau d'une petite macro en VBA, cela peut sembler anodin, c'est un tel état d'esprit que je ne peux m'empêcher de le signaler.
Citation :
Mais bon sang, apprenez à coder proprementEn m'insurgeant ainsi, je ne m'attaquais pas à Kiki en particulier, mais à la tendance générale. Si certains se sentent visés, qu'ils y réfléchissent plutôt que de fuir.
Dommage que kiki le prenne comme ca
Sinon j'ai essayé son code cela fonctionne
le probleme c'est que mon classeur se ferme et pas mon appli
comment mettre le getobcject en lien avec appli
appli est déclaré comme suivant
Sinon j'ai essayé son code cela fonctionne
If ouvert Then ' Workbooks("C:\Temp\e_analyse_croisée.xls").Close SaveChanges:=False Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls") utilise.Close End If
le probleme c'est que mon classeur se ferme et pas mon appli
comment mettre le getobcject en lien avec appli
appli est déclaré comme suivant
dim appli as Excel.application
Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls" )
Comment as-tu déclaré ton objet utilise ?
[ ] Pas de déclaration, je n'utilise pas l'Option Explicit
[ ] Dim utilise As Variant
[ ] Dim utilise As Workbook
(Si jamais tu me coches la première case, je boycotte tes questions
)Dans les autre cas, voici un exercice :
Dim utilise As Variant Stop Set utilise = GetObject("C:\Temp\e_analyse_croisée.xls" ) Stop
Ouvre dans une autre session Excel le fichier e_analyse_croisée.
Puis exécuter ce petit code. Le debugger devrait s'arrêter sur la ligne 2.
Ajoute utilise aux espions. (Affichage > Fenêtre Espions)
Tu devrais voir une variable vide de type Variant.
Appuie sur F5, la ligne 3 s'exécute, puis le débugger s'arrête de nouveau, ligne 4. Observe ta variable utilise dans la fenêtre Espions. Elle est de type Workbook. On aurait donc pu commencer par là !!
Clique sur le + et parcours les propriétés de ton objet. Comme tout objet de type Workbook, utilise pointe vers l'instance d'Excel qui l'a chargé. Donc pour fermer :
Dim xl_a_fermer As Excel.application Dim wk_a_fermer As Workbook Dim wb As Workbook Dim OnFerme As Boolean On Error Resume Next Set wk_a_fermer = GetObject("chemin/fichier.xls") If IsEmpty(wk_a_fermer) Then MsgBox "Pas trouvé. Faut faire quelque chose là !" On Error Goto 0 Set xl_a_fermer = wk_a_fermer.Application wk_a_fermer.Close ' // A priori OnFerme = True ' // Mais vérifier s'il ne reste pas un autre classeur ouvert dans cette instance d'Excel !!!! For Each wb In xl_a_fermer.Workbooks Debug.Print wb.Name ' // Il reste des trucs ouverts !!! ' // Vérifier de quoi il s'agit (PERSO.XLS par exemple) et décider si on peut fermer ou pas OnFerme = False Next If OnFerme Then xl_a_fermer.Quit
j'ai déclaré utilise comme suivant
Je veux bien etre des fois crade mais il y a des limites
Sinon je ne sais pas pkoi mais il ne rentre pas ds ta boucle each
en tout cas c'était la ligne
mais ta méthode each ne fonctionne pas ca ne veut pas rentrer ds la boucle j'essai de voir pkoi mais je ne voit pas
Dim utilise as Workbook
Je veux bien etre des fois crade mais il y a des limites
Sinon je ne sais pas pkoi mais il ne rentre pas ds ta boucle each
en tout cas c'était la ligne
set appli = utilise.application
mais ta méthode each ne fonctionne pas ca ne veut pas rentrer ds la boucle j'essai de voir pkoi mais je ne voit pas
Dim utilise as Variant Set utilise = GetObject("chemin/fichier.xls" )
Ce n'est pas forcément crade. Pour une fois.
Cela dépend du contexte.
Imagine que l'utilisateur choisisse un classeur nommé fichier.doc !
(Quel con cet utilisateur
)Donc le fichier pourra être ouvert et on pourra ensuite vérifier qu'il s'agit bien d'un classeur Excel.
-----------------------
Une instance d'Excel peut contenir plusieurs classeurs.
S'il ne rentre pas dans la boucle, c'est que tout va bien, il n'y a avait que le classeur à fermer dans cette instance d'Excel.
En regardant mieux le code proposé, j'aperçois un ptit bug. Il faut sortir la ligne 19 de la boucle et la mettre avant la ligne 14. Ben, oui, sinon la variable n'est pas initialisée
(Quel con ce zeb
) Lassé par la pub ? Créez un compte
......