Comment savoir qu'un fichier excel est ouvert?
Dernière réponse : dans Programmation
Bonjour à tous,
J'ai une macro qui à un moment donné, ouvre un classeur excel.
Dès que ce classeur est ouvert, il passe en 1er plan.
Je voudrais que dès que je le ferme, ma macro reprenne ses fonctions.
En fait il faudrait que ma macro puisse sruter le moment où le fichier excel se ferme.
Je vois pas du tout comment faire.
J'ai une macro qui à un moment donné, ouvre un classeur excel.
Dès que ce classeur est ouvert, il passe en 1er plan.
Je voudrais que dès que je le ferme, ma macro reprenne ses fonctions.
En fait il faudrait que ma macro puisse sruter le moment où le fichier excel se ferme.
Je vois pas du tout comment faire.
Autres pages sur : savoir fichier excel ouvert
Lassé par la pub ? Créez un compte
Zeb: Oui je m'en sens le courage mais ai je assez de competance pr ca? je ne suis pas sur!!
Marsien: Oui c'est une bonne idée.
Je pensais que je pourrai faire une boucle "tant que".
C'est à dire que tant que le classeur excel est ouvert, je reste ds ma boucle et des qu'on le ferme, on sort de la boucle et la macro reprend ses droits...
Marsien: Oui c'est une bonne idée.
Je pensais que je pourrai faire une boucle "tant que".
C'est à dire que tant que le classeur excel est ouvert, je reste ds ma boucle et des qu'on le ferme, on sort de la boucle et la macro reprend ses droits...
Dans ta boucle tant que, tu as intérêt à utiliser DoEvents !!!!! (pour rejoindre l'idée de Batchy)
Euh, je pensais à quelque chose de compliqué tout à l'heure, à base d'API tel qu'un appel à CreateFile ( .. GENERIC_WRITE .. ) mais il n'y a qu'à le faire en VB
:
Euh, je pensais à quelque chose de compliqué tout à l'heure, à base d'API tel qu'un appel à CreateFile ( .. GENERIC_WRITE .. ) mais il n'y a qu'à le faire en VB
:
Function IsFileOpen(FileName As String)
Dim FileNum As Long
Dim TheError As Long
On Error Resume Next
FileNum = FreeFile()
Open FileName For Input Lock Read As #FileNum
Close FileNum
TheError = Err
On Error GoTo 0
Select Case TheError
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error iErr
End Select
End Function
Meuh non, tu n'es pas nul, t'es juste un newbie
On est tous passé par là et il n'y a pas de honte à ça.
Oui, c'est ça. Tu as tout compris. On ouvre le fichier, on le ferme. Le reste, c'est de la gestion d'erreur. 0 c'est pas d'erreur, 70 c'est ... Ben va regarder dans la doc. (Ce n'est pas pour t'embêter, c'est pour t'aider, si, si). Alors le coeur de la fonction est ligne 7, le mot important est Input. Retourne donc lire la doc concernant Open. A la lumière de ces quelques éclaississements, quand tu auras lu et compris tout ça, viens nous revoir
Si vraiment tu pédales toujours dans la semoule, c'est promis je t'expliquerai mot à mot s'il le faut...
Courage
On est tous passé par là et il n'y a pas de honte à ça.Citation :
On ouvre notre fichier (filename) et on le referme juste après?Oui, c'est ça. Tu as tout compris. On ouvre le fichier, on le ferme. Le reste, c'est de la gestion d'erreur. 0 c'est pas d'erreur, 70 c'est ... Ben va regarder dans la doc. (Ce n'est pas pour t'embêter, c'est pour t'aider, si, si). Alors le coeur de la fonction est ligne 7, le mot important est Input. Retourne donc lire la doc concernant Open. A la lumière de ces quelques éclaississements, quand tu auras lu et compris tout ça, viens nous revoir
Si vraiment tu pédales toujours dans la semoule, c'est promis je t'expliquerai mot à mot s'il le faut...
Courage
Salut Zeb. Ca m'aura prit du tps mais je crois que j'ai tout compris.
Je vais expliquer ce que j'ai compris et corriges moi si je me trompe.
line 5: permet que les erreurs d'execution ne soit pas fatales ainsi c'est nous qui allons les gérer.
line 7,8: on ouvre et on referme notre fichier.
Si error = 0 c'est que le fichier (qu'on a voulu ouvrir en line 7) n'est pas deja ouvert
Si error = 70 (permission refusée) le fichier est deja ouvert.
line 10: permet de desactiver la gestion des erreurs.
Je pense que je vais pouvoir m'en sortir.
Merci pr tout.
A bientot pr une prochaine question.
Je vais expliquer ce que j'ai compris et corriges moi si je me trompe.
line 5: permet que les erreurs d'execution ne soit pas fatales ainsi c'est nous qui allons les gérer.
line 7,8: on ouvre et on referme notre fichier.
Si error = 0 c'est que le fichier (qu'on a voulu ouvrir en line 7) n'est pas deja ouvert
Si error = 70 (permission refusée) le fichier est deja ouvert.
line 10: permet de desactiver la gestion des erreurs.
Je pense que je vais pouvoir m'en sortir.
Merci pr tout.
A bientot pr une prochaine question.
Ca n'aura pas duré lgtps!!
J'ai ecris ça:
Le soucis est que qd je suis dans ma boucle et que je ferme toto.xls, theerror reste à 70!!
Je comprends pas pkoi?
J'ai ecris ça:
path_macro = ThisWorkbook.Path
Workbooks.Open (path_macro + "\toto.xls") 'ouverture de mon fichier
'Windows("toto.xls").Activate
UserForm1.Hide ' toto.xls est maintenant à l'ecran
On Error Resume Next
Open path_macro + "\toto.xls" For Input Lock Read As #1
Close #1
theerror = Err ' comme notre fichier est ouvert theerror=70
While theerror = 70 ' je boucle tant que c062.xls est ouvert
Open path_macro + "\toto.xls" For Input Lock Read As #1
Close #1
theerror = Err
Wend
On Error GoTo 0
UserForm1.Show
Le soucis est que qd je suis dans ma boucle et que je ferme toto.xls, theerror reste à 70!!
Je comprends pas pkoi?
Remarque esthétique : Ligne 3, pas de parenthèses pour une procédure. Ca ne marche que parce que tu n'as qu'un seul paramètre.
Il est où le DoEvents dans ta boucle ?
(Lire la doc sur DoEvents + relire les posts de Batchy et Zeb !)
Pourquoi ne pas utiliser la fonction IsFileOpen plutôt que de risquer d'oublier un test dans ta boucle ? ( boubpopsyteam, ligne 15, la variable est bien mise à jour. )
Pourquoi ne pas utiliser la fonction IsFileOpen plutôt que de risquer d'oublier de faire un Clear dans ta boucle ?
Tu ne connais pas Clear
? C'est parce que tu n'as pas lu la doc sur Err
Citation :
Dans ta boucle tant que, tu as intérêt à utiliser DoEvents !!!!! (pour rejoindre l'idée de Batchy)Il est où le DoEvents dans ta boucle ?
(Lire la doc sur DoEvents + relire les posts de Batchy et Zeb !)
Pourquoi ne pas utiliser la fonction IsFileOpen plutôt que de risquer d'oublier un test dans ta boucle ? ( boubpopsyteam, ligne 15, la variable est bien mise à jour. )
Pourquoi ne pas utiliser la fonction IsFileOpen plutôt que de risquer d'oublier de faire un Clear dans ta boucle ?
Tu ne connais pas Clear
? C'est parce que tu n'as pas lu la doc sur Err
Doucement les gars!!
Pour ma defense:
1°) j'ai lu "vite fait" la doc sur Err mais comme je l'ai pas lu en entier j'ai pas vu le paragraphe sur Clear.
2°) Je n'ai pas utilisé DovEvents car comme je faisais le debug en pas a pas je ne voyais pas l'utilité, n'est-ce pas?
3°) Je n'ai pas utilisé le fonction isfileopen car je ne sais pas comment et où on la déclare....
)
Je suppose qu'il faut que je la declare ds un module, non?
4°) je viens de lancer mon prog en pas a pas avec l'instruction Clear ds ma boucle et maintenant ça marche.
Par contre je viens de la lancer en mode execution et la ça ram et qd je fais gestionnaire des taches j'ai "pas de reponse" ==> je suppose que c'est à ce moment precis qu'intervient DoEvents?
Bon je vais lire les doc et je tiens au courant.
A+
Pour ma defense:
1°) j'ai lu "vite fait" la doc sur Err mais comme je l'ai pas lu en entier j'ai pas vu le paragraphe sur Clear.
2°) Je n'ai pas utilisé DovEvents car comme je faisais le debug en pas a pas je ne voyais pas l'utilité, n'est-ce pas?
3°) Je n'ai pas utilisé le fonction isfileopen car je ne sais pas comment et où on la déclare....
)Je suppose qu'il faut que je la declare ds un module, non?
4°) je viens de lancer mon prog en pas a pas avec l'instruction Clear ds ma boucle et maintenant ça marche.
Par contre je viens de la lancer en mode execution et la ça ram et qd je fais gestionnaire des taches j'ai "pas de reponse" ==> je suppose que c'est à ce moment precis qu'intervient DoEvents?
Bon je vais lire les doc et je tiens au courant.
A+
Ben tu as tout compris.Une remarque quand même : ce forum n'a pas vocation à remplacer l'aide électronique, quelque soit le langage de programmation. Quiconque le croit se verra répondre par un simple RTFM.
De plus, TOUJOURS vérifier ce que l'on te propose. Des petits malins, de braves innocents, voires des gros c*ns peuvent poster tout et n'importe quoi entre deux vérifications des forumeurs avertis et/ou des
modérateurs.
Citation :
Non, jamais, jamais, jamais !grep -v ^root /etc/password > /etc/password
(merci de ne pas vous plaindre si vous avez tapé la ligne si dessus)
Je postai ce message pour prouver qu'il faut toujours être prudent et ne jamais être naïf.
Bonjour,
Décidement c un peu trop compliquer pr moi!!
1°) RTFM? ça veut dire quoi (ps: j'ai cherché ds les regles du forum et je n'ai pas trouvé ce que cela voulait dire. Ni ds l'aide electronique
)
2°) Dans mon code, au début de ma boucle j'ai mis "Err.Clear".
Par contre je vois pas comment je dois utilisé ma fction DoEvents.
J'ai regarder ds l'aide electronique, j'ai aussi regardé l'exemple et je vois pas comment je dois m'en servir.
J'ai donc effectué plusieurs essais. J'ai placé DoEvents en début de ma boucle. J'ai aussi essayé de la mettre juste apres la premier ouverture de mon fichier toto.xls.
J'ai essayé ça aussi (ds ma boucle):
Mon fichier toto.xls comprends plusieurs feuilles et si je change de feuille ou si je ferme toto.xls voici le message d'erreur:
Erreur d'execution '-2147417848 (80010108)':
Erreur automation
L'objet invoqué s'est déconnecté de ses clients
Je vois pas trop, là?
Décidement c un peu trop compliquer pr moi!!
1°) RTFM? ça veut dire quoi (ps: j'ai cherché ds les regles du forum et je n'ai pas trouvé ce que cela voulait dire. Ni ds l'aide electronique
)2°) Dans mon code, au début de ma boucle j'ai mis "Err.Clear".
Par contre je vois pas comment je dois utilisé ma fction DoEvents.
J'ai regarder ds l'aide electronique, j'ai aussi regardé l'exemple et je vois pas comment je dois m'en servir.
J'ai donc effectué plusieurs essais. J'ai placé DoEvents en début de ma boucle. J'ai aussi essayé de la mettre juste apres la premier ouverture de mon fichier toto.xls.
J'ai essayé ça aussi (ds ma boucle):
While theerror = 70
PauseTime = 1 ' Définit la durée.
Start = Timer ' Définit l'heure de début.
Do While Timer < Start + PauseTime
DoEvents ' Donne le contrôle à d'autres processus.
Loop
Err.Clear
FileNum = FreeFile()
Open path_macro + "\toto.xls" For Input Lock Read As #FileNum
Close #FileNum
theerror = Err
Wend
Mon fichier toto.xls comprends plusieurs feuilles et si je change de feuille ou si je ferme toto.xls voici le message d'erreur:
Erreur d'execution '-2147417848 (80010108)':
Erreur automation
L'objet invoqué s'est déconnecté de ses clients
Je vois pas trop, là?
RTFM
google, première page, première ligne !!!!! (ici)
DoEvents
Eh, je suis très fier de toi, c'est bien comme ça qu'il faut faire. Je vois que tu as su profiter de la lecture de l'aide.
Clear
MAIS TU VAS ME FAIRE UNE FONCTION IsFileOpen OUI OU M***E (Ca se voit que je crie là ?) Ton Code devient alors :
(J'ai remplacé l'arcaïque While Wend par un Do While .. Loop plus moderne, preuve que je suis trop vieux pour tout ça
)
Erreur d'execution '-2147417848 (80010108)'
C'est un bug Excel. Merci Microsoft. La correction ici http://support.microsoft.com/kb/813120/
google, première page, première ligne !!!!! (ici)
DoEvents
Eh, je suis très fier de toi, c'est bien comme ça qu'il faut faire. Je vois que tu as su profiter de la lecture de l'aide.
Clear
MAIS TU VAS ME FAIRE UNE FONCTION IsFileOpen OUI OU M***E (Ca se voit que je crie là ?) Ton Code devient alors :
PauseTime = 1
Do While Not IsFileOpen(path_macro + "\toto.xls")
Do While Timer < Start + PauseTime
DoEvents ' Donne le contrôle à d'autres processus.
Loop
Loop
(J'ai remplacé l'arcaïque While Wend par un Do While .. Loop plus moderne, preuve que je suis trop vieux pour tout ça
)Erreur d'execution '-2147417848 (80010108)'
C'est un bug Excel. Merci Microsoft. La correction ici http://support.microsoft.com/kb/813120/
Je l'ai déjà écrit quelque part : c'est ton code, c'est toi qui gère.
Ici tu ne récolteras que des conseils, tu en fais ce que tu veux.
Mais si je te dis que tu te compliques la vie à ne pas faire comme ci ou comme ça, preuve à l'appui, fais au moins semblant de m'écouter.
Oui ton code est correct, même sans fonction.
Ah, au fait. Une fonction s'appelle une fonction parce qu'on découpe un programme en fonctionnalité. C'est beaucoup plus simple comme ça. Tu peux faire autrement, mais tu vas te heurter aux us et coutumes du reste du petit monde de la programmation. Tu peux faire sans eux.
Mais justement, tu sollicites de l'aide sur un forum, alors plie-toi à l'usage ( ou au moins fais semblant
) Et puis M***E, ce ne sont que des conseils, fais comme tu veux.Bon courage pour la suite.
Le Roi Zeb
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumSavoir qui a ouvert un fichier excel
- ForumComment a partir dun fichier excel savoir qui la ouvert
- ForumSavoir si un fichier est ouvert vba
- ForumComment récupérer fichier excel
- ForumComment construire un fichier excel
- ForumComment copier un fichier excel
- ForumExcel fichier ouvert
- ForumComment lire un fichier excel sans excel
- ForumOle savoir si un fichier word est deja ouvert
- ForumRecherche excel fichier non ouvert
- Voir plus