Macro demande amélioration : recherche et modifications formats mots clés

Signaler
Messages postés
58
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
16 novembre 2020
-
Messages postés
16739
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
16 novembre 2020
-
Bonjour, Je dois analyser pour mes recherches des rapports convertis en word très longs, et je fais des recherches par mots clés.
Par exemple sur un fichier WORD, j’ai recherché en mettre en gras et en rouge dans le texte les mots « femme», « fille », « santé », «éducation» .

Je fais une macro enregistrée sous : "femmefilleéducationsantéRouge" (code ci dessous) :

Enregistrer macro

Accueil/rechercher/j’écris femme/ok/remplacer : dans la fenêtre qui s’ouvre, je remplace « femme» par «femme»/plus/format/police : en gras et en rouge dans la fenêtre/ok/remplacer tout> une msgbox me dit qu’il a effectué x remplacement/fermer

rechercher/j’écris fille , puis … mêmes manœuvres et ainsi de suite pour chaque mot jusqu’à la fin/Arrêter l’enregistrement.

Ma macro s’appelle « femmefilleéducationsantéRouge», et elle fonctionne en cliquant sur exécuter. Je vois bien sur le code VBA les répétitions.

Mais mes pb :

1 c’est que c’est long (j’ai parfois des macro de 25 à 30 mots selon le thème de recherche),

2 si je fais une erreur de saisie ça me crée parfois un bug à l’exécution et je suis obligé de tout recommencer,

et 3 je ne peux pas revenir en arrière, corriger, enlever ou ajouter un autre mot une fois que la macro est enregistrée.

Je voudrais que l’une ou l’un d’entre vous qui s’y connait en VBA, me rectifie, refasse la macro ci-dessous, avec tous les mots clés sur la même ligne de code, de façon à ce que je puisse reproduire ce modèle de macro, et surtout pouvoir revenir sur cette ligne pour corriger ou ajouter d’autres mots.

Merci de m’aider. Cordialement.

Sub femmefilleéducationsantéROUGE()
'
' femmefilleéducationsantéROUGE Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Bold = True
        .Color = wdColorRed
    End With
    With Selection.Find
        .Text = "femme"
        .Replacement.Text = "femme"
        .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
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Bold = True
        .Color = wdColorRed
    End With
    With Selection.Find
        .Text = "fille"
        .Replacement.Text = "fille"
        .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
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Bold = True
        .Color = wdColorRed
    End With
    With Selection.Find
        .Text = "éducation"
        .Replacement.Text = "éducation"
        .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
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find.Replacement.Font
        .Bold = True
        .Color = wdColorRed
    End With
    With Selection.Find
        .Text = "santé"
        .Replacement.Text = "santé"
        .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

7 réponses

Messages postés
16739
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
16 novembre 2020
9 932
Bonjour,

Effectivement cette macro n'est pas au top !

J'ai créé un exemple modèle qui fonctionne avec un userform, ça me paraît plus fonctionnel :
https://www.cjoint.com/c/JJFoK1jBWEH

J'ai prévu pour chercher 6 occurrences, mais tu peux en ajouter ou lancer le formulaire en plusieurs fois.

m@rina
Messages postés
58
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
16 novembre 2020
2
Merci Marina, mais je n'ouvre rien en cliquant sur la flèche : message de sécurité macro alors que mes autres macro sont fonctionnelles. As tu une explication ? Ou un autre moyen de me la communiquer ? Si je peux utiliser ta solution ça me tirerait une sacré épine du pied .
Messages postés
58
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
16 novembre 2020
2
Mes excuses Marina, je me suis planté, ça marche super bien. Sans trop en demander pourrais-tu me faire un user form plus long avec un vingtaine de cases ? Merci beaucoup
Messages postés
16739
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
16 novembre 2020
9 932
Bonjour,

Tu regardes la macro en prenant plutôt celle que j'ai refaite correctement et que tu peux télécharger ici avec les explications :
http://faqword.com/index.php/word/mise-en-forme/1182-comment-en-une-seule-operation-appliquer-un-format-particulier-a-plusieurs-expressions-dissemines-dans-un-document

Tu crées un style de caractère rouge et gras.
Puis dans le formulaire, tu ajoutes des zones de texte, tu regardes la macro, et tu complètes avec tes nouvelles zones.

Il y a juste à modifier cette partie-là :
mot1 = Me.TextBox1
mot2 = Me.TextBox2
mot3 = Me.TextBox3
mot4 = Me.TextBox4
mot5 = Me.TextBox5
mot6 = Me.TextBox6
'<underline>compléter avec les autres mots</underline>

mots = Array(mot1, mot2, mot3, mot4, mot5, mot6, <underline>compléter</underline>)

If mot1 = "" And mot2 = "" And mot3 = "" And mot4 = "" And mot5 = "" And mot6 = "" <underline>' à compléter</underline>


A noter que cette dernière ligne n'est pas vraiment obligatoire pour toi... C'est juste au cas où tu cliques sur OK sans avoir saisi un seul mot...

m@rina


Messages postés
58
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
16 novembre 2020
2
OK merci encore Marina.
Petite question pour les couleurs de police que j’aurais éventuellement à modifier. Tu écris logiquement :

   With myrange.Find.Replacement.Font
        .Bold = True > ça je comprends : gras
        .Color = wdColorRed > Red pour rouge d’accord, mais quelle nomenclature utiliser dans cette macro si je veux changer de couleur ? Parfois il y a des codes couleurs RVB RGB… suffit-il chez toi de traduire la couleur en anglais ?
    End With


Cordialement
Messages postés
16739
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
16 novembre 2020
9 932
A priori tu n'as pas lu ce que j'ai écrit... J'ai écrit : "faire un style de caractères"...
et là, tu fais ce que tu veux avec le rouge !

m@rina
Messages postés
58
Date d'inscription
samedi 10 mai 2008
Statut
Membre
Dernière intervention
16 novembre 2020
2
Mes excuses Marina je reprends la main à peine aujourd’hui (activités bénévoles liées à quelques activités d’aide aux soignants ARS, et la préparation d'une mission de formation à l'étranger).

Merci pour ta rectification effectivement je n’avais pas lu.

Lorsque je clique sur ton lien, j’ouvre bien un fichier word très long, je clique sur la flèche et apparaît l’user form. J’y entre mes mots, je lance, tout fonctionne impeccablement.

Mais maintenant ta macro écrite, où tu corriges la mienne, et pour laquelle tu m’as indiqué comment rajouter des cases sur l’user form, comment est ce que je fais pour l’appliquer à un texte word à moi ? J’ai bien essayé sur ton fichier téléchargé : développeur/visual basic pour la récupérer et la coller sur un doc à moi, : pas moyen. J’ai ouvert un doc à moi en essayant toujours développeur/visual basic ou même macro espérant la coller, pas moyen non plus.

Je ne sais pas entrer une macro toute faite. Merci de me dire comment et excuse ma nullité en VBA et la naïveté de mes questions.
Messages postés
16739
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
16 novembre 2020
9 932
Bonjour,

Il suffit d'exporter le Userform et de le réimporter dans ton document :
Dans le VBE, clic droit sur le Userform => Exporter un fichier
Puis toujours dan sle VBE, clic droit sur ton document => Importer un fichier

et tu importes le fichier à extension FRM.

Il y a peut être aussi une macro dans un module normal pour lancer le userform, mais c'est une macro de 2 lignes.

m@rina