VBA Coller image sur Document issue d'une PictureBox [Résolu]

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 mars 2009 à 19:37 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 15 mars 2009 à 01:48
Salut

Mon appli sous Word VBA doit fabriquer un nouveau Document sur lequel je dois coller un logo.
J'ai aussi une UserForm et j'ai mis une PictyureBox (ou Image) sur ma forme afin de stocker mon image, rendant ainsi "autonome" (sans fichier supplémentaire) mon fichier DOC contenant les macros.

Mon problème, c'est pour faire le copier/coller de la Picture (que renferme ma PictureBox) sur le document.
J'ai bien trouvé comment faire le Coller de la "Selection", mais je ne sais pas comment je peux charger/copier la "Picture" de ma UserForm vers "Selection"

Si qqun a une idée ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 14 mars 2009 à 21:18
3
Merci
Bonjour,

je ne suis pas vraiment certain d'avoir tout compris...
Je dirais simplementque si ton contrôlecontenant le logo possède une propriété picture, je te suggèrerais alors l'utilisation des fonction CopyImage et celles de gestion du Clipboard de l'Api de Windows, genre :

Private Const IMAGE_BITMAP = 0
Private Const LR_COPYRETURNORG = &H4
Private Const CF_BITMAP = 2

toto = CopyImage(Picture1.Picture, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
OpenClipboard Me.hwnd
EmptyClipboard
SetClipboardData CF_BITMAP, toto

puis de "décharger" où tu l'entends ce que tu as dans le press-papier, à l'aide de GetClipboardData

 

Merci jmf0 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 68 internautes ce mois-ci

Commenter la réponse de jmf0
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 mars 2009 à 01:44
0
Merci
Salut jmf0 et merci beaucoup, tu as trouvé l'astuce.
En fait, je persistais à vouloir trouver une solution liée au langage alors qu'il faut s'adresser au presse-papier, plutôt qu'à ses saints !

Voici le bout de code que j'utilise avec succès :
Dans mon contexte, j'insère cette image Logo (*) dans une cellule d'un tableau
(*) dimensionnée en StdPicture dans le paramètre de ma fonction

    ' Insertion du logo dans la 1ère cellule
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    ' Charge l'image et fournit son adresse, on lui écrira
    r = CopyImage(Logo, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
    ' Ouvre le presse-papier (= Selection en VBA)
    OpenClipboard ByVal 0&
    ' Nettoyage avant insertion
    EmptyClipboard
    ' Insersion de l'adresse de l'image dans la zone graphique du presse-papier
    SetClipboardData CF_BITMAP, r
    ' Referme le presse-papier
    CloseClipboard
    ' Sélectionne quelque chose dans le Document
    Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    ' Rappelle l'image et l'insère sur le document
    Selection.Paste

Merci encore
Jack
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 mars 2009 à 01:48
0
Merci
Pour nos futurs lecteurs, les fonctions utilisées autour du presse-papier trouvent leurs définitions dans http://logiciel.codes-sources.com/logiciels/API-Guide-197.aspx
et sont (à mettre dans la partie déclaration):

' Déclarations nécessaires à la copie du Logo depuis l'Image de "frmReporter" vers "Selection"
Private Const IMAGE_BITMAP = 0
Private Const LR_COPYRETURNORG = &H4
Private Const CF_BITMAP = 2
Private Declare Function CopyImage Lib "user32" (ByVal handle As Long, _
                                                 ByVal imageType As Long, _
                                                 ByVal newWidth As Long, _
                                                 ByVal newHeight As Long, _
                                                 ByVal lFlags As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, _
                                                        ByVal hMem As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Commenter la réponse de cs_Jack

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.