Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ouverture automatique d'un fichier

0 views
Skip to first unread message

Benjamin Larue

unread,
Sep 3, 2001, 11:23:21 AM9/3/01
to
Bonjour !
 
J'ai créé un modèle.
Ce modèle, les utilisateurs le personnalisent (nom, ...) via une macro, qui se charge de tout, y compris l'enregistrement et la fermeture du modèle.
 
Or, je souhaiterais qu'à l'issue de la fermeture, Excel m'ouvre un document basé sur le modèle ainsi personnalisé et enregistré.
 
Le souci, c'est qu'il faut fermer un modèle pour ouvrir un document basé sur ce modèle, et qu'il semble (??) impossible de lancer par macro l'ouverture d'un document à partir d'un document qu'on vient de fermer...
 
Ou alors, je n'ai rien compris...
 
Merci de votre aide.

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu chauve."
     - Bernard Blier -
 
 
 
 

Frédéric Sigonneau

unread,
Sep 3, 2001, 4:16:17 PM9/3/01
to
Bonsoir,

Une solution parmi d'autres sans doute : lancer par OnTime une demande
d'ouverture d'un classeur basé sur ton modèle une seconde après sa fermeture.
Pour ça, dans le module ThisWorkbook du modèle, copie cette procédure ou place
l'instruction If...End If à la fin du code existant si tu utilises déjà
l'événement Workbook_BeforeClose :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If UCase(Right(ThisWorkbook.FullName, 3)) = "XLT" Then
Application.OnTime Now + TimeValue("00:00:01"), "Relance"
End If

End Sub

et dans un module standard :

Sub Relance()
Workbooks.Open ThisWorkbook.FullName
End Sub

FS
--
Frédéric Sigonneau [né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau

> Benjamin Larue a écrit :

Benjamin Larue

unread,
Sep 4, 2001, 5:58:54 AM9/4/01
to
Bonjour Frédéric et merci.

J'ai essayé sur un nouveau classeur, enregistré en modèle, donc tout petit.
Ok, no problémo, tout est nickel.

Par contre, mon modèle pèse 2,7 Mo. Lourd et long à enregistrer avant
fermeture (procédure automatique). Environ 30 s sur ma machine.

Et avec ta modification de la macro de fermeture, effectivement, il essaie
de rouvrir un document, mais j'ai droit au message :
2001-090.XLT est déjà ouvert. Si vous l'ouvrez à nouveau, toutes vos
modifications seront perdues.Voulez-vous rouvrir 2001-090.XLT. (Bouton Oui /
Non).
Et ce malgré que j'ai joué avec le temps "on time", en essayant 30 s, puis
45 s et même 1 minute.
Et même au bout d'1 minute, j'ai Excel qui est "vide" pendant... Donc le
document est bien fermé.

Si je clique sur NON, il me rouvre le modèle (donc le .xlt), avec mes macros
d'ouverture opérationnelles (ComboBox et tout qui va bien). Ok pour le
fonctionnement. PAS OK car je suis à nouveau sur mon modèle.

Si je clique sur OUI, il m'ouvre bien un document basé sur mon modèle, mais
les macros d'ouvertures semblent dévalidées, alors qu'elles s'activent
automatiquement (signature de projet et tout et tout). Donc PAS OK.

Doublement pas OK, car il ne faut pas que l'utilisateur final ait à répondre
à une question. TOUT doit être automatique. Tu sais, j'ai des blaireaux
comme utilisateurs... {;o)~

Donc merci de ton aide, mais un p'tit complément s'rait l'bienv'nu !

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message
news:3B93E511...@wanadoo.fr...

Benjamin Larue

unread,
Sep 4, 2001, 3:17:48 PM9/4/01
to
Bonsoir à tous !
On dirait que mon cas n'intéresse pas grand monde.
Dommage !
 
Mais ne désespérez pas...
 
{!o)~

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu chauve."
     - Bernard Blier -
 
 
 
 
"Benjamin Larue" <blarue.aix...@mageos.com> wrote in message news:O633hxINBHA.1956@tkmsftngp05...

popi

unread,
Sep 4, 2001, 3:44:06 PM9/4/01
to
Salut Benjamin, sois patient, si Frédéric t'a déjà répondu et que sa réponse
ne convient pas , le connaissant il doit être en train de te proposer autre
chose ou un complément de réponse !
Et puis sur certains points il est difficile de "passer" après Frédéric !!
;-))

