Bonjour savez 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 savez 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
???
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
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 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
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
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 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.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
Merci bcp a tous j'ai reussi je passe en résolu encore merci
Content pour toi, mais il sera bien de dire ici quelle méthode tu as adoptée.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
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.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
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 en n'oubliant pas d'indiquer qu'elle est la solution finale choisie
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager