Problème pour aligner une image sur le texte

Problème pour aligner une image sur le texte - VB/VBA/VBS - Programmation

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  :hello:


---------------
ZZZZzzzzz
Reply

Marsh Posté le 14-02-2007 à 10:37:17   

Reply

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 ?

Reply

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 ??  :ange:  
 
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  :heink:  
 
C plus clair ?  
Merci ! ;)

Reply

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
 

Reply

Marsh Posté le 14-02-2007 à 17:06:32    

Bein merde, c franchement balot ... :ouch:  
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 !!  :o  
 
Je te remercie de ton aide ... qui m'aura servi à comprendre que le prb est bcp plus hardu qu'il n'y parrait ! :jap:  
 
Si qq'un a une autre solution, à votre bon coeur :)

Reply

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.

Reply

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)'  :heink:  
 
Any additionnal help ????  :??:  
 

Reply

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 !

Reply

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.

Reply

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  :D  
 

Sub CollageImageVLM()
'
' CollageImageVLM Macro
         
    Selection.PasteSpecial DataType:=wdPasteMetafilePicture
    ActiveDocument.Shapes("Picture 2" ).WrapFormat.Type = wdWrapInline
       
End Sub


 
En fait je copie sur PPT, puis je vais moi meme sur word, et à pouf, je lance cette macro  :pt1cable:  
 
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à..)
 
 
 :??:

Reply

Marsh Posté le 15-02-2007 à 13:14:23   

Reply

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  !!!!  :pt1cable:

 

   Selection.Paste
    Selection.ShapeRange.IncrementLeft 2.25
    Selection.ShapeRange.IncrementLeft 9#
    Selection.ShapeRange.IncrementLeft 9#
    Selection.ShapeRange.IncrementTop 3.35
    Selection.ShapeRange.IncrementTop 9#
    Selection.ShapeRange.IncrementTop 9#
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.PictureFormat.Brightness = 0.5
    Selection.ShapeRange.PictureFormat.Contrast = 0.5
    Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic
    Selection.ShapeRange.PictureFormat.CropLeft = 0#
    Selection.ShapeRange.PictureFormat.CropRight = 0#
    Selection.ShapeRange.PictureFormat.CropTop = 0#
    Selection.ShapeRange.PictureFormat.CropBottom = 0#
    Selection.ShapeRange.Left = 145.95
    Selection.ShapeRange.Top = 154.75
    Selection.ShapeRange.RelativeHorizontalPosition = _
        wdRelativeHorizontalPositionColumn
    Selection.ShapeRange.RelativeVerticalPosition = _
        wdRelativeVerticalPositionParagraph
    Selection.ShapeRange.Left = CentimetersToPoints(2.65)
    Selection.ShapeRange.Top = CentimetersToPoints(2.96)
    Selection.ShapeRange.LockAnchor = False
    Selection.ShapeRange.LayoutInCell = True
    Selection.ShapeRange.WrapFormat.AllowOverlap = True
    Selection.ShapeRange.WrapFormat.Side = wdWrapBoth
    Selection.ShapeRange.WrapFormat.DistanceTop = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceBottom = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceLeft = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.DistanceRight = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.Type = wdWrapTight
End Sub

 

Je pige plus gd chose ! :heink:


Message édité par dcvlm le 15-02-2007 à 13:22:59
Reply

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 ?

Reply

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 :

  • Edition/Collage spécial/Metafichier amélioré
  • Aligner sur le texte le chose que je viens de coller


Is that clear  ? Ou bien c encore flou ??  :??:

 

:hello:


Message édité par dcvlm le 15-02-2007 à 15:40:26
Reply

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 ?

Reply

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 ... :pfff:  
 
That's the point  :whistle:  
 
 :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed