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

demande d'aide VBA , gestion des images et zone de texte

4 réponses
Avatar
JJK94
word 2003
j' ai un document constitué successivement de 2 zones de textes et d'une
image .
Les 2 zones de textes sont par défaut flottantes et l'indice de l'image dans
la collection inlineshapes() est 1.
Quand je positionne la propriété "style d'habillage alignement sur le
texte" des 2 zones de textes , l'indice valide de l'image dans la collection
inlineshapes() devient 3 .
1) Quels sont les propriétés d'une zone de texte qui permet d'identifier si
elle est positionneé en "alignement sur le texte" ou non.
2) Dans un document comment retrouver les indices valides des élements de la
collection inlineshapes()

Merci pour votre aide

JJK94

4 réponses

Avatar
Anacoluthe
Bonjour !

'JJK94' nous a écrit ...
1) Quels sont les propriétés d'une zone de texte qui permet d'identifier si
elle est positionneé en "alignement sur le texte" ou non.


En fait cette propriété n'existe pas dans le sens que vous imaginez !

Il y a deux sortes d'objets 'formes graphiques'
- les InlineShapes = alignés sur le texte
- les Shapes = formes flottantes hors-texte

Quand vous alignez sur le texte une ZdT flottante vous convertissez
un objet en un autre : vous détruisez votre Shape et vous construisez
une nouvelle InlineShape identique.
Ceci explique que votre image indexée 1 passe à 3 après l'insertion
de 2 autres InlineShapes avant elle.

Pour info la conversion d'une Shape en InlineShape ne peut pas être
enregistrée avec l'enregistreur de macro. Vous utiliserez la
méthode maForme.ConvertToInlineShape

2) Dans un document comment retrouver les indices valides des élements de la
collection inlineshapes()


C'est l'ordre de InlineShapes dans votre document.
En vba si vous ne voulez pas 'perdre' un objet dont l'indice dans
une collection est susceptible de varier, vous avez intérêt à
dénommer votre objet :
Dim monImage As InlineShape
Set monImage = ActiveDocument.InlineShapes(1)
et ainsi votre image reste parfaitement définie par monImage
même si son indice dans la collection passe à 3

Est-ce plus clair pour vous ?

Anacoluthe
« La forme n'est souvent qu'une mise en scène qui déforme. »
- Paul LEAUTAUD

Avatar
Geo
Bonjour à Anacoluthe qui nous a écrit un texte clair, compréhensible et
complet

Tu devrais proposer cette réponse pour un article dans la base de
connaissance.
JJK94 est confronté à un problème relativement classique pour un
macroteur et l'aide est insuffisante pour s'en sortir.
Avec tes explications on gagne des heures de tâtonnements, encore
doit-on s'estimer heureux si on y arrive.

--
A+
Avatar
JJK94
Bonjour Anacoluthe
merci pour votre réponse , ça m'aide .
j'ai rémarqué egalement que la collection shapes() ne varie pas même si un
élement "ZdT" est aligné sur le texte.
j'ai vu en farfouillant dans les aides un peu partout un rapport avec la
notion "Article Principal" , mais je n'ai pas trouvé de définition
pertinente à ce sujet en réponse à mes demandes, sans doute mal posé la
question !!!
merci encore
JJK94
"Anacoluthe" a écrit dans le message de news:

Bonjour !

'JJK94' nous a écrit ...
1) Quels sont les propriétés d'une zone de texte qui permet d'identifier
si elle est positionneé en "alignement sur le texte" ou non.


En fait cette propriété n'existe pas dans le sens que vous imaginez !

Il y a deux sortes d'objets 'formes graphiques'
- les InlineShapes = alignés sur le texte
- les Shapes = formes flottantes hors-texte

Quand vous alignez sur le texte une ZdT flottante vous convertissez
un objet en un autre : vous détruisez votre Shape et vous construisez
une nouvelle InlineShape identique.
Ceci explique que votre image indexée 1 passe à 3 après l'insertion
de 2 autres InlineShapes avant elle.

Pour info la conversion d'une Shape en InlineShape ne peut pas être
enregistrée avec l'enregistreur de macro. Vous utiliserez la
méthode maForme.ConvertToInlineShape

2) Dans un document comment retrouver les indices valides des élements de
la collection inlineshapes()


C'est l'ordre de InlineShapes dans votre document.
En vba si vous ne voulez pas 'perdre' un objet dont l'indice dans
une collection est susceptible de varier, vous avez intérêt à
dénommer votre objet :
Dim monImage As InlineShape
Set monImage = ActiveDocument.InlineShapes(1)
et ainsi votre image reste parfaitement définie par monImage
même si son indice dans la collection passe à 3

Est-ce plus clair pour vous ?

Anacoluthe
« La forme n'est souvent qu'une mise en scène qui déforme. »
- Paul LEAUTAUD



Avatar
Anacoluthe
Bonjour !

'JJK94' nous a écrit ...
j'ai rémarqué egalement que la collection shapes() ne varie pas même si un
élement "ZdT" est aligné sur le texte.


Vous faites erreur ! La collection Shapes varie, elle perd bien
un élément si vous convertissez une Shape en InlineShape.

Ce qui vous trompe c'est que l'indexation n'est pas la même pour
les Shapes et les InlineShapes : autant pour les InlineShapes il
y a un ordre logique qui est celui du texte du document, autant cet
ordre n'a évidemment plus aucun sens pour des objets hors-texte !
Une Shape placée au début du document peut très bien avoir le
dernier indice si c'est le dernier objet créé !
Si bien qu'en supprimant un item Y positionné 'avant' un item X
mais indicé après lui (Y>X) X n'aura aucune raison de changer.

Anacoluthe
« La forme n'est souvent qu'une mise en scène qui déforme. »
- Paul LEAUTAUD