Problème pour aligner une image sur le texte - VB/VBA/VBS - Programmation
Marsh Posté le 14-02-2007 à 15:22:27
Il faut que tu définisses la "shaperange", qui n'existe pas au moment ou tu l'utilises en 2nde ligne.
sur quel support tu colles ca ?
Marsh Posté le 14-02-2007 à 15:50:20
Hum.. merci pr ta réponse. J'ai continué de fouiller sur Google, et ca ne donne pas gd chose, on dirait que tout le monde bloque.. Serais-tu la perle rare ??
Bon, j'explique la situation :
- j'ai des schémas+texte à importer depuis PowerPoint
- et je veux copier coller ca dans Word
- en métafichier amélioré
- en aligné sur le texte
D'où m'a proposition de bout de code ...
Maintenant, j'ai jamais fait de macro pr office, donc
C plus clair ?
Merci !
Marsh Posté le 14-02-2007 à 16:39:10
Bon, même si je comprends le principe de l'erur je n'arrive pas à la contrer.
Le problème comme je te le disais réside dans le fait que ShapeRange nest rien pour le programme.
Il faut nommer l'objet que tu viens de coller :
par défaut le premier objet collé s'appelle "Picture 1"
donc si tu écris :
Selection.PasteSpecial DataType:=wdPasteMetafilePicture
ActiveDocument.Shapes("Picture 1" ).WrapFormat.Type = wdWrapInline
ca fonctionne.
le problème est que si tu fais ca une fois, "Picture 1" reste en mémoire et, même si tu change de doc Word et que tu relances ta macro, la prochaine image s'appelmera "Picture 2"...
En gros tu perds totalement le controle de ton objet, via sa désignation.
Dans ppt, il existe la méthode :
ppPres.Slides(1).Shapes.Paste.Name = "Tableau"
qui permet de nommer, de désigner ton objet dès son collage
mais dans Word ca ne marche pas...
désolé, ce sont les seules pistes que peux te donner
Marsh Posté le 14-02-2007 à 17:06:32
Bein merde, c franchement balot ...
C complétement hallucinant de pas avoir ce genre de fonctionnalité !
On vient de manipuler un élément, et à la ligne d'après y'a plus aucun moyen de s'en reservir !!
Je te remercie de ton aide ... qui m'aura servi à comprendre que le prb est bcp plus hardu qu'il n'y parrait !
Si qq'un a une autre solution, à votre bon coeur
Marsh Posté le 14-02-2007 à 17:39:11
je viens de trouver un bout de programme qui utilise bien des index numériques.
Cela veut donc dire qu'il est possible de les manipuler.
J'imagine que lorsque le programme s'arrète et surtout lorsque le fichier ou est stockée la macro SE FERME les données stockées en mémoires sont détruites.
Je te conseille donc d'essayer la méthode :
ActiveDocument.Shapes("Picture 1" ).WrapFormat.Type = wdWrapInline
pour chaque image en incrémentant le "Picture x" à chaque collage et de bien fermer le fichier ou est stockée la macro à la fin.
Si tu ne connais pas à l'avance le nombre exact d'images à coller tu crée simplement un entier Int et une string Str où :
Str="Picture " & Int
Int=Int+1
ActiveDocument.Shapes(str).WrapFormat.Type = wdWrapInline
voila.
Marsh Posté le 15-02-2007 à 10:41:05
La solution est en effet astucieuse ...
Mais y'a un hic ....
-->Meme si je mets en dur ds le code Picture 1,
c'est à dire
ActiveDocument.Shapes("Picture 1" ).WrapFormat.Type = wdWrapInline |
et que je ferme et lance word (dc vidage de je sais pas quelle mémoire), et lors de mon premier collage avec la macro, ca fait "Erreur d'execution '-2147024809 (80070057)'
Any additionnal help ????
Marsh Posté le 15-02-2007 à 11:49:55
Alors...
Effectivement si on fait le test d'importer une image (la première) et de la déplacer en enregistrant, la macro écrit :
ActiveDocument.Shapes("Picture 2" ).Select
Dingue !
Essaie donc en commençant à 2.
On va trouver !
Marsh Posté le 15-02-2007 à 12:01:41
tu peux me montrer les 5-6 lignes précédentes , celles qui concernent le "copier" dans ppt ?
Je crois que j'ai une idée.
Marsh Posté le 15-02-2007 à 13:14:23
Hum ... les 5-6 lignes précédentes, ca va etre dur .. Il n'y en a que 2
Sub CollageImageVLM() |
En fait je copie sur PPT, puis je vais moi meme sur word, et à pouf, je lance cette macro
Remarque : avec Picture 2 dans le code, ca ne plante plus, mais ca ne fait rien (enfin, ca colle l'image, mais ca s'arrete là..)
Marsh Posté le 15-02-2007 à 13:21:58
Petit ajout ...
Je viens de tester un enregistrement :
-je colle l'image betement
-et je fais tout un tas de truc avec (déplacement, habillage rapproché ...)
Et aucune mention de
ActiveDocument.Shapes("Picture xyz" ).Select !!!!
Selection.Paste |
Je pige plus gd chose !
Marsh Posté le 15-02-2007 à 15:19:17
il ne fait pas allusion à ta picture passque quand tu commences à la bouger, elle est DEJA sélectionnée (il la considère donc comme une ShapeRange)
pour revenir à ton "programme", pourquoi tu n'automatises pas tout : copiage + collage ?
je te pose la question car si tu fais des trucs manuellement, quel intérêt de faire une macro juste pour aligner ton image au texte ? (pourquoi ne pas tout faire à la main ou tout automatiser ?)
En fait, en quoi consiste vraiment de A à Z ce que tu veux faire ?
Marsh Posté le 15-02-2007 à 15:39:59
Hum en fait je ne peux pas tout faire automatiquement (copiage + collage) car la source est (souvent) un schéma ou un slide complet depuis PowerPoint, et la destination est (l'un des nombreux) document Word ouvert, à un endroit du doc que je veux moi meme spécifier !
Dc l'automatisation porte sur les points suivants :
Is that clear ? Ou bien c encore flou ??
Marsh Posté le 15-02-2007 à 16:01:04
Très clair.
Mais tu cliques bien à un endroit précis dans le doc Word pour spécifier l'endroit du collage ?
Donc si tu fais simplement un Ctrl+V, tu insères de facto ton objet sous forme de métafichier amélioré à l'endroit voulu, non ?
Marsh Posté le 15-02-2007 à 16:36:33
Hum, oui je clique bien à un endroit précis
En revanche, si je Ctrl+V des schémas depuis PPT (contenant textes et images), Word m'insère un "dessin" et les éléments restent modifiables : c donc pas sous forme d'image ...
That's the point
Marsh Posté le 14-02-2007 à 10:37:17
Bonjour,
J'ai un problème pour créer une macro.
Mon but est de coller une image sous forme de métafichier amélioré, et de l'aligner sur le texte.
Donc normalement ca doit se faire en 2 lignes
Selection.PasteSpecial DataType:=wdPasteMetafilePicture
Selection.ShapeRange.WrapFormat.Type = wdWrapInline
La première ligne marche parfaitement,
La seconde me dit Erreur execution 5930 : objet non valide...
Vous avez des idées ???
Merci
---------------
ZZZZzzzzz