--
@+ popi
" Quadra ressoudeur "
http://perso.infonie.fr/popi/
(N'oubliez pas Bonjour, au revoir, Merci d'avance, contre Malpolitus !)


Benjamin Larue

unread,
Sep 4, 2001, 4:19:05 PM9/4/01
to
Oh que oui, je le sais bien ! Passer derrière Frédéric, c'est comme derrière
Attila, en plus sympa.
Non, je ne suis pas impatient, je suis désespéré ! Bouhouhou...

Non, faut dire que j'ai envoyé à ma direction un fichier bogué et j'essaie
de me rattraper...

Promis, je mettrai le nom de l'heureux contributeur qui m'aura aidé !
{!o)~

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"popi" <po...@infonie.fr> wrote in message
news:uiTQFoXNBHA.1956@tkmsftngp05...

Match

unread,
Sep 4, 2001, 5:02:24 PM9/4/01
to
Salut,
où ça ?
Sur le chèque de paye ? ;-))

Trop gêné pour signé

Benjamin Larue

unread,
Sep 4, 2001, 6:12:57 PM9/4/01
to
Oui, bien sûr... Mais je ne mettrai pas le montant, tu te débrouillerais
bien tout seul, non ?

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Match" <ma...@videotron.ca> wrote in message
news:#2B4UTYNBHA.576@tkmsftngp05...

Frédéric Sigonneau

unread,
Sep 4, 2001, 6:44:56 PM9/4/01
to
Bonsoir,

2.7 Mo j'ai pas ça en stock sur mon disque dur pour faire des tests...
Sous toute réserve donc, une modif à tester :

'====module ThisWorkbook


Private Sub Workbook_BeforeClose(Cancel As Boolean)

If UCase(Right(ThisWorkbook.FullName, 3)) = "XLT" Then

DateSaved = FileDateTime(ThisWorkbook.FullName)


Application.OnTime Now + TimeValue("00:00:01"), "Relance"
End If

End Sub
'=======================

'======module standard
Public DateSaved

Sub Relance()
Do
Loop Until DateSaved <> FileDateTime(ThisWorkbook.FullName)
Workbooks.Open ThisWorkbook.FullName
End Sub
'=====================

L'idée est de stocker dans une variable la date de dernière modification du
modèle juste avant de lancer OnTime et de boucler dans la procédure Relance
jusqu'à ce que la date de dernière modification ait été mise à jour par Excel
(donc en principe après enregistrement et fermeture). L'avantage étant d'éviter
de coder en dur le délai avant l'ouverture d'un fichier basé sur le modèle (le
temps d'enregistrement d'un gros fichier pouvant être très variable suivant les
configurations).

Ça fonctionne chez moi et, au passage, j'ai remarqué, après avoir cliqué sur
fermer puis enregistrer les modifications (dans le modèle xlt), que le modèle se
ferme puis réapparait puis enfin cède la place à un nouveau fichier basé sur
lui.
Avec ton "gros" fichier j'imagine que cela peut donner l'impression que quelque
chose ne marche pas correctement mais, apparemment, cela semble être normal
(?)...

A+

Benjamin Larue

unread,
Sep 4, 2001, 7:08:07 PM9/4/01
to
Frédéric, bonsoir...
Je suis comme toi, devant mon micro, en train de m'arracher les cheveux par
poignées... Heureusement, j'ai le crâne bien fourni.

J'ai toujours le même souci que précédemment : il me dit que mon modèle (en
occurrence 2001-090.xlt) est déjà ouvert et que si je le rouvre, je perdrai
les dernières modifications... patati patata.

Or, pour Excel (je suis avec Office XP, au fait), mon modèle est bien fermé.
Euh... Bin pas tout à fait pour être précis : dans VBA, mon modèle originel
est toujours ouvert. Je l'avais déjà remarqué tout à l'heure...

Si je réponds "oui", les macros d'ouverture (workbook_open) ne marchent pas.

Je ne sais plus quoi faire...

En tout cas, merci de ton soutien.

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message

news:3B955968...@wanadoo.fr...

Frédéric Sigonneau

unread,
Sep 4, 2001, 7:54:25 PM9/4/01
to
Re,

