Exécutions de macros et transferts de variables entre projets (documents) Word d

cs_PLeroux Messages postés 1 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 26 août 2008 - 26 août 2008 à 16:49
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 26 août 2008 à 16:57
Bonjour,

Je souhaite proposer quelques fichiers Ms-Word (2002) en partage à mes collègues, qui serviront à créer automatiquement les documents-types (Fax, Lettre, ...) avec leurs propres coordonnées en tant qu'émetteur.

Nous venons de changer de charte graphique et c'est l'occasion de proposer une solution de type (modeste) "bureau électronique" qui leur évitera de dédupliquer les modèles en autant de personnes. Le principe est de partage le même modèle de fax, le même modèle de lettre etc entre tous les collaborateurs.

Ne trouvant rien sur les utilisations de modèles Word en Workgroup (autre que les gestions de révision qui ne sont pas dans le sujet ici), je suis parti d'une idée que j'ai appliquée (voir macro plus bas) et qui fonctionne mais qui ne me donne pas encore pleine satisfaction.
 Il s'agit de proposer un dossier dans lequel se trouvent des documents (.doc) contenant des champs de fusion liés à une liste Excel des coordonnées de mes collègues. Ces documents, par exemple "Créer ma lettre.doc", "Créer mon fax.doc" etc permettent de créer un nouveau document portant les coordonnées de l'utilisateur : "Sauter si [UserInitials] de Options/ Utilisateur est différent l'occurence UserInitials dans le fichier Excel des coordonnées".

Pour que cette solution soit vraiment opérationnelle, il faut
- 1) Automatiser la fusion = > j'ai créé la même macro AutoOpen (environ une page de code) dans chaque document de type "Créer ma lettre.doc". Ainsi l'utilisateur qui ouvre "Créer ma lettre.doc" voit, après l'exécution automatique de 2 secondes de la macro de fusion automatique - qu'il n'a pas eu besoin de connaitre ni d'exécuter lui-même - un nouveau document résultat directement exploitable, qui porte ses coordonnées (son  adresse en tant qu'émetteur, sa fonction, ....). Si tant es que son entrée existe dans le fichier Excel des adresses des collaborateurs de l'entreprise, ou du service. Il n'a plus qu'à imprimer ou enregistrer ce nouveau document Word résultat de fusion.
- 2) "Nettoyer l'environnement après exécution de la fusion. En particulier fermer "Créer ma lettre.doc" pour ne laisser affiché que le document résultat.

Voici la procédure utilisée :

Sub AutoOpen()


' AutoOpen Macro
' Macro enregistrée le 21/08/2008 par PLEROUX
' Cette macro AutoOpen ( =autoexécutable à l'ouverture du document)
' pourra être copiée telle que dans tous les modèles de courrier de workgroup

' Initialisation de variables
  CurrDocumentName = ActiveDocument.Name ' Enregistrement du nom du document actif
  ' MsgBox CurrModelName
 
' Désactive les affichages de messages
    Application.DisplayAlerts = False


' Réalise la fusion de document
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With


' Ferme le document modèle
    Windows(CurrDocumentName).Activate
    ActiveDocument.Saved = True ' N'enregistre pas les modifications du document
    ActiveDocument.ActiveWindow.Close

' Réactive les affichages de messages
    Application.DisplayAlerts = True


End Sub

Pour aller plus loin, et en particulier rendre cette petite application maintenable et évolutive, je voudrais isoler et déplacer cette procédure, qui est toujours la même pour les documents "Créer ma lettre.doc", "Créer mon fax.doc", dans la macro d'un document Word unique "ModulesFusionAuto.doc". Ainsi, toute évolution de la (des)  procédure serait réalisée dans ce document "de procédures" et non dans chaque document "Créer ma lettre.doc", ...  les documents "Créer ma lettre.doc" ne contiendraient qu'une procédure d'appe dans AutoOpen qui ... lance l'exécution de la procédure principale, positionnée dans "ModulesFusionAuto.doc".

Malhereusement - d'où cette question sur le forum - je me heurte à deux difficultés (je ne suis pas un expert VBA) :
- 1) il faut que je puisse faire appel à la procédure de "ModulesFusionAuto.doc" depuis "Créer ma lettre.doc". quelques tentatives Application.run, avec différentes syntaxes, ont échoué, mais je ne désespère pas.
- 2) il faut que je puisse transmettre certaines variables de la procédure de "Créer ma lettre.doc" à la procédure de "ModulesFusionAuto.doc". Par exemple la variable qui stocke le nom "Créer ma lettre.doc" lors de son ouverture (AutoOpen), pour que le module de "ModulesFusionAuto.doc"  puisse fermer "Créer ma lettre.doc" en fin de traitement (correspond à remarque n° -2) plus haut). de Ce devrait être simple puisqu'on reste dans un environnement d'exécution Word. Et pourtant impossible de passer ces variables.

Si vous avez des idées simples (je ne déploierai pas cette solution si elle doit faire appel à de nombreuses lignes de code, que nous ne pourrions pas maintenir par la suite).
Je souhaite conserver les points clés de la philosophie actuelle, seuls garants à mon sens d'un caractère exploitable sur la durée :
. Les utilisateurs n'ont qu'à ouvrir les documents "modèles" comme  Créer ma lettre.doc", sans se poser de question
. la (les) procédures restent simples (quelques lignes) et identiques pour tous les documents.

Merci d'avance pour vos idées.
Bien entendu, si vous connaissez un autre moyen plus simple et aussi efficace pour traiter ce sujet, je suis preneur et prêt à "jeter ce travail aux orties".

1 réponse

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 août 2008 à 16:57
Salut,
Tu aurais du continuer ton premier post plutot que de REPOSTER (ENCORE)

Tu en est déjà à trois posts.... en moins d'une heure. attention tu va te faire taper sur les doigts.

@+: Ju£i€n
Pensez: Réponse acceptée
0
Rejoignez-nous