OVH Cloud OVH Cloud

Macro pour modifier le modèle attaché

16 réponses
Avatar
JièL Goubert
Salutatous

vous vous souvenez ;-), j'avais commencé a lancer le pb de modèle 97 pas
vraiment compatible avec 2003, ben voila, il est temps de relancer...
En fait c'est pas qu'ils soient réellement incompatible, mais """a
priori""" il y a des {champs} en français dans la version 97 et ils sont
évidement transformés en n'englishe lorsque l'on ouvre le doc en 2003
:-s. Je n'ai pas encore compris pourquoi, mais _certains_ champs
provoque la demande d'enregistrement du modèle attaché même si
absolument rien n'a été fait sur le doc ouvert. Le pb, c'est que
certaines macros sont bloqués par cette demande et que les modèles sont,
de toutes façons, en lecture seule.

Pour des soucis de version 97 encore installé, il existe 2 dossiers de
modèles (je simplifie) : un pour les modèles fait avec 97, et un pour
les modèles modifiés avec 2003.

Mon objectif, lancer à chaque ouverture d'un doc une macro qui irait
changer subrepticement le chemin actuel vers le modèle attaché 97 en
chemin vers le modèle 2003.
Note importante, il arrive souvent que les utilisateurs ouvrent les doc
directement à partir de l'explorateur.

Avez vous un début de macro à me proposer (ou une macro entière, je
serais pas bégueule ;-D), je ne sais pas pas quel bout le prendre.
Merci les AMIS et aussi les MECHANTS ;-)

AMIS : Anti Macro Inutilement Superfétatoire
MECHANTS : Macroteurs Espérants Cacher (leur) Humiliation (en)
Avilissant Nos Trucs Surprenants

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

10 réponses

1 2
Avatar
Geo

Mon objectif, lancer à chaque ouverture d'un doc une macro qui irait changer
subrepticement le chemin actuel vers le modèle attaché 97 en chemin vers le modèle
2003.


Si c'est le normal.dot je ne pense pas qu'il y ait de solution, c'est
le premier modèle ouvert.
Sinon il me semble qu'il suffirait de mettre dans l'AutoExec un
référencement au modèle, du genre :
if Application.Version = "11.0" then
ActiveDocument.AttachedTemplate = MonModele2003AvecSonChemin
else
ActiveDocument.AttachedTemplate = MonModele97AvecSonChemin
endif

Maintenant tu vas dire que tu as 200.000 modèles à modifier
sur 200.000 postes différents.
Sûr que ça fait mal aux doigts.

--
A+

Avatar
JièL Goubert
Bonjoir© Geo

Le 29/03/2006 20:24 vous avez écrit... :

Mon objectif, lancer à chaque ouverture d'un doc une macro qui irait
changer subrepticement le chemin actuel vers le modèle attaché 97 en
chemin vers le modèle 2003.


Si c'est le normal.dot je ne pense pas qu'il y ait de solution, c'est le
premier modèle ouvert.


Ouf, ce n'est pas le normal.dot ;-)

Sinon il me semble qu'il suffirait de mettre dans l'AutoExec


ça m'a l'air bien, mais dans quel Autoexec ? il faudrait que ça se
déclenche à chaque ouverture d'un quelconque doc.

if Application.Version = "11.0" then
ActiveDocument.AttachedTemplate = MonModele2003AvecSonChemin
else
ActiveDocument.AttachedTemplate = MonModele97AvecSonChemin
endif


Dans ce que je vois ci dessus, ça doit être dans chaque doc, non ?

Maintenant tu vas dire que tu as 200.000 modèles à modifier
sur 200.000 postes différents.
Sûr que ça fait mal aux doigts.