Je vais essayer une autre approche. Pour l'instant dodo

FS

Benjamin Larue a écrit :

Benjamin Larue

unread,
Sep 5, 2001, 1:12:00 AM9/5/01
to
Merci en tout cas de te pencher sur mon problème, c'est très sympa !

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -

"Benjamin Larue" <blarue.aix...@mageos.com> wrote in message

news:O3zdC7YNBHA.1672@tkmsftngp03...

Frédéric Sigonneau

unread,
Sep 5, 2001, 2:56:45 PM9/5/01
to
Bonsoir Benjamin,

Eh bien, il faut toujours écouter Excel :-)
S'il te dit que ton modèle est toujours ouvert c'est que, malgré les apparences
(surface de travail gris foncé = en principe aucun classeur ouvert), ton modèle
est toujours ouvert pour lui, et je pense que ça vient du fait que la procédure
Relance est dans un module du modèle.

On peut éviter le message d'alerte et le choix entre Oui et Non en utilisant
Application.DisplayAlerts=False mais je ne pense pas que cela te convienne.
La seule solution que j'ai trouvée est de déplacer la procédure Relance dans un
autre classeur. Une macro complémentaire pourrait sans doute faire l'affaire
mais, pour faire au plus simple, je te propose d'utiliser le Perso.xls.

Inconvénients : tu dois trouver le moyen d'inclure un module dans tous les
perso.xls concernés et le nom et le chemin du modèle doit être codé en dur dans
la procédure Relance (ici j'ai supposé que le modèle était enregistré dans le
dossier par défaut des modèles Excel).
L'avantage est que ça me semble fonctionner comme tu le souhaitais, sans que
l'utilisateur ait à intervenir.

Modifications à effectuer :

'=====dans le module ThisWorkbook de ton modèle


Private Sub Workbook_BeforeClose(Cancel As Boolean)

If UCase(Right(ThisWorkbook.Name, 3)) = "XLT" Then
Application.OnTime Now + TimeValue("00:00:01"), "perso.xls!Relance"
End If
End Sub
'==============================================

'=====dans un module standard du Perso.xls
Sub Relance()
LeModele = Application.TemplatesPath & "GrosModele.xlt"
Workbooks.Add LeModele
End Sub
'=========================================

A+
FS

Benjamin Larue a écrit :
>

Benjamin Larue

unread,
Sep 5, 2001, 6:30:39 PM9/5/01
to
Bonsoir Frédéric,...

Tu as raison, comme je le disais précédemment, j'ai bien constaté la
présence de mon modèle, cachée dans VBA...
Donc, l'empêcheur de tourner en rond avait encore frappé.
Quant à DisplayAlerts, j'y ai pensé, mais ça ne fonctionne pas, on n'est
plus dans le document d'origine (enfin, il me semble).

Ton idée d'utiliser le perso.xls est intéressante. MAIS, car il y a toujours
un "mais", tu le sais que trop bien, c'est que je n'ai pas accès au
perso.xls des autres utilisateurs et que je ne peux pas écraser violemment
leur exemplaire, s'il existe. Je ne maîtrise malheureusement pas tout dans
l'environnement des utilisateurs. Concaténer ? Je ne sais pas faire et quid
de ceusses qui ont déjà tout ? Euh... Abandonnons.

Je viens de penser à quelque chose, en te lisant : pourquoi ne pas appeler
un classeur intermédiaire par macro depuis mon modèle.
A l'ouverture de ce classeur, il me ferme le modèle (toujours le même nom au
même emplacement) et m'ouvre un classeur basé sur ce modèle, puis se ferme
automatiquement...
Je ne sais pas ce que tu en penses ? Un avis ?

Si tu vois un inconvénient, n'hésite pas à m'en faire part, je ne testerai
pas ce soir, trop de boulot et trop crevé pour penser efficacement...

En tout cas, c'est sympa de te sortir les tripes pour moi.

Bonne nuit si tu ne reviens pas ce soir, sinon à toute, je suis là encore
une heure, mais pas plus...

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message

news:3B96756D...@wanadoo.fr...

Frédéric Sigonneau

unread,
Sep 5, 2001, 7:19:53 PM9/5/01
to
Re

