Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2008, 14h41   #1
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Par défaut Récupérer la position d'une image

Bonjour,

Par l'intermédiaire de VB6, je transfère les contenus de Picturebox dans un document Word.

Cela donne en simplifiant :

Code :
1
2
3
4
5
6
7
8
 
Dim docWord as Word.Application
Set docWord = CreateObject("Word.Application")
 
...
 
Clipboard.SetData picture(i).Image, vbCFBitmap
docWord.Selection.Paste
Mon but est d'ajouter une textframe à côté de chaque image ajoutée. J'ai déjà récupéré le code pour ajouter une textframe (ActiveDocument.Shapes.AddShape), cependant j'ai besoin de connaître la position verticale (Top) de l'image dans la page Word pour pouvoir positionner correctement ma textframe, et je n'ai pas réussi à trouver comment l'obtenir :/

Merci d'avance.
Nyuu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 15h41   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Code :
1
2
3
4
5
6
7
Sub TestPositionImage()
Dim sh As Shape
For Each sh In ActiveDocument.Shapes
    Debug.Print sh.Top & " - " & sh.Left
 
Next sh
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 16h37   #3
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Ton code marche mais il me renvoie les positions des Textframe et non pas des images. J'ai besoin de la position des images afin de pouvoir placer les Textframe à côté (en fait, chaque image est commentée grâce à un textframe).

Dans l'idéal, à chaque fois que je colle une image grâce au clipboard, il faudrait que je récupère sa position Top pour pouvoir placer la Textframe correspondante au même endroit.

edit : récupérer l'endroit ou l'on se trouve sur le doc serait une solution, il suffirait que je récupère cette position juste avant de coller l'image. Mais là non plus je ne vois pas comment coder ça
Nyuu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 18h55   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Tes images sont peut-être des InlineShapes.

Pourrais-tu me dire si elles sont alignées dans le texte ou si elles sont libres.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 20h15   #5
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Les images sont dans des picturebox de l'application, je les intègre à Word grâce au Clipboard (presse-papiers, je fais un copier/coller avec Clipboard.getdata / Selection.paste), donc elles sont alignées dans le texte.

Et pour aligner les textframes que j'ajoute il me faut la position verticale des images que j'ai collées par le code.
Je ne peux pas utiliser les Inlineshape, puisqu'il faut préciser une propriété Top pour les placer et on revient au problème de départ :/

La seule solution que j'ai trouvée pour placer mes Textframe au bon endroit est de récupérer la position des images que j'ajoute au fur et à mesure... sauf que je n'ai toujours pas trouvé comment faire.
Nyuu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 20h25   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
C'est un peu bizarre, si elles sont alignées dans le texte, ce sont des InlineShapes

Pourrais-tu mettre un exemple sur le forum ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 22h27   #7
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Au temps pour moi je croyais que les Inlineshape étaient les images libres non intégrées au texte.

Concernant l'exemple :
Dans une boucle j'ai

Code :
1
2
3
4
5
6
7
8
9
10
11
 
dim zoneTxt as Word.Shape, positionTop as Integer
 
'boucle ajout image
for i = 1 to nbImg
    'ajout de l'image dans word grâce à copier/coller
    Clipboard.SetData me.picture(i).Image, vbCFBitmap
    docWord.Selection.Paste
    Set zoneTxt = ActiveDocument.Shapes.AddShape(1, 300, positionTop, 215, 117.5)
    zoneTxt.TextFrame.TextRange.Text = me.txtCom(i).Text
next i
qui ajoute des images dans le document ainsi qu'une Textframe contenant un commentaire à droite de chaque image. Le problème est que je ne sais pas comment trouver positionTop...

Et j'étais parti sur l'idée que comme l'image est toujours ajoutée au bon endroit, la solution est de récupérer sa position verticale (top). Comme cela on peut placer la Textframe à la même hauteur que l'image correspondante. Mais l'objet Inlineshape n'a pas de propriété top...
Autre solution envisageable : récupérer la position du curseur de word juste avant le copier/coller d'une image mais je n'ai pas trouvé comment faire (et j'imagine que lui non plus n'a pas de propriété Top).

Comme les images peuvent se situer n'importe où dans le document (car quasiment tout le texte est variable, mon programme est une génération automatique de rapport), je ne vois pas d'autre solution pour pouvoir placer ces satanés Textframes. En résumé la position des Textframes dépend uniquement de celle des images.

Voilà j'espère que cette fois j'ai été clair :p
Et merci pour l'aide.

EDIT : raah j'ai enfin trouvé
Selection.Information(wdVerticalPositionRelativeToPage) me permet de trouver la position dans le document Word, si je récupère cette valeur juste avant de coller l'image ça me donne sa position. Mes textframes s'alignent enfin avec les images.

Dernier problème : je suis obligé de rendre le document Word visible pendant le traitement sinon Selection.Information me renvoie des valeurs erronées.
Nyuu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h03.


 
 
 
 
Partenaires

Hébergement Web