ben oui, dans ce cas ça me pose un gros soucis :-(

Pour compléter un peu, les .doc ET les .dot des différentes versions
sont dans des dossiers différents, donc pas de risque de mélanger les
documents ni les modèles entre les versions.

Exemple :
pour Word 97
Dossier_Document_97 : contient tous les .doc 97
Dossier_Modèles_97 : contient tous les .dot 97

Pour Word 2003
Dossier_Document_2003 : contient tous les .doc 2003
Dossier_Modèles_2003 : contient tous les .dot 2003

Le soucis c'est que actuellement les .doc qui sont dans
Dossier_Document_2003 utilisent (pas tous) les modèles qui sont dans
Dossier_Modèles_97. Je voudrais donc changer ça, mais je ne peux pas le
faire sur tous les doc étant donné qu'il y en a des milliards et que je
vais mettre les serveurs à genoux (et donc me faire tirer les oreilles)
si j'ouvre tous les doc, modifie les chemins vers les modèles et
réenregistre...
Voila la raison pour laquelle je voudrais faire ça au coup par coup à
chaque fois qu'un doc (avec un chemin vers un modèle 97) est ouvert.

D'autres pistes ? d'autres questions ? n'hésite/n'hésitez pas.

Merci beaucoup d'avance de m'aider sur cet épineux pb.

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr


Avatar
Geo

Sinon il me semble qu'il suffirait de mettre dans l'AutoExec


ça m'a l'air bien, mais dans quel Autoexec ? il faudrait que ça se déclenche à chaque
ouverture d'un quelconque doc.


Si c'est à chaque ouverture il faut faire un AutoOpen que tu mets dans
le normal.dot ou dans un modèle du répertoire de démarrage.

if Application.Version = "11.0" then
ActiveDocument.AttachedTemplate = MonModele2003AvecSonChemin
else
ActiveDocument.AttachedTemplate = MonModele97AvecSonChemin
endif


Dans ce que je vois ci dessus, ça doit être dans chaque doc, non ?


cf la réponse ci-dessus.
La macro AutoOpen se déclenchera à chaque ouverture, que cette macro
soit dans le normal.dot ou un modèle du répertoire de démarrage.

[...]

Le soucis c'est que actuellement les .doc qui sont dans Dossier_Document_2003 utilisent
(pas tous) les modèles qui sont dans Dossier_Modèles_97. Je voudrais donc changer ça,
mais je ne peux pas le faire sur tous les doc étant donné qu'il y en a des milliards et
que je vais mettre les serveurs à genoux (et donc me faire tirer les oreilles) si
j'ouvre tous les doc, modifie les chemins vers les modèles et réenregistre...


Tu le fais la nuit, les jours de fin de semaine, les dimanche et les
jours fériés.
Dans ma boite on présente les informaticiens comme des héros car il
leur arrive de faire ça.

--
A+


Avatar
JièL Goubert
Bonjoir© Geo

Le 30/03/2006 18:20 vous avez écrit... :

Sinon il me semble qu'il suffirait de mettre dans l'AutoExec


ça m'a l'air bien, mais dans quel Autoexec ? il faudrait que ça se
déclenche à chaque ouverture d'un quelconque doc.


Si c'est à chaque ouverture il faut faire un AutoOpen que tu mets dans
le normal.dot ou dans un modèle du répertoire de démarrage.


Aie... Le normal.dot y'en a maintenant des milliers :-(, et pas question
d'aller tous les modifier

Quand aux modèles mis dans le dossier de démarrage, mauvaise nouvelle,
AutoOpen ne fonctionne pas dans ce cas (si j'ai bien compris ceci :
http://support.microsoft.com/kb/286310/fr ) :-((((((

bbbouuuuhhhhhhhh y fait rien que de m'embêter ce Word :-(

Le soucis c'est que actuellement les .doc qui sont dans
Dossier_Document_2003 utilisent (pas tous) les modèles qui sont dans
Dossier_Modèles_97. Je voudrais donc changer ça, mais je ne peux pas
le faire sur tous les doc étant donné qu'il y en a des milliards et
que je vais mettre les serveurs à genoux (et donc me faire tirer les
oreilles) si j'ouvre tous les doc, modifie les chemins vers les
modèles et réenregistre...


Tu le fais la nuit, les jours de fin de semaine, les dimanche et les
jours fériés.


Je vais y penser, mais je crois que ce n'est pas possible à cause que
les serveurs sont coupé pour la sauvegarde pendant la nuit :-(

Je suis dans une impasse !!!

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr



Avatar
Geo


Aie... Le normal.dot y'en a maintenant des milliers :-(, et pas question d'aller tous
les modifier


Oooohhhh une petite macro pour balayer le réseau ? non ?
L'administrateur système n'apprécierait pas ?

Quand aux modèles mis dans le dossier de démarrage, mauvaise nouvelle, AutoOpen ne
fonctionne pas dans ce cas (si j'ai bien compris ceci :
http://support.microsoft.com/kb/286310/fr ) :-((((((


Je suis un peu étonné, mais bon on va vérifier tout ça (déformation
professionnelle)
sinon ils disent que l'autoExec marche dans un modèle global, donc à
partir d'un auto exec dans un modèle du démarrage on pourrait rattacher
un addin qui contiendrait un AutoOpen.
Au Québec on te dirait que c'est l'histoire de l'homme qui a vu l'homme
qui a vu l'ours.

Finalement je cherchais un sujet de AddIn :-)
Mais ma bécane est tellement pourrie que j'arrive pas à installer
visual tools for Office 2005.


--
A+

Avatar
Geo
Bonsoir

Voici ce que dit l'aide (on ne la lit jamais assez): "Pour qu'une macro
automatique puisse s'exécuter, il faut qu'elle soit située dans le
modèle Normal, dans le document actif, ou dans le modèle sur lequel le
document actif est basé. La macro AutoExec constitue la seule
exception. En fait, elle ne s'exécute pas automatiquement sauf si elle
est stockée à l'un des emplacements suivants : le modèle Normal, un
modèle chargé globalement via la boîte de dialogue Modèles et
compléments ou un modèle global stocké dans le dossier désigné comme
dossier Démarrage."

Effectivement une AutoExec d'un modèle dans le dossier de démarrage se
lance à l'ouverture de Word, mais pas un autoOpen, ni un événement
document Open (voir ci-dessous).

Dans l'autoexec on peut rattacher un autre modèle, mais le document
n'étant pas basé dessus la macro AutoOpen ne se lance pas (vérifié).

Pour les événements :
"Contrairement aux macros automatiques, les procédures d'événement
contenues dans le modèle Normal n'ont pas une portée globale. Ainsi,
ces procédures sont exécutées uniquement si le modèle associé au
document est le modèle Normal."

Restent donc deux voies :
1- modifier les millions de modèles normal.dot
2- ou modifier les milliards de documents,
avec deux variantes :
2-a : attacher à chaque document un modèle qui contient la fameuse
AutoOpen (mais comment fait-on pour le nouveaux documents?)
2-b : Attacher le bon modèle au document, encore qu'il puisse être
ouvert sur deux versions de Word ?

La solution la plus radicale est de dire que Word 97 a une énorme fuite
et comme les fils du réseau passent à côté des machines à café, la
fuite va rendre le café définitivement et inexorablement imbuvable si
on continue à l'utiliser.

Sur ce, il y a école demain, donc on réfléchira plus tard.

--
A+
Avatar
JièL Goubert
Bonjoir(c) Geo

Le 02/04/2006 22:58 vous avez écrit ceci :
Restent donc deux voies :
1- modifier les millions de modèles normal.dot


Maintenant que j'ai expliqué que c'était mieux qu'il ne soit plus partagés
et en lecture seule, je crois que j'aurais du mal à dire que pour faire
une opération de maintenance il faut TOUS les modifier :-s glurps

2- ou modifier les milliards de documents,
avec deux variantes :
2-a : attacher à chaque document un modèle qui contient la fameuse
AutoOpen


Ben si j'attache les milliards de doc au bonSSSSSS modèles, plus besoin
d'AutoOpen
C'est vraiment dommage que l'autoopen ne fonctionne pas comme je le
voudrais :-(

(mais comment fait-on pour le nouveaux documents?)


Pour les nouveaux pas de soucis, il utilisent le dossier des nouveaux
modèles. C'est la récupération d'un ancien doc basé sur un ancien modèle
qui em***bete

2-b : Attacher le bon modèle au document, encore qu'il puisse être
ouvert sur deux versions de Word ?


Nan, pas de partage. Ceux qui bosse encore sur 97 ben y restent dans leurs
coins, na ! ;-)

La solution la plus radicale est de dire que Word 97 a une énorme fuite
et comme les fils du réseau passent à côté des machines à café, la fuite
va rendre le café définitivement et inexorablement imbuvable si on
continue à l'utiliser.


;-)))))))))
Il reste quand même une solution 3, mais je ne connais pas tous les
impacts qu'elle peut avoir : supprimer les millions de dossiers qui
contiennent les modèles 97. Mais cette solution ne peut être envisagé que
quand il n'y aura plus d'Office 97 dans la maison... j'espère ça pour la
fin de l'année, donc en attendant ben... je suis un peu coincé :-s

Sur ce, il y a école demain, donc on réfléchira plus tard.


Vi, merci pour ton analyse, c'était très clair

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/

Avatar
Anacoluthe
Bonjour JièL , Geo & C° !

Pardonnez mon retard de participation à cette ficelle ;-)

Il y a un moyen d'exécuter un code global sur tout document
sans placer ce code dans Normal.dot

Il faut utiliser l'événement d' /application/ DocumentChange
qui survient chaque fois qu'un nouveau document est actif
qu'il soit créé ou qu'il soit ouvert dans Word.

Un événement d'application c'est toujours un peu difficile
à comprendre et à fabriquer parce qu'il faut faire un module de
classe et qu'il faut l'initialiser dans un autoexec.

Pour aider à comprendre je vous ai fait un petit addin
qui se contente d'afficher le modèle attaché du document qui
vient de changer dans Word.

Pour JièL on peut imaginer à partir de là que cette macro
change le modèle attaché WD97 au modèle WD2003 sans rien dire.
Ne pas oublier dans ce cas de déclarer le document actif modifié.

Ce petit exemple est à télécharger là :
http://cjoint.com/?eguz0p4vVG
(lien actif 21 jours)
Ce modèle 'Globale macro.dot' doit être utilisé comme
un modèle global, pas comme un modèle de document, donc
à charger avec Outils / Modèles et compléments / Ajouter
ou automatiquement dans le dossier de démarrage