Oui c'est jouable. J'avais pensé à une macro complémentaire mais pourquoi pas un
classeur !
A mon avis, tu n'as pas besoin de l'ouvrir. Juste mettre une référence à ce
classeur (qui contiendrait simplement un module avec les 4 lignes de la
procédure Relance) dans ton modèle.
Et modifie la procédure lancée par le OnTime du ThisWorkbook du modèle :
"monClasseur.xls!Relance" au lieu de "perso.xls!Relance".

Benjamin Larue

unread,
Sep 6, 2001, 1:28:01 AM9/6/01
to
Bonjour Frédéric.
(on est le lendemain, on peut dire bonjour, maintenant).
Un p'tit mot avant de partir au charbon (du charbon, à Marseille ???) : je
teste et je te tiens au courant.
Merci.

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message

news:3B96B319...@wanadoo.fr...

Benjamin Larue

unread,
Sep 7, 2001, 5:17:41 PM9/7/01
to
Bonsoir Frédéric (et les autres, s'ils veulent se lancer)...
 
Alors, j'ai testé le principe du fichier intermédiaire, et ça marche, mais bizarrement : j'ai réglé le "ontime" à + 15 s et toutes les 15 s, il m'ouvre un nouveau document ! Et avec un document basé sur le modèle, pas de problème.
Zarbi, non ?
 
Tiens, voici mes macros :
Modèle, module "ThisWorkBook"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If UCase(Right(ThisWorkbook.Name, 3)) = "XLT" Then
        Workbooks.Open Filename:= _
        "C:\PHARMAgest
inter@ctive\Modèles\Développements\Transition.xls"
    End If
End Sub
 
Transition, module "ThisWorkBook"
Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:00:15"), "Relance"
    ThisWorkbook.Close
End Sub
Transition, module normal
Sub relance()
Workbooks.Add Template:= _
        "C:\PHARMAgest inter@ctive\Modèles\Développements\Essai de fermeture.xlt"
End Sub
Comme c'est un essai, je n'ai pas d'autre macro qui traîne, qui pourrait polluer le fonctionnement.
Si quelqu'un le souhaite, je peux lui poster mon fichier, je ne comprends vraiment pas ce qui se passe.
 
En tout cas, à bientôt...

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu chauve."
     - Bernard Blier -
 
 
 
 
"Benjamin Larue" <blarue.aix...@mageos.com> wrote in message news:OV2P$SpNBHA.1304@tkmsftngp03...

Frédéric Sigonneau

unread,
Sep 8, 2001, 7:54:04 AM9/8/01
to
Bonjour,

Qu'est-ce que ça donne si tu remplaces


Application.OnTime Now + TimeValue("00:00:15"), "Relance"

par
Application.OnTime Now + TimeValue("00:00:15"), "Relance", , False

FS
--
Frédéric Sigonneau [né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau

> Benjamin Larue a écrit :

Benjamin Larue

unread,
Sep 8, 2001, 4:39:39 PM9/8/01
to
Bonsoir,
Encore moi, et oui...
Là, je ne comprends pas, j'ai bien placé le code avec ",,false", mais :
Erreur d'exécution '1004':
La méthode 'OnTime' de l'objet '_Application' a échoué

J'ai regardé l'aide, tout correspond, j'ai feuilleté le forum, et je n'ai
rien trouvé...
J'y perd mon latin.
Si tu as une astuce ?
Merci et bonsoir...

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message

news:3B9A06DC...@wanadoo.fr...

Frédéric Sigonneau

unread,
Sep 8, 2001, 6:14:35 PM9/8/01
to
Bonsoir,

On pourrait peut-être continuer en bal perso..
Envoie moi le nécessaire (zippé si possible :-)

A+

Benjamin Larue

unread,
Sep 9, 2001, 6:48:48 PM9/9/01
to
Bonsoir à toutes et à tous.

Merci beaucoup Frédéric (non ! pas "que" comme ma femme, juste "c")
;-)
J'avais 2 OnTime qui se concurrençaient. Et ne pas mettre de commande Close
dans un module Private sub workgroup...

--
Benjamin (Un de la Canebière)
"L'expérience est un peigne que la vie vous offre lorsque vous êtes devenu
chauve."
- Bernard Blier -


"Frédéric Sigonneau" <frederic....@wanadoo.fr> wrote in message

news:3B9A984B...@wanadoo.fr...

0 new messages