Détection si excel est déjà ouvert

Résolu
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009 - 3 sept. 2008 à 20:12
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009 - 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

12 réponses

Utilisateur anonyme
4 sept. 2008 à 01:08
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
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 15:40
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+
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 17:59
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.
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 sept. 2008 à 09:30
joues avec TON instance de Excel, ca devrait coller...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 15:42
erratum

il faut lire:

 Pour cela ton formulaire doit absolument contenir un bouton(CommandButton1dans l'exemple ci-dessous) pour fermer excel
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 15:50
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 :
0
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009
4 sept. 2008 à 17:44
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
0
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009
4 sept. 2008 à 18:14
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 ?
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 18:25
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.
0
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009
4 sept. 2008 à 18:29
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é ...
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
4 sept. 2008 à 19:08
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+
0
MarieNoob Messages postés 16 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 17 mars 2009
4 sept. 2008 à 19:20
non désolé, ça marche toujours pas chez moi...

Toujours le sablier en continu

Microsoft excel (ne répond pas)
0
Rejoignez-nous