Macro Word 2010 / Autoexec replace

Macro Word 2010 / Autoexec replace - VB/VBA/VBS - Programmation

Marsh Posté le 23-01-2013 à 18:33:23    

Bonjour,
 
Malgré mes recherches je n'arrive pas au bout de mon objectif...
Je cherche à ce que, dès l'ouverture du document, et dans tout le document dans son ensemble, une chaine soit remplacée par une autre (en l'occurence, "**" par "*   *" ).
 
C'est ma toute première macro, je manque d'expérience de base dans ce sujet.
 
Voici mon code :
 

Code :
  1. Sub AutoExec()
  2. '
  3. ' AutoExec Macro
  4. '
  5. '
  6. Call REMPLACE
  7. End Sub
  8. Sub REMPLACE()
  9. '
  10. ' REMPLACE Macro
  11. '
  12. '
  13.     Selection.WholeStory
  14.     Selection.Find.ClearFormatting
  15.     Selection.Find.Replacement.ClearFormatting
  16.     With Selection.Find
  17.         .Text = "**"
  18.         .Replacement.Text = "*   *"
  19.         .Forward = True
  20.         .Wrap = wdFindAsk
  21.         .Format = False
  22.         .MatchCase = False
  23.         .MatchWholeWord = False
  24.         .MatchWildcards = False
  25.         .MatchSoundsLike = False
  26.         .MatchAllWordForms = False
  27.     End With
  28.     Selection.Find.Execute Replace:=wdReplaceAll
  29. End Sub


 
Quand le parsing atteint "Selection.WholeStory" il ne comprend à priori pas la variable "Selection" (peut-être parce qu'à l'ouverture exacte du document et donc à l'éxécution de la macro, le curseur n'a pas encore été initialisé dans la page)...?
 
Je suis preneur de toute solution, merci beaucoup d'avance !
 
De plus, il s'agit d'un document de publipostage ouvert par un progiciel, et je souhaite que la macro s'éxécute sur les données après la fusion automatique (détail important mais si je peux déjà arriver à faire que la macro se lance au démarrage, c'est déjà un progrès)..!

Reply

Marsh Posté le 23-01-2013 à 18:33:23   

Reply

Marsh Posté le 23-01-2013 à 19:49:49    

 
              Je n'ai pas testé mais à la place de  Selection  (un peu idiot à l'ouverture d'un document),
              j'essaierais plutôt avec  ActiveDocument.Range  …
 

Reply

Marsh Posté le 23-01-2013 à 19:55:14    

 
              AutoExec  est plutôt obsolète !
 
              Cela fait 10 ans qu'il faut regarder du côté des évènements d'un document,
              du genre  Document_Open  dans le module  ThisDocument  …
 

Reply

Marsh Posté le 01-02-2013 à 14:54:35    

Désolé de ne répondre que maintenant, j'ai peu de temps à consacrer à ce point particulier donc je progresse en échelonnant mon temps.
 
En cherchant et en testant plsuieurs méthodes, ca fonctionne avec :
 

Code :
  1. Sub AutoOpen()
  2. '
  3. ' AutoOpen Macro
  4. '
  5. '
  6. With ActiveDocument.Content.Find
  7.     .Text = "**"
  8.     .Replacement.Text = "*   *"
  9.     .Execute Replace:=wdReplaceAll
  10. End With
  11. End Sub


 
En me placant la macro dans mon AutoOpen du document.
Ca marche très bien sur les données présentes dans le document, dès l'ouverture, je vois les données remplacées.
 
Par contre (niveau 2 de difficulté), il s'agit en fait de données fusionnées, j'aurai donc besoin de lancer automatiquement cette macro juste après la fusion. Y'a t'il un évènement qui puisse déterminer ce moment ?
 
En gros, c'est une edition fusionnée, Word s'ouvre en silencieux, fusionne, imprime et se ferme (mais ne s'ouvre jamais visuellement en conditions de prod).
 
Il ne me manque donc plus que l'étape "trouver l'évènement post-fusion".


Message édité par cfmreggae le 01-02-2013 à 14:57:21
Reply

Marsh Posté le 01-02-2013 à 15:15:43    

 
                Si la fusion se fait par VBA, il suffit juste d'ajouter le code en fin de celui concernant cette fusion,
                sinon je ne vois pas de solution …
 

Reply

Marsh Posté le 01-02-2013 à 15:52:41    

Je ne saurais dire, c'est un soft en hyperfile SQL qui pousse les données dans un TXT, ouvre l'état et fusionne.
 
J'ai vu certaines méthodes "AfterMerge" il faut surement que je creuse dans ce sens...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed