copie d'image dans un bouton

  • Initiateur de la discussion Initiateur de la discussion Ti
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
774
Retour