Bonjoursavez vous comment detecter si un fichier excel est ouvert. Je veux créer un programme disant si ExcelVba ouvert alors ... sinon ouvrir fichier ExcelVba.
Merci d'avance,
Cordialement, Thomas
Bonjoursavez vous comment detecter si un fichier excel est ouvert. Je veux créer un programme disant si ExcelVba ouvert alors ... sinon ouvrir fichier ExcelVba.
Merci d'avance,
Cordialement, Thomas
Bonjour,
Une solution possible avec cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Function VerificationFichierOuvert(ByVal NomFichier As String) As Boolean Dim WbEnCours As Workbook VerificationFichierOuvert = False If Workbooks.Count = 0 Then Exit Function Else For Each WbEnCours In Application.Workbooks If WbEnCours.Name = NomFichier Then VerificationFichierOuvert = True Next WbEnCours End If End FunctionNb : Ce bout de code peut paraître complètement c..., mais il sert dans des macros complémentaires .xlam depuis le menu excel et il n'y a pas toujours des fichiers ouverts.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Sub TestVerificationFichierOuvert() MsgBox VerificationFichierOuvert("A.xlsm") End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 If Workbooks.Count = 0 Then Exit Function ....
Bonjour
savoir :
- s'il est ouvert dans la même instance de Excel
ou
- s'il est ouvert par n'importe quelle instance de Excel
???
Bonjour,
J'avais fait ceci pour PC/MAC (à voir - un petit retour serait cool) :
https://www.developpez.net/forums/d1...uer-procedure/
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
salut merci bcp mais ton code est trop "lourd" et je n'ai pas les connaissances pour le réduire et l'optimiser a mes besoins. J'ai essayé d'intégrer ton code au mien et il met enormement de temps a se lancer maintenant serais-tu ce que j epeux retirer du tien pour pouvoir l'optimiser a mon problème stp(je cherche juste a savoir si il est ouvert sur mon ordi)
Merci déja énormement pour ton aide
Rien à voir.Juste ouvert sur le pc actuel donc je suppose que c'est sur la meme instance Excel
Plusieurs instances de Excel peuvent être ouvertes sur le même PC
Je réitère donc ma question :
savoir :
- s'il est ouvert dans la même instance de Excel
ou
- s'il est ouvert par n'importe quelle instance de Excel
Re,
une facon simple de vérifier qu'un classeur est ouvert à voir ici : https://excel.developpez.com/faq/?pa...ClasseurOuvert
Maintenant la question de @unparia est importante car il se peut que tu es plusieurs instance d'Excel ouvert (comme si tu avais plusieurs d'Excel ouvert indépendant des uns et des autres (uniquement sur PC))
et que le fichier que tu veux vérifier soit vérifié sur la mauvaise instance d'Excel, ce qui à pour conséquence de te donner en fin de compte une réponse erronée …
donc tu choisis d'orienté ton code dans quel sens ?
Option 1 : "s'il est ouvert dans la même instance de Excel"
Option 2 : " s'il est ouvert par n'importe quelle instance de Excel"
A choisir selon ta situation dans laquelle tu vas te trouver …
Edit : Cela peut t'aider à comprendre :https://excel-malin.com/codes-source...nstance-excel/
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
Bonjour à tous,
autre idée :
(dans la même session, sinon voir le lien de ryu)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Function fichierOuvert(nomFich As String) As Boolean Dim tmp On Error GoTo fin tmp = Workbooks(nomFich).Name fichierOuvert = True fin: End Function
eric
Bonjour
VBA/Excel offre quand-même nativement beaucoup plus simple que ce qui est montré par le lien de la FAQ.
Il suffit d'utiliser la fonction GetObject (plutôt que ouvrir, etc ...). Ainsi (exemple)
Appelable ainsi (exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Function estouvert(fichier As String) As Boolean Dim f As Object On Error Resume Next Set f = GetObject(fichier) If Not f Is Nothing Then estouvert = True On Error GoTo 0 Set f = Nothing End Function
--->> si tout le monde est d'accord avec cette solution, je suggère que soit modifié le lien concerné (ou que cette méthode y soit au moins mentionnée).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim fichier As String fichier = "d:\blabla.xlsm" MsgBox estouvert(fichier)
EDIT : plus j'y pense, plus je suis persuadé qu'il s'agit là d'une étourderie de Michel, dont je connais bien la grande compétence indubitable. Je suis persuadé de ce que - s'il passait par là - il interviendrait pour modifier ou compléter dans ce sens ce lien de la FAQ.
Coucou Jacques,
J'ai pas encore testé ta solution (que je n'hésiterai pas à tester dès que je peux - à mon avis à ne sera pas avant ce soir), mais ce qui est sûr, c'est que le lien de la faq marche uniquement sur PC.VBA/Excel offre quand-même nativement beaucoup plus simple que ce qui est montré par le lien de la FAQ .
Et comme tu le sais je privilégie toujours à les codes les plus efficaces et aussi multiplateforme qd cela est possible![]()
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
Merci bcp a tous j'ai reussije passe en résolu encore merci
Content pour toi, mais il sera bien de dire ici quelle méthode tu as adoptée.
Bonjour,
Peut-être que je n'ai pas tout compris ce que tu dis mais j'ai un sérieux doute sur cette procédure.
Lorsque je la lance sur un classeur ouvert sur une autre session, pas de souci car le message est "Vrai".
Je ferme l'autre session et je lance ta procédure qui ouvre le classeur maintenant disponible et le message est "Vrai".
Cela parait exact car lorsque je ferme le classeur test, il me demande si je veux sauvegarder le classeur dont je testais l'ouverture.
J'ai forcé la procédure fonction à "False" au départ mais c'est inutile car j'ai systématiquement "Vrai",
même en ayant tout fermé au préalable, dès son premier lancement.
N'y aurait-il pas un petit schmilblick ?
Bonjour anasecu
Tu as raison. Je viens de le vérifier.
Mea culpa. L'instruction GetObject retourne vrai si le fichier existe, ouvert ou non.
Bonjour,
Jacques, j'ai commencé à tester hier soir ton code uniquement sur Mac avec 2 Excel différents (2011 et 2016 Mac - imitation de plusieurs instances) et comme @anescu je me suis retrouvé avec True et j'ai eu en sus des comportements que je n'ai pas compris :
Le fichier à tester était parfois ouvert physiquement/visuellement et parfois il était ouvert virtuellement sans que je puisse le voir à l'écran ce qui avait pour conséquence quand celui-ci était réellement fermé, de recevoir un message de l'excel dont j'avais lancé la macro à savoir : "le fichier est disponible, voulez-vous l'ouvrir".
Je.voulais investiguer plus sachant qu'il peut y avoir des différences de code entre Mac et PC .
Maintenant avec ta dernière réponse Jacques, c'est chose inutile.
@anasecu
Edit : PS : pour ce qui passe par là, si il est possible de tester ma procédure se trouvant dans les contributions et d'avoir un retour ça serait cool( cf lien sur le mon post en début de discussion)
Et n'hésitez si vous avez une question …
Cordialement
Ryu
La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein
Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple
Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)
Partager