VBA Word - Mettre en gras certains mots selon une liste
Résolu
Skt44
-
Skt44 Messages postés 2 Statut Membre -
Skt44 Messages postés 2 Statut Membre -
Bonjour,
Je souhaite réaliser une macro qui met dans un document WORD certains mots en gras selon une liste.
J'ai réussi uniquement à le faire pour un mot spécifique "Bold".
Je souhaiterais le faire pour une liste plus grande de mots et qui varie d'un texte à un autre. Comment faire ?
Je vous remercie
""Sub Macro4()
'
' Macro2 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Bold"
.Replacement.Text = "Bold"
.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
Je souhaite réaliser une macro qui met dans un document WORD certains mots en gras selon une liste.
J'ai réussi uniquement à le faire pour un mot spécifique "Bold".
Je souhaiterais le faire pour une liste plus grande de mots et qui varie d'un texte à un autre. Comment faire ?
Je vous remercie
""Sub Macro4()
'
' Macro2 Macro
'
'
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "Bold"
.Replacement.Text = "Bold"
.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
A voir également:
- Vba mettre en gras
- Mettre en gras sur whatsapp - Guide
- Excel compter cellule couleur sans vba - Guide
- Raccourci gras word - Guide
- Mettre en gras sur indesign - Forum InDesign
- Vba attendre 1 seconde ✓ - Forum VB / VBA
13 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
Quand tu écris "qui varie d'un texte à un autre", veux tu dire "qui varie d'un document à un autre"?
Tu as donc une liste de noms de documents, et, pour chaque document, une liste de mots?
As-tu l'intention d'avoir une macro par document?
Quand tu écris "qui varie d'un texte à un autre", veux tu dire "qui varie d'un document à un autre"?
Tu as donc une liste de noms de documents, et, pour chaque document, une liste de mots?
As-tu l'intention d'avoir une macro par document?
Hello,
Yes, ce sont des textes de 2000 mots ou plus et la liste varie pour chaque document. J'imaginais une macro qui s'adapte mais je ne sais pas si c'est possible
Yes, ce sont des textes de 2000 mots ou plus et la liste varie pour chaque document. J'imaginais une macro qui s'adapte mais je ne sais pas si c'est possible
Quand tu écris "texte", est-ce équivalent à document? Plus clair de ne pas changer de vocabulaire.
Ce ne sera possible que si tu décris ce que tu souhaites.
Comment envisages-tu d'utiliser cette macro?
Elle serait dans un document unique et elle traiterait d'autres documents? Lesquels, quand?
Comme souhaites-tu que cela se passe?
Ce ne sera possible que si tu décris ce que tu souhaites.
Comment envisages-tu d'utiliser cette macro?
Elle serait dans un document unique et elle traiterait d'autres documents? Lesquels, quand?
Comme souhaites-tu que cela se passe?
Effectivement pour moi texte = document dans mon esprit.
Je ne pourrais pas vous répondre sur l'utilisation, cela va dépendre de ce qui est possible de faire. Je peux m'adapter .
Enfaite je souhaite gagner du temps et automatiser une tâche répétitive. Actuellement je dois faire pour chaque document, mettre en gras une liste d'une douzaine de mots dans tous le document. C'est assez chronophage
Je ne pourrais pas vous répondre sur l'utilisation, cela va dépendre de ce qui est possible de faire. Je peux m'adapter .
Enfaite je souhaite gagner du temps et automatiser une tâche répétitive. Actuellement je dois faire pour chaque document, mettre en gras une liste d'une douzaine de mots dans tous le document. C'est assez chronophage
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'imaginais:
1- J'ouvre mon document (avec mon texte)
2- J'ajoute la liste des mots dans mon document (ou dans un excel à côté)
3- J'active la Macro depuis mon word
4- Les mots de ma liste passe en gras
1- J'ouvre mon document (avec mon texte)
2- J'ajoute la liste des mots dans mon document (ou dans un excel à côté)
3- J'active la Macro depuis mon word
4- Les mots de ma liste passe en gras
mon document, et mon word, c'est la même chose?
la macro est déjà présente dans le document?
tu travailles toujours avec le même document?
tu utilises plusieurs fois la liste des mots?
où cette liste est préparée?
si tu as plusieurs listes, comment choisis-tu laquelle?
un exemple:
la macro est déjà présente dans le document?
tu travailles toujours avec le même document?
tu utilises plusieurs fois la liste des mots?
où cette liste est préparée?
si tu as plusieurs listes, comment choisis-tu laquelle?
un exemple:
sub macro4()
Dim mots() As Variant, mot
mots = Array("Bold", "unautremot", "encoreunautremot")
For Each mot In mots
call engraisse(mot)
Next mot
end sub
private Sub engraisse(unmot as string)
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = unmot
.Replacement.Text = unmot
.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
- mon document, et mon word, c'est la même chose? Non
- la macro est déjà présente dans le document? Non
- tu travailles toujours avec le même document? Non
- tu utilises plusieurs fois la liste des mots? Une liste différente à chaque fois
- où cette liste est préparée? Excel généralement
- si tu as plusieurs listes, comment choisis-tu laquelle? Une liste correspond à un texte
- la macro est déjà présente dans le document? Non
- tu travailles toujours avec le même document? Non
- tu utilises plusieurs fois la liste des mots? Une liste différente à chaque fois
- où cette liste est préparée? Excel généralement
- si tu as plusieurs listes, comment choisis-tu laquelle? Une liste correspond à un texte
Tout à fait, une document à la fois et en fonction du titre du document j'associe la bonne liste de mots
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
Je suggère de faire ainsi:
- avoir une macro dans un document Word
- quand cette macro est exécutée, elle va examiner tous les documents ouverts, et, si le nom du document est dans une liste de documents, elle va mettre en gras une liste de mots.
- ces deux listes pourraient être extraites d'un document Excel.
Avant d'aller plus loin, j'ai fait un petit prototype, qui n'utilise pas encore de listes, mais où le nom du document à modifier, ainsi que la liste des mots, est dans le code de la macro.
Peux-tu tester cela, et indiquer si cela va dans la bonne direction?
- avoir une macro dans un document Word
- quand cette macro est exécutée, elle va examiner tous les documents ouverts, et, si le nom du document est dans une liste de documents, elle va mettre en gras une liste de mots.
- ces deux listes pourraient être extraites d'un document Excel.
Avant d'aller plus loin, j'ai fait un petit prototype, qui n'utilise pas encore de listes, mais où le nom du document à modifier, ainsi que la liste des mots, est dans le code de la macro.
Peux-tu tester cela, et indiquer si cela va dans la bonne direction?
Option Explicit
Private Sub browsedocs()
Dim wDoc As Document
For Each wDoc In Application.Documents
If wDoc.Name = "testupd.docx" Then
Call undoc(wDoc, "Bold,unautremot,encoreunautremot")
End If
Next wDoc
End Sub
Private Sub undoc(doc As Document, lesmots As String)
Dim mots As Variant, mot, smot As String
mots = Split(lesmots, ",")
Dim r As Range
Set r = doc.Range
r.WholeStory
For Each mot In mots
smot = mot
Call engraisse(r, smot)
Next mot
End Sub
Private Sub engraisse(r As Range, unmot As String)
With r.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Bold = True
.Text = unmot
.Replacement.Text = unmot
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
Private Sub engraisseok(doc As Document, unmot As String)
doc.Activate
Selection.WholeStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Font.Bold = True
.Text = unmot
.Replacement.Text = unmot
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
Pour aller chercher les noms dans Excel:
- créer un fichier excel (leslistes.xlsx) dans le même répertoire que le document avec la macro
- dans le fichier excel, dans une feuille nommée "list", avoir une liste de noms de documents, à partir de A2, et, à coté (B2), une liste avec les mots à chercher (dans une cellule, tout les mots, séparés par une virgule. Donc une ligne par document candidat.
- dans l'éditeur VBA de Word, où il y a la macro, ajouter "Microsoft Excel ... Object Library" dans les références
- remplacer la sub browsedocs par ceci:
- créer un fichier excel (leslistes.xlsx) dans le même répertoire que le document avec la macro
- dans le fichier excel, dans une feuille nommée "list", avoir une liste de noms de documents, à partir de A2, et, à coté (B2), une liste avec les mots à chercher (dans une cellule, tout les mots, séparés par une virgule. Donc une ligne par document candidat.
- dans l'éditeur VBA de Word, où il y a la macro, ajouter "Microsoft Excel ... Object Library" dans les références
- remplacer la sub browsedocs par ceci:
Sub browsedocs()
Dim wDoc As Document, wb As Excel.Workbook, nomdoc As Excel.Range, ws As Excel.Worksheet
Set wb = Excel.Workbooks.Open(ActiveDocument.Path + "/leslistes.xlsx")
Set ws = wb.Sheets("list")
For Each wDoc In Application.Documents
Set nomdoc = ws.Cells(2, 1)
Do While nomdoc <> ""
If wDoc.Name = nomdoc Then
Call undoc(wDoc, nomdoc.Offset(, 1).Value)
Exit Do
End If
Set nomdoc = nomdoc.Offset(1)
Loop
Next wDoc
wb.Close
End Sub
merci beaucoup pour ces éléments,
Je viens de faire les modifications mais j'ai une erreur "erreur de compilation : type défini par l'utilisateur non défini"
Cela souligne "Sub browsedocs()"
Je viens de faire les modifications mais j'ai une erreur "erreur de compilation : type défini par l'utilisateur non défini"
Cela souligne "Sub browsedocs()"