A+ les AMIS macroteurs :-)

Anacoluthe
« Rien de tel que des amis à la maison
pour enlever les araignées du plafond. »
- Philippe OBRECHT



'JièL Goubert' nous a écrit ...
Bonjoir(c) Geo

Le 02/04/2006 22:58 vous avez écrit ceci :
Restent donc deux voies :
1- modifier les millions de modèles normal.dot


Maintenant que j'ai expliqué que c'était mieux qu'il ne soit plus
partagés et en lecture seule, je crois que j'aurais du mal à dire que
pour faire une opération de maintenance il faut TOUS les modifier :-s
glurps

2- ou modifier les milliards de documents,
avec deux variantes :
2-a : attacher à chaque document un modèle qui contient la fameuse
AutoOpen


Ben si j'attache les milliards de doc au bonSSSSSS modèles, plus besoin
d'AutoOpen
C'est vraiment dommage que l'autoopen ne fonctionne pas comme je le
voudrais :-(

(mais comment fait-on pour le nouveaux documents?)


Pour les nouveaux pas de soucis, il utilisent le dossier des nouveaux
modèles. C'est la récupération d'un ancien doc basé sur un ancien modèle
qui em***bete

2-b : Attacher le bon modèle au document, encore qu'il puisse être
ouvert sur deux versions de Word ?


Nan, pas de partage. Ceux qui bosse encore sur 97 ben y restent dans
leurs coins, na ! ;-)

