Bonjour à tous.
Je vous présente ici un problème que je ne parviens pas à résoudre vu mon niveau de débutant en VBA. J'ai préparé une macro qui effectue un balisage via des opérations de chercher/remplacer en nombre très important dans des documents Word pouvant atteindre plusieurs centaines de pages... Sur PC, la macro fonctionne presque correctement, un message préviens que les ressources mémoires étant insuffisantes, aucune annulation ne pourra être effectuée, mais la macro continue son travail... Sur Mac, une erreur se produit et l'exécution de ma macro est interrompue... (je ne pense pas que la RAM soit en cause >> PC 1,66Ghz, 1Go Ram - MAC 2x2,66 Ghz avec 5Go de ram). Sans même parler du fonctionnement de VBA qui est très différent entre la version PC (WORD 2003) et mac (Word 2004), je pense que mes macros sont très lourdes et pourraient être optimisées...
Cela fait une semaine que j'arpente les fichiers d'aide, les forums, je n'ai pour le moment pas de solution...
Voici le code de mes Macros :
En premier, je balise le texte en italique...
Code :
- Sub macro1()
- Selection.Find.ClearFormatting
- Selection.Find.Replacement.ClearFormatting
- Selection.Find.Font.Italic = True
- Selection.Find.Font.Bold = False
- With Selection.Find
- .Text = ""
- .Replacement.Text = "#I#^&#/I#"
- .Forward = True
- .Wrap = wdFindContinue
- .Format = True
- .MatchCase = False
- .MatchWholeWord = False
- .MatchWildcards = False
- .MatchSoundsLike = False
- .MatchAllWordForms = False
- End With
- Selection.Find.Execute Replace:=wdReplaceAll
- End Sub
|
Ensuite, j'applique un style sur le texte balisé en me servant de ces balises pour repérer le texte à baliser...
Code :
- Sub Macro2()
- '
- Selection.Find.Execute
- Selection.Find.ClearFormatting
- Selection.Find.Replacement.ClearFormatting
- Selection.Find.Replacement.Style = ActiveDocument.Styles("MonStyleItalic" )
- With Selection.Find
- .Text = "#I#*#/I#"
- .Replacement.Text = "^&"
- .Forward = True
- .Wrap = wdFindContinue
- .Format = True
- .MatchCase = False
- .MatchWholeWord = False
- .MatchWildcards = True
- .MatchSoundsLike = False
- .MatchAllWordForms = False
- End With
- Selection.Find.Execute Replace:=wdReplaceAll
- End Sub
|
Enfin, je supprime les balises...
Code :
- Sub macro3()
- Selection.Find.ClearFormatting
- Selection.Find.Replacement.ClearFormatting
- With Selection.Find
- .Text = "#I#"
- .Replacement.Text = ""
- .Forward = True
- .Wrap = wdFindContinue
- .Format = True
- .MatchCase = False
- .MatchWholeWord = False
- .MatchWildcards = False
- .MatchSoundsLike = False
- .MatchAllWordForms = False
- End With
- Selection.Find.Execute Replace:=wdReplaceAll
- End Sub
- Sub macro4()
- Selection.Find.ClearFormatting
- Selection.Find.Replacement.ClearFormatting
- With Selection.Find
- .Text = "#/I#"
- .Replacement.Text = ""
- .Forward = True
- .Wrap = wdFindContinue
- .Format = True
- .MatchCase = False
- .MatchWholeWord = False
- .MatchWildcards = False
- .MatchSoundsLike = False
- .MatchAllWordForms = False
- End With
- Selection.Find.Execute Replace:=wdReplaceAll
- End Sub
|
Vous voyez ce que je veux dire ?
Je cherche également un moyen de rechercher le texte "NON NOIR" au sein de mon document de manière à sélectionner tout le texte de couleur (peu importe la couleur) SAUF le NOIR pour lui appliquer un traitement.
Une dernière chose, je cherche un moyen fiable pour supprimer les styles non utilisés dans mon document. J'ai trouvé cette macro, mais elle fonctionne de façon sporadique, un coup ça marche, un coup non... "oStyle" génère parfois des erreurs, sur PC comme sur Mac...
Code :
- Sub NettoyerStyles()
- ' Macro écrite par anacoluthe
- ' Cette Macro supprime tous les styles non utilisés dans le document
- For Each oStyle In ActiveDocument.Styles
- If Not oStyle.BuiltIn Then
- With ActiveDocument.Content
- .Find.ClearFormatting
- .Find.Style = ActiveDocument.Styles(oStyle)
- If Not .Find.Execute() Then
- oStyle.Delete
- End If
- End With
- End If
- Next
- MsgBox "Les styles inutilisés ont été supprimés !"
- End Sub
|
GRAND MERCI à tous ceux et celles qui auront la gentillesse de me répondre...