|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 2 ![]() |
J'ai fait une macro pour changer automatiquement le style d'un paragraphe, si la première lettre = £
Les instructions qui sont dans le corps de la macro fonctionnent bien, pour un paragraphe, mais quand je lance la macro complète, le programme reste bloqué sur le premier paragraphe et ne passe jamais au suivant. Comment faire pour que la macro passe en revue tous les paragraphes du document ? Ci-dessous la macro : Code :
|
||
|
|
00
|
|
|
#2 | ||||||||||
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut isardi,
Ta macro pose beaucoup de problèmes car elle part (certainement) de l'enregistreur de macros. Mais je vais les expliquer au fur et à mesure car cette macro est vraiment un cas d'école. Tous les macros vont (enfin devraient ) fonctionner, tu peux donc t'arrêter à la 1ère qui corrige rapidement ton pb.Étape 1: Tu veux adapter le code que l'enregistreur de macros t'a fourni, au plus simple Pb1-1 : L'enregistreur de macro travaille sur l'objet Sélection mais ta boucle travaille sur l'objet ActiveDocument ==> Affecte ton objet Selection au paragraphe que tu utilises dans ta boucle Pb1-2 : L'enregistreur de macro enregistre ce que tu fais mais pas forcément ce que tu veux ==> ici tu as utilisé la touche End pour sélectionner ton paragraphe de test mais en fait End sélectionne la ligne et comme l'affectation d'un style se base sur un paragraphe, tu dois utiliser <Ctrl>+<Maj>+<flêche bas> qui sélectionne ton paragraphe Code :
Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend Citation:
)Code :
Code :
Étape 3: Tu veux adapter le code que l'enregistreur de macros t'a fourni mais on vient de voir que la boucle travaille sur l'objet ActiveDocument et pas sur l'objet Selection ==> on ne va plus utiliser l'objet Selection en gardant le même principe : Mais sur un objet comme Paragraph, la fonction Select n'est pas dispo. Il faut alors passer par un truc très spécifique du VBA, le Range. Le Range (en gros) désigne la plage visuelle qui représente graphiquement l'objet et va permettre d'utiliser l'objet au travers la fenêtre que vous utilisez dans Word. Attention, c'est super puissant mais bonjour, l'arrachage de cheveux au départ avant de bien le comprendre et le maitriser (mais c'est ==> code de l'algo n° 3 (presque pas beurk Code :
On commence donc par supprimer cette sélection dont on ne veut plus Citation:
![]() ==> code de l'algo n° 4 (plus du tout beurk voire )Code :
@+ |
||||||||||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 2 ![]() |
Merci beaucoup pour cette réponse très détaillée et parfaitement claire.
J'avais déjà fait des macros sur Excel, mais jamais sur Word, et faute de connaître l'instruction adéquate pour extraire le premier caractère d'un paragraphe, j'ai "bricolé" à partir de l'enregistreur de macros. Effectivement, il n'y a pas photo entre mon code et le tien (je parle du code final) : concis et efficace ! |
|
|
00
|
|
|
#4 | |||
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut isardi,
Citation:
![]() Citation:
Citation:
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com