VBA Word - Mettre en gras certains mots selon une liste
Résolu
Skt44
-
Skt44 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Skt44 Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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()"