C'est mon premier post sur cette partie du forum de macro word, même si j'ai souvent participé au forum excel.
Mon problème est le suivant (note : je suis nulle en macro de Word).
J'ai une macro très très vieille sous MSWord 2000 qui fonctionne (j'ai vérifié).
Je voudrais la faire fonctionner sous MSWord 2007, voire la rapidifier en plus.
Donc j'ai fait un copié-collé de la vieille macro dans mon fichier sous docx et je l'ai fait tourner.
Mais cela buggue tout de suite en surlignant en jaune le code:
Code:
.Text = listeMots.Item(i)
Je joins les 2 fichiers en docx pour test.
J'ai aussi quelques détails à améliorer comme la suppression (puisque les 2 fichiers sont ouverts) du code parasite (si possible):
Et je voudrais aussi adapter la macro pour que les codes ne soient pas séparés par la marque de paragraphe (pi), mais par le caractère | (sans espace avant et après).
Enfin j'ai aussi quelques instructions à ajouter qui existent sous word 2000 dans d'autres macros et que je voudrais ajouter à la suite de la macro présente pour que le processus se déroule en une fois de A à Z.
Mais cela je le préciserai dans une 2ème étape.
Pouvez-vous m'aider à fixer le problème de cette 1ère étape?
Merci de ta gentillesse.
Ce n’est pas une usine à gaz ou en tout cas si cela l’était ce serait bien plus simple qu’avant quand je traitais plusieurs milliers de fichiers un par un.
Aujourd’hui j’ai une seul fichier certes gros (5 Mo).
Je reprends ci-après la macro de formatage du titre (maintenant c'est $0$ et $1$).
Si j’active la ligne de centrage et que je remplace le code :
.Replacement.Text = ""
Par
.Replacement.Text = "^p"
après .Text = "$0$*$1$"
Le texte de mon titre disparaît avec la macro, il est remplacé par un « pi » qui lui est centré !
Enfin, j’aurais besoin de savoir où je place les 2 instructions type Application.ScreenUpdating=False,
Au début (et à la fin) de toute la macro globale (j’ai juxtaposé toutes les petites macros de formattage) ?
Ou bien avant chaque « with » et après chaque « end with »
Ou …
J'ai l'impression que je vais "tourner chèvre" avec tes '$2$' qui deviennent des '$0$' (d'autant que je travaille toujours sur le premier document qui contient d'autres '$0$' qui, eux, ne correspondent pas à des titres!)
Bref, je ne suis pas arrivé à reproduire ton souci mais ce qui suit me semble fonctionner (toujours sur l'ancien document!). J'ai ajouté les "Application.ScreenUpdating=..." (tout au début et tout à la fin, comme tu le verras)
VB:
Sub MFTitres()
Application.ScreenUpdating = False
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Size = 20
Selection.Find.Replacement.Font.Bold = True
Selection.Find.Replacement.Font.Italic = True
Selection.Find.Replacement.Font.UnderlineColor = wdColorAutomatic
Selection.Find.Replacement.Font.Underline = True
Selection.Find.Replacement.Font.AllCaps = True
With Selection.Find
.Text = "$0$*$1$"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
With Selection.Find.Font
.Size = 20
.Bold = True
.Italic = True
End With
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "$0$"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
With Selection.Find.Font
.Size = 20
.Bold = True
.Italic = True
End With
Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphCenter
With Selection.Find
.Text = "$1$"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Application.ScreenUpdating = True
End Sub
Merci pour ta gentillesse, et en plus pour ta patience.
La rationalité et moi cela fait 2, peut-être même 3 !
Maintenant cela marche super bien et tout est résolu.
1000 Mercis
Steph
PS: Je marque le fil comme résolu (et si je peux, je modifierai l’en-tête car ces macros (codes italique et formattages divers) seront vraiment utiles, je pense, à plein d’autres… grâce à toi