Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Parcourir les zones de texte, groupées ou non, d'un document ave c

1 réponse
Avatar
Dudu
Comment fait-on pour parcourir automatiquement tout le texte (y compris les
zones de texte, groupées ou non) du document actif, créé avec Microsoft Word,
à l’aide d’une macro rédigée en Visual Basic pour applications, dans le but
d’y effectuer un travail quelconque ?
J’ai rédigé un programme (voir plus loin) utilisant une procédure récursive
(car des groupes de Shapes peuvent contenir des sous-groupes de Shapes, etc.).
Mais malheureusement, avec Microsoft Word 2000, Visual Basic n’accepte pas
les arguments de type Shapes ou Shape dans les Sub et les Function. J’obtiens
donc un message d’erreur lors de chaque appel à la procédure
Effectuer_le_travail_désiré_dans (...).
En conséquence, je n’ai pas pu vérifier si mon programme fonctionnerait
correctement ou non….

D’avance Merci.
Amicalement.

Dominique TINEL,
F-47000 AGEN
tinel.dominique(supprimer ceci)@wanadoo.fr

Post-scriptum : Bien sûr, il faudrait aussi parcourir les en-têtes de page,
les pieds de pages, les notes, etc., mais cela ne pose aucun problème de
programmation.


Sub Effectuer_le_travail_désiré()

' Placer le curseur d'insertion au début du document actif :
Selection.HomeKey Unit:=wdStory

' Effectuer le travail désiré dans la couche normale du document actif :
Effectuer_le_travail_désiré_dans_la_zone_active

' Effectuer le travail désiré dans chaque zone de texte, groupée ou non
groupée, du document actif :
Effectuer_le_travail_désiré_dans (ActiveDocument.Shapes)

End Sub


Private Sub Effectuer_le_travail_désiré_dans(Collection_d_objets As Shapes)

' Pour chaque objet de cette collection d'objets :
' s'il s'agit d'une zone de texte,
' alors la sélectionner et y effectuer le travail désiré ;
' s'il s'agit d'un groupe d'objets,
' alors répéter la même chose sur la collection des objets de ce groupe...
Dim Objet As Shape
For Each Objet In Collection_d_objets
If Objet.TextFrame.HasText = True Then
Objet.Select
Effectuer_le_travail_désiré_dans_la_zone_active
End If
Effectuer_le_travail_désiré_dans (Objet.GroupItems)
Next Objet

End Sub


Private Sub Effectuer_le_travail_désiré_dans_la_zone_active()

' Effectuer le travail désiré :
...

End Sub

1 réponse

Avatar
Anacoluthe
Bonjour !

'Dudu' nous a écrit ...
Mais malheureusement, avec Microsoft Word 2000, Visual Basic n’accepte pas
les arguments de type Shapes ou Shape dans les Sub et les Function.


??? depuis quand ???
ActiveDocument.Shapes est une collection valide dans WD2000 !
De même que celle des formes ActiveDocument.InlineShapes qu'il
ne faut pas oublier aussi. Concernant les formes incluses dans
chaque item de la collection StoryRanges de toutes les Stories
du document (désolé pour le sabir angliche), elles forment une
collection ShapeRange.
Espérant aider votre projet à prendre forme ... :-)

Anacoluthe
« Le dessin n'est pas la forme, il est la manière de voir la forme. »
- Edgar DEGAS