MarieNoob
Messages postés16Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention17 mars 2009
-
3 sept. 2008 à 20:12
MarieNoob
Messages postés16Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention17 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.
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)
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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 :
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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 :
MarieNoob
Messages postés16Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention17 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
MarieNoob
Messages postés16Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention17 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 ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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.
MarieNoob
Messages postés16Date d'inscriptionsamedi 1 décembre 2007StatutMembreDernière intervention17 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é ...
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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