Mise en couleur de macro

jean60 - 4 sept. 2012 à 12:52
 jean60 - 6 sept. 2012 à 13:45
Bonjour

j'aurai voulu faire une macro en word qui a partir d'un listing de macro copié et collé sous word , me permette de mettre en forme automatiquement ce listing .
ligne commençant par sub surlignée en violet par exemple ainsi que end sub , les lignes de commentaire commençant par ' surlignées en vert ..etc

Sub miseenformemacro()
Dim parag As Paragraph
' on passe en revue tous les paragraphes
For Each parag In ActiveDocument.Paragraphs
' on supprime les espaces avant et apres chaque paragraphes
a = Trim(parag)
Next parag
End Sub

j'en suis à avoir une variable a qui contient un paragraphe sans espace devant ni derrière , mais impossible de remplacer le paragraphe trouvé avec les espaces, par a afin d'avoir un listing sans espace inutiles. suis je clair ? non explication plus rapide.
a trim ( coucou ) donc a(coucou) et je voudrais remplacer dans mon listing coucou par coucou .
ci dessous extrait d'un listing que j'essaye de mettre en forme .

...'on n'exploite qu'un fichier avec les bonnes valeurs on fusionne les deux fichiers dans 01.csv
...Windows("02.csv").Activate
...Range("A1").Select
...Selection.CurrentRegion.Select

les pont symbolisent les espaces que j'aimerai supprimer par trim
après il ne me restera plus qu'a tester par quoi commence le paragraphe pour savoir si je surligne ou pas et si oui avec quelle couleur .
mais ce sera la suite a condition d'arriver a remplacer mon paragraphe .

ce doit être tout bête mais je n'ai pas trouvé , quelqu'un peut il me dire la formule magique qui exaucera mon vœux ??

merci

10 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 sept. 2012 à 14:51
Salut

"mais impossible de remplacer le paragraphe trouvé avec les espaces, par a afin d'avoir un listing sans espace inutiles. suis je clair ?"
Si tu avais relu ton message avant de poster, tu aurais déjà la réponse à la question posée.

"je voudrais remplacer dans mon listing coucou par coucou"
En effet, c'est bête comme chou : Suffit de ne rien faire.

Si 'a' est une variable, change son nom, ça éclaircira les explications.

Voir la commande Replace.
Exemple de suppression des espaces multiples en simples :
Do While Instr(1, maVariable, "  ") > 0  ' 2 espaces dans le ""
    maVariable = Replace(maVariable, "  ", " ") ' 2 puis 1
Loop

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
4 sept. 2012 à 14:51
Bonjour

Il me semble que tu es sur la bonne voie boucle sur la collection des paragraphes

Pour remplacer un texte dans un paragraphe utilise la commande TypeText en la combinant avec Trim

Apprends aussi à utiliser les objets Range

Sinon, tu peux apprendre beaucoup avec les tutoriels
http://word.developpez.com/faq/
0
merci jack mais visiblement tu ne m'as pas compris
en effet a est une variable , comme je fais des essais et que j'espérais trouver seul ......... j'ai mis un truc a moi qui comprends a peu près ce que je veux faire
pour ce qui est de relire mon message , en fait avec mon exemple je pensais être clair le but du jeux étant d'enlever les espaces .
" coucou " n'est pas égal a "coucou"
et ma variable a étant égale a "coucou" mon but est de remplacer le paragraphe contenant " coucou " dans mon document Word par a qui est égal a "coucou" seulement je n'arrive pas a lui dire ca
suis je plus clair ? je peux essayer ta méthode mais avec la mienne je fais tout en 1 boucle
premier temps je supprime les espaces et tant que j'y suis si le (s) test (s) est/sont juste (s) je mets en couleur le paragraphe .
Pour loulou69
en excel VBA je sais que dans une boucle for each il faut utiliser activate au lieu de select pour sélectionner l'objet en cours , mais en Word ??
en fait il faut que je remplace mon paragraph du moment par a ma variable sans espace , et la je collectionne les messages d'erreur .
je vais chercher des renseignements sur typetext , et je reviendrais vers vous ne serais ce que pour vous donner la macro qui pourra être utile a une personne qui comme moi veut un standard dans ses listing de macro .
merci a vous deux , patience je cherche !!!!
0
Utilisateur anonyme
4 sept. 2012 à 17:39
Bonjour,


et ma variable a étant égale a "coucou" mon but est de remplacer le paragraphe contenant " coucou " dans mon document Word par a qui est égal a "coucou" seulement je n'arrive pas a lui dire ca


Tu vas dans la boîte de dialogue de recherche et remplacement de Word. Tu trouves la section des caractères spéciaux et tu remplaces l'espace par rien. Au besoin tu pars l'enregistreur de macros avant, si tu veux absolument une macro.

Pour le peinturage, tu te crées des styles idoines et tu les appliques.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
4 sept. 2012 à 21:22
"le but du jeux étant d'enlever les espaces"
(plus loin)
"ma variable a étant égale a "coucou" mon but est de remplacer le paragraphe contenant " coucou " dans mon document Word par a qui est égal a "coucou""
Tu comprends que ces deux phrases sont différentes et que te comprendre devient de plus en plus difficile.
Si tu as deux problèmes, expose-les l'un après l'autre, parce que là, avec tes explications, c'est difficile à cerner.

Donc, en d'autres mots, si " coucou " est trouvé dans un paragraphe, tu veux remplacer tout le paragraphe par "coucou".
-1- Il te faut donc énumérer chaque paragraphe de ton document.
Sais-tu le faire ?
    Dim oParagraphe As Paragraph
    For Each oParagraphe In ActiveDocument.Paragraphs
        ' ici le code qu'on ajoutera
    Next

-2- Ensuite, il faut rechercher " coucou " dans le texte de chaque paragraphe.
Une mise en application de Instr te répondra.
-3- Si tel est le cas, remplacer le paragraphe par le contenu de ta variable.
Le code à ajouter dans la boucle ci-dessus :
        If InStr(1, oParagraphe.Range, " coucou ", vbTextCompare) > 0 Then
            oParagraphe.Range = maVariable
        End If
0
on y arrive . je vais essayer d'être direct et simple.
on pose ..... = des espaces non voulus
je copie un listing de macro excel dans word , j'obtiens ( je ne mets pas tout).

.....'on n'exploite qu'un fichier avec les bonnes valeurs on fusionne les deux fichiers dans 01.csv
......Windows("02.csv").Activate
......Range("A1").Select
......Selection.CurrentRegion.Select
......Selection.Copy
......Windows("01.csv").Activate

alors que je voudrais

'on n'exploite qu'un fichier avec les bonnes valeurs on fusionne les deux fichiers dans 01.csv
Windows("02.csv").Activate
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Copy
Windows("01.csv").Activate

on a donc uniquement supprimé les espaces .

pour cela j'ai fait la macro suivante

Sub miseenformemacro()
Dim parag As Paragraph
' on passe en revue tous les paragraphes
For Each parag In ActiveDocument.Paragraphs
' on supprime les espaces avant et apres chaque paragraphes
parasansespace = Trim(parag)
Next parag
End Sub

remarque pour jack oui j'ai su faire une boucle qui passe en revue tous les paragraphes elle est au debut de ce message .
seul probleme j'obtiens bien dans la variable parasansespace mon paragraphe actif sans espace mais je n'arrive pas a remplacer automatiquement le paragraphe avec espace se trouvant dans mon listing par parasansespace pour avoir mon listing réécrit sans espace .

en VBA mais ca ne fonctionne pas sinon je ne serai pas là

parag.activate = parasansespace

que voudrait dire cette ligne ???
le paragraphe en cours de traitement dans la boucle a ce moment precis qui a des espaces , est enlevé et remplacé par la variable parasansespace qui est la même chose sans espace .

voila je n'en dis pas plus sur la suite de ma macro pour ne pas faire confusion , mais la je ne pense pas pouvoir être plus clair .


je vais essayer le code if instr(1,........... et vous dirais ce qu'il en est .

merci de votre aide .
0
Bon j'ai essayé le code et ca ne marche qu'une fois , le premier paragraphe si il a des espaces est remplacé par le paragraphe sans espace mais une fois l'echange fait , on ne change plus de paragraphe .
voila la macro
Sub miseenformemacro()
Dim parag As Paragraph
' on passe en revue tous les paragraphes
For Each parag In ActiveDocument.Paragraphs
' on supprime les espaces avant et apres chaque paragraphes
mavariable = Trim(parag)
If InStr(1, parag.Range, mavariable, 1) > 0 Then
parag.Range = mavariable
End If
Next parag
End Sub

en fait je pourrais même faire

Sub miseenformemacro()
Dim parag As Paragraph
' on passe en revue tous les paragraphes
For Each parag In ActiveDocument.Paragraphs
' on supprime les espaces avant et apres chaque paragraphes
mavariable = Trim(parag)
parag.Range = mavariable
Next parag
End Sub
mais les symptomes sont les memes une fois le paragraphe remplacé on avance plus dans la liste .
j'ai enlevé la ligne
parag.Range = mavariable
et la je passe tous les paragraphes en revue .

pourquoi une fois cette ligne executée ma boucle for each ne fonctionne plus ?? pourtant je passe bien a l'instruction next parag .

avez vous une idée ?

merci
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
6 sept. 2012 à 10:25
Bonjour

Je ne pourrais pas te l'expliquer, mais lorsque on modifie une collection, le pointeur de la collection d'une boucle for each revient au départ et n'avance plus

pour résoudre ce problème , n'ajoutant pas de paragraphe, il faut utiliser le tableau des paragraphes comme suit

Sub miseenformemacro()
' on passe en revue tous les paragraphes
Dim i As Long
For i = 1 To ActiveDocument.Paragraphs.Count
' on supprime les espaces avant et apres chaque paragraphes
ActiveDocument.Paragraphs(i).Range = Trim(ActiveDocument.Paragraphs(i).Range.Text)
Next
End Sub
0
Merci, là ça marche super c'est ce que je voulais au moins pour la première partie de ma macro.
le plus dur a été d'exprimer le besoin et en fait dans toutes mes tentatives peut être que j'avais trouvé comment remplacer le paragraphe avec espace par celui sans espace mais comme je n'avais pas envisagé le problème de la boucle for each ....
Merci encore, je continue ma macro en essayant de me débrouiller seul cette fois ci . Et vous êtes rapides en plus !!!
0
Comme promis voila ma macro qui a l'air de fonctionner , les remarques devraient pouvoir servir a aider ceux qui voudraient eventuellement s'en servir et l'adapter à leurs besoins sans trop s'y connaitre .
elle est sans doute ameliorable mais pour moi c'est suffisant pour le moment .

Sub miseenformemacro()
' on passe en revue tous les paragraphes
Dim i As Long
For i = 1 To ActiveDocument.Paragraphs.Count
' on supprime les espaces avant et apres chaque paragraphes
ActiveDocument.Paragraphs(i).Range = Trim(ActiveDocument.Paragraphs(i).Range.Text)
'on charge le paragraphe en cours dans la variable para
Para = ActiveDocument.Paragraphs(i).Range
'on recherche les paragraphes contenant sub et si oui on surligne en bleu
If InStr(1, Para, "sub", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdPink
'on recherche les paragraphes contenant ' et si oui on surligne en vert
If InStr(1, Para, "'", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdBrightGreen
'on recherche les paragraphes contenant DIM et si oui on surligne en jaune
If InStr(1, Para, "Dim", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdYellow
'on recherche les paragraphes contenant if et si oui on surligne en rouge
If InStr(1, Para, "if ", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdRed
'on recherche les paragraphes contenant for et si oui on surligne en bleu
If InStr(1, Para, "for ", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdBlue
'on recherche les paragraphes contenant next et si oui on surligne en bleu
If InStr(1, Para, "next ", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdBlue
'on recherche les paragraphes contenant do et si oui on surligne en gris
If InStr(1, Para, "do ", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdGray25
'on recherche les paragraphes contenant next et si oui on surligne en gris
If InStr(1, Para, "loop", vbTextCompare) > 0 Then ActiveDocument.Paragraphs(i).Range.HighlightColorIndex = wdGray25

Next i
End Sub

la fonction instr( )m'est encore obscure, mais bon ....

a plus tard.
0
Rejoignez-nous