Détection si excel est déjà ouvert [Résolu]

MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention - 3 sept. 2008 à 20:12 - Dernière réponse : MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention
- 4 sept. 2008 à 19:20
Bonjour tout le monde,

Voici mon petit problème, lors du lancement de mon application en VBA je cache excel pour utiliser seulement les Userform avec ce code :

Private Sub Workbook_Open()
Application.Visible = False

Seulement le problème, si la personne utilisant mon fichier à déjà un fichier excel d'ouvert il ne va plus retrouver son fichier vu que l'application excel a disparu.

J'aurais voulu savoir si existe un code pour détecter si un fichier excel est déjà ouvert, dans ce cas je mettrai simplement un msgbox dans Workbook Open et il faudra pas que le fichier s'ouvre.

Merci d'avance pour votre aide
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 4 sept. 2008 à 01:08
3
Merci
Salut,

Les infos sur les classeurs ouverts sont dans la collection Application.Workbooks
Donc, Application.Workbooks.Count te renvois le nombre de classeur ouverts (celui en cous d'ouverture compris)

__________
  Kenji

Merci Charles Racaud 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 15:40
3
Merci
Salut,

ou pourquoi pas ouvrir ton fichier dans une deuxieme session excel si un fichier est déjà ouvert dans la session déjà existante.

Pour cela ton formulaire doit absolument contenir un bouton(command bouton un dans l'exemple ci-dessous) pour fermer excel

Ce formulaire doit obligatoirement etre non modale donc son option Show modal doit etre reglé sur False.

A mettre dans ThisWorkBook :

Option Explicit

Private Sub Workbook_Open()
    'on verifi si un fichier ou plus est/sont deja ouvert(s)
    'attention ce fichier sera contabilisé
    If Workbooks.Count > 1 Then 'au moins un fichier deja ouvert
        Dim ExcelAppli As Object, OpFichier As Object
        Application.DisplayAlerts = False
        'pour pouvoir ouvrir ce fichier une deuxieme fois il faut que le 1ere soit en lecture seul(read-only)
        'donc on passe ce fichier(ouvert) en lecture seul
        ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
        'on lance la nouvelle session excel
        Set ExcelAppli = CreateObject("Excel.Application")
        'ExcelAppli.Visible = False
        'on ouvre ce meme fichier dans la nouvelle session
        Set OpFichier = ExcelAppli.Workbooks.Open(ThisWorkbook.Path & "" & ThisWorkbook.Name)
        Application.DisplayAlerts = True
        'on vide les variables objet
        Set OpFichier = Nothing
        Set ExcelAppli = Nothing
        'on ferme ce fichier sans le sauver
        ThisWorkbook.Close False
    Else
        'cette partie s'applique à la 2ieme ouverture ou à une ouverture dans une session excel
        'sans autre fichier ouvert
        DoEvents
        Application.Visible = False
        UserForm1.Show 'ATTENTION ce formulaire doit etre NON MODAL
    End If
End Sub
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
Dans le code de la Userform1:

Private Sub CommandButton1_Click()
    'on ferme excel
    Application.Quit
End Sub

Attention à partir du moment ou tu auras mis ce code dans ton fichier il te faudra desactiver les macros à l'ouverture pour pouvoir acceder au code.

En cas de probleme il ce peu que tu te retrouves avec des session excel non visible. La methode que je de te donner marche bien mais lors de tes bidouillage tu risque d'avoir le probleme donc je t'encourage a utiliser une de mes source ici :

http://www.vbfrance.com/codes/TUER-SESSION-CACHEE-EXCEL-PARTIR-AUTRE-SESSION_47514.aspx

qui te permetra de verifier si des sessions excel invisibles sont ouvertes et de les tuer le cas échéant.

A+

Merci bigfish_le vrai 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
Meilleure réponse
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 17:59
3
Merci
tu y etais presque :

Private Sub CB_QUITTER_Click()
    Application.DisplayAlerts = False
    Application.Quit
End Sub

ou bien

Private Sub CB_QUITTER_Click()

    ThisWorkBook.Close False

    Application.Quit

End Sub

par contre pour le probleme de lenteur je ne comprend pas pourquoi car je n'ai pas ce probleme.
n'aurais tu pas d'autre session excel ouverte mais non visible ?
Utilise le lien que je t'ai donné et telecharger le fichier excel.

Merci bigfish_le vrai 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de bigfish_le vrai
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 4 sept. 2008 à 09:30
0
Merci
joues avec TON instance de Excel, ca devrait coller...
Commenter la réponse de Renfield
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 15:42
0
Merci
erratum

il faut lire:

 Pour cela ton formulaire doit absolument contenir un bouton(CommandButton1dans l'exemple ci-dessous) pour fermer excel
Commenter la réponse de bigfish_le vrai
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 15:50
0
Merci
erratum bis

'attention ce fichier sera comptabilisé

En cas de probleme il ce peu que tu te retrouves avec des sessions excel
non visibles. La methode que je t'ai donné marche bien mais lors de
tes bidouillages tu risques d'avoir le probleme donc je t'encourage à
utiliser une de mes source ici :
Commenter la réponse de bigfish_le vrai
MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention - 4 sept. 2008 à 17:44
0
Merci
Superbe réponse, merci beaucoup bigfish ça marche à la perfection , seul problème ça rame beaucoup.

Quand il n'y a pas de fichier d'ouvert ça rame pas du tout.
Par contre quand il faut ouvrir la 2ème session ça rame pas mal .

Est-il possible de forcer le démarrage des macros, c'est à dire ne pas voir le MsgBox "Voulez vous activez les macros ..." ?

De même à la fin de mon fichier, j'aurais bien voulu qu'on ne voit pas le MsgBox "Voulez vous enregistrer ?", j'ai essayer avec ces lignes de commandes mais je suis obliger de forcer la sauvegarde (ce qui fait de nouveau ramer le pc), est-il possible de passer outre cette sauvegarde ?

Voici mes lignes pour la fermeture :

Private Sub CB_QUITTER_Click()
Application.AlertBeforeOverwriting = False
ThisWorkbook.Save '-----------> la ligne que j'aimerais bien supprimer pour éviter les ralentissements
Application.Quit
End Sub

Merci beaucoup
Commenter la réponse de MarieNoob
MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention - 4 sept. 2008 à 18:14
0
Merci
Merci encore bigfish

Ton programme me fait planter Excel et je ne peut l'utiliser malheureusement, problème de compatibilité entre différente version d'excel ? (j'utilise excel 2003)

Est-il possible de forcer le démarrage des macros, c'est à dire ne pas voir le MsgBox avec les boutons "Désactivez les macros" ou "Activez les Macros" à l'ouverture d'excel ?
Commenter la réponse de MarieNoob
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 18:25
0
Merci
planter excel ? j'aimerais bien en savoir plus ! d'autant que j'utilise excel 2003 aussi.

j'insite, peux-tu m'expliquer ce qui ce passe ?

non on ne peu pas forcer l'execution des macros mais par contre on peu regler le niveau de securité sur bas(faible), mais ce n'est par recomandé ou bien ajouter a ton fichier une signature mais la je n'y connais rien. Je sais juste que la signature n'est valable que pour un code donné c'est a dire que si tu modifis ton code tu devras refaire la manip.
Commenter la réponse de bigfish_le vrai
MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention - 4 sept. 2008 à 18:29
0
Merci
En faite ton fichier s'ouvre mais en Anglais (sheet1, sheet2 etc ...)
Ca charge mais au bout d'un moment j'ai un msg windows d'erreur, Excel à eu un problème et à du fermer...
En faite pendant le chargement je n'ai pas la main, uniquement le sablier ...

Quelle est la ligne de commande pour mettre le niveau de sécurité sur bas ?
Ensuite à la fermeture je remettrai le niveau de sécurité sur moyen pour éviter tout problème ...

C'est vrai que l'histoire des signatures c'est plutôt compliqué ...
Commenter la réponse de MarieNoob
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 4 sept. 2008 à 19:08
0
Merci
il n'y a pas de ligne de commande pour ça tu ne peux le faire que manuellement via le menu Outils... Macro Securité...

J'ai modifier le fichier qui plante a l'ouverture. La nouvelle version est maintenant disponible mais je ne suis pas sur que les modifs change quoi que ce soit
mais si tu pouvais quand meme essayer et me tenir au courant ce serait sympas

A+
Commenter la réponse de bigfish_le vrai
MarieNoob 16 Messages postés samedi 1 décembre 2007Date d'inscription 17 mars 2009 Dernière intervention - 4 sept. 2008 à 19:20
0
Merci
non désolé, ça marche toujours pas chez moi...

Toujours le sablier en continu

Microsoft excel (ne répond pas)
Commenter la réponse de MarieNoob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.