La solution la plus radicale est de dire que Word 97 a une énorme
fuite et comme les fils du réseau passent à côté des machines à café,
la fuite va rendre le café définitivement et inexorablement imbuvable
si on continue à l'utiliser.


;-)))))))))
Il reste quand même une solution 3, mais je ne connais pas tous les
impacts qu'elle peut avoir : supprimer les millions de dossiers qui
contiennent les modèles 97. Mais cette solution ne peut être envisagé
que quand il n'y aura plus d'Office 97 dans la maison... j'espère ça
pour la fin de l'année, donc en attendant ben... je suis un peu coincé :-s

Sur ce, il y a école demain, donc on réfléchira plus tard.


Vi, merci pour ton analyse, c'était très clair




Avatar
JièL Goubert
Bonjoir(c) Anacoluthe

Bonjour JièL , Geo & C° !

Pardonnez mon retard de participation à cette ficelle ;-)


Limite hors jeux, mébon, tu te rattrapes bien ;-)))))))

Il y a un moyen d'exécuter un code global sur tout document
sans placer ce code dans Normal.dot


C'est exactement ce que je voulais lire ! ;-)

Il faut utiliser l'événement d' /application/ DocumentChange
qui survient chaque fois qu'un nouveau document est actif
qu'il soit créé ou qu'il soit ouvert dans Word.


Parfait, d'après mes tests c'est nickel, faut juste que je me méfie des
modèles et de tout ce qui n'est pas un .doc en fait

Un événement d'application c'est toujours un peu difficile
à comprendre et à fabriquer parce qu'il faut faire un module de
classe et qu'il faut l'initialiser dans un autoexec.


Comme tu dis, c'est difficile à comprendre, mais avec un exemple (qui
fonctionne !!!) comme le tien, c'est de suite nettement plus simple

Pour JièL on peut imaginer à partir de là que cette macro
change le modèle attaché WD97 au modèle WD2003 sans rien dire.


C'est S U P E R G E N I A L, t'as bien fait de revenir, j'étais un peu
coincé avec ça...

Ne pas oublier dans ce cas de déclarer le document actif modifié.


Pas compris, faut que je fé koi la ?

ou automatiquement dans le dossier de démarrage


Vi, c'est bien la que je compte la placer

A+ les AMIS macroteurs :-)


La tu te fais des AMIS amis ;-)))))

Merci, je vais réutiliser ça et compléter... j'ai pas encore trouvé la
propriété kivabien pour modifier le chemin du modèle, mais bon, la nuit
porte conseil comme on dit ;-))))))

encore merci, c'est génial les forums...

« Rien de tel que des amis à la maison
pour enlever les araignées du plafond. »
- Philippe OBRECHT


T'es sur qu'il en avait pas une d'araignée à son plafond lui ? ;-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Avatar
Anacoluthe
Bonjour !

'JièL Goubert' nous a écrit ...
Ne pas oublier dans ce cas de déclarer le document actif modifié.
Pas compris, faut que je fé koi la ?



Ben juste à mettre
ActiveDocument.Saved = False
ce qui va demander à l'utilisateur d'enregistrer le document
même s'il ne fait que l'ouvrir sans le modifier, car je ne suis
pas certain qu'en modifiant par macro le modèle attaché de ton
document, Word considère ton document comme déjà modifié (à voir).

A+

Anacoluthe
« Rien de tel que des amis à la maison
pour enlever les araignées du plafond. »
- Philippe OBRECHT

T'es sur qu'il en avait pas une d'araignée à son plafond lui ? ;-)


:-D


1 2