Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
881 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème pour aligner une image sur le texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème pour aligner une image sur le texte

n°1514402
dcvlm
Yep
Posté le 14-02-2007 à 10:37:17  profilanswer
 

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
mood
Publicité
Posté le 14-02-2007 à 10:37:17  profilanswer
 

n°1514569
aprilthe5i​th
Posté le 14-02-2007 à 15:22:27  profilanswer
 

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 ?

n°1514601
dcvlm
Yep
Posté le 14-02-2007 à 15:50:20  profilanswer
 

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 ! ;)

n°1514646
aprilthe5i​th
Posté le 14-02-2007 à 16:39:10  profilanswer
 

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
 

n°1514669
dcvlm
Yep
Posté le 14-02-2007 à 17:06:32  profilanswer
 

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

n°1514681
aprilthe5i​th
Posté le 14-02-2007 à 17:39:11  profilanswer
 

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.

n°1514916
dcvlm
Yep
Posté le 15-02-2007 à 10:41:05  profilanswer
 

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

n°1514952
aprilthe5i​th
Posté le 15-02-2007 à 11:49:55  profilanswer
 

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 !

n°1514963
aprilthe5i​th
Posté le 15-02-2007 à 12:01:41  profilanswer
 

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.

n°1514996
dcvlm
Yep
Posté le 15-02-2007 à 13:14:23  profilanswer
 

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à..)
 
 
 :??:

mood
Publicité
Posté le 15-02-2007 à 13:14:23  profilanswer
 

n°1515001
dcvlm
Yep
Posté le 15-02-2007 à 13:21:58  profilanswer
 

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
n°1515090
aprilthe5i​th
Posté le 15-02-2007 à 15:19:17  profilanswer
 

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 ?

n°1515097
dcvlm
Yep
Posté le 15-02-2007 à 15:39:59  profilanswer
 

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
n°1515104
aprilthe5i​th
Posté le 15-02-2007 à 16:01:04  profilanswer
 

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 ?

n°1515127
dcvlm
Yep
Posté le 15-02-2007 à 16:36:33  profilanswer
 

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:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème pour aligner une image sur le texte

 

Sujets relatifs
[JAVA] Charger un fichier texte en mémoire dans un Stringprobleme en php
Centrer du texte verticalementproblème d'alignement menu/page(html)
Problème IDIOT de conversion string->float [RESOLU][VB.Net] Problème de répertoires de travail
[PHP] Probleme requette sqlProblème sur une requête (ifnull ?)
Probleme fichier cpuinf32.dllprobleme requete MATCH mysql_fetch_???
Plus de sujets relatifs à : Problème pour aligner une image sur le texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR