copie d'image dans un bouton

T

Ti

Guest
Je cherche, dans un UserForm, à copier une image dans un controle à l'exécution, sans passer par la méthode LoadImage, mais, si possible, par le presse-papier.
Merci à ceux qui auront des pistes à me proposer. Par contre, vous pouvez oublier les Sendkeys, ça ne marchera pas
 
F

Fred

Guest
Slt,code tiré de disciplus

Le principe est le suivant :
- créer une userform contenant un contrôle Image et d'autres contrôles,
boutons,...
Dans mon exemple : la Userform est nommée "UF_images" et le contrôle Image
est nommé "IMA_image"
- dans une feuille, nommer une zone image (pour l'exemple ==> "Z_image1")
- obtention d'un n° de fichier temporaire
- création du fichier temporaire WMF à partir du contenu de la plage "Z_image1"
- copie de l'image WMF dans le contrôle Image (nommé IMA_image ) de la
UserForm nommée "UF_images"
- destruction du fichier temporaire après copie
- affichage de la UserForm

Utilisation :
--------- Code à copier dans un module ---------------------------------
Sub Miseajour_ControleImage()
Zone_Image = "Z_Image1"
Load UF_images
UF_images.Afficher_image_unique
UF_images.Show
End Sub
NOTA : on peut très bien inclure Zone_Image = "Z_Image"&Cstr(n) dans une
boucle pour faire un catalogue de n images

------- Code à copier tel quel dans le code de la userform ------------------------------
' COPIE D'IMAGE D'UN ONGLET EXCEL DANS UNE USER FORM
' VERSION SIMPLIFIEE POUR UNE SEULE IMAGE (PAS DE COPIE DIRECTE DE GRAPHIQUE EXCEL)

Private Declare Function GetTempFileNameA Lib "Kernel32" (ByVal lpszPath As
String, ByVal lpPrefixString As String, _
ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As
Long
Private Declare Function CloseClipboard Lib "User32" () As Long
Private Declare Function GetClipboardData Lib "User32" (ByVal uFormat As
Long) As Long
Private Declare Function CopyEnhMetaFileA Lib "Gdi32" (ByVal hemfSrc As
Long, ByVal lpszFile As String) As Long
Private Declare Function DeleteEnhMetaFile Lib "Gdi32" (ByVal hdc As Long)
As Long
Public Num_image As Integer

Sub Afficher_image_unique()
' afficher l'image numérotée
Dim FichierTemp As String
' nom de la plage de cellules "Z_imageN" à afficher et nom de l'image
'Zone_Image = "Z_image1"
' Copie de la plage "Z_imageN "dans le fichier temporaire FichierTemp
FichierTemp = CopieFichierEMF(Sht_schemas.Range(Zone_Image))
' Copie de l'image contenue de FichierTemp dans le contrôle "IMA_image"
'et donc mise à jour de la userform
UF_images.IMA_image.Picture = LoadPicture(FichierTemp)
' Destruction du fichier temporaire
Kill FichierTemp
End Sub

Private Function CopieFichierEMF(Objet As Object) As String
' la fonction retourne le nom du fichier temporaire
CopieFichierEMF = FichierTemp
' copier l'image dans le fichier
Objet.CopyPicture
' ouvrir le presse-papier
OpenClipboard 0
' vider le presse papier et copier le fichier en format Métafichier
Windows WMF
If DeleteEnhMetaFile(CopyEnhMetaFileA(GetClipboardData(14),
CopieFichierEMF)) = 0 Then CopieFichierEMF = ""
' fermer le presse-papier
CloseClipboard
End Function

Private Function FichierTemp(Optional ByVal Chemin As String) As String
' fonction d'obtention d'un nom de fichier temporaire
' lecture du nom du répertoire des temporaires par la variable
d'environnement TMP
If Chemin = "" Then Chemin = Environ("TMP")
' initialisation du nom du fichier temporaire
FichierTemp = Space$(160)
' obtention d'un numéro de fichier temporaire
GetTempFileNameA Chemin, "", 0, FichierTemp
' nom du fichier temporaire
FichierTemp = Left$(FichierTemp, InStr(FichierTemp, vbNullChar) - 1)
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 687
Messages
2 090 956
Membres
104 705
dernier inscrit
Mike72