IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Image sur Userform provenant de la feuille [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut Image sur Userform provenant de la feuille
    Bonjour le forum,

    J'ai inséré une image "Test1" dans ma feuille "Bibli_Images" en cellule "A1".

    Je souhaite utiliser cette image dans mon userform "UserForm1" dans l'objet "Image3" de type Image.

    Le but final étant d'afficher une image du mon choix piochée dan la feuille "Bibli_Images".

    J'ai fait plusieurs essais sans succès et mes recherches sur les forums n'ont pas abouties.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image3.Picture = LoadPicture(Sheets("Bibli_Images").Pictures("Test1")) 'code qui ne fonctionne pas.
    Avez vous une piste à me proposer ?

    Merci à tous.

  2. #2
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Bonsoir OBO29
    Le "LoadPicture" est pour charger un fichier image.

    Un code de ce genre devrait être correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set Img = Sheets("Bibli_Images").Shapes("Test1")
        Img.CopyPicture xlScreen, xlPicture
        Set imgPic.Picture = PastePicture()
    Bonne soirée.

    ESVBA

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut
    Bonjour le Forum

    Merci ESVBA pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Set Img = Sheets("Bibli_Images").Shapes("Test1") 'ceci pointe bien l'image que je souhaite afficher.
        Img.CopyPicture xlScreen, xlPicture 'ceci copie l'image dans le presse papier
        Set imgPic.Picture = PastePicture() 'La fonction PastePicture est inconnue du compilateur.
    Je n'arrive donc pas encore à afficher l'image dans mon userform.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Set Img = Sheets("Bibli_Images").Shapes("Test1") 'ceci pointe bien l'image que je souhaite afficher.
        Set imgPic.Picture = Img.Picture 'ceci ne fonctionne pas non plus.
    L'idée générale étant de pouvoir avoir un programme complet dans le fichier Excel; sans un répertoire avec les images "à côté".

    Merci pour vos idées.

    OBO29


    Je ne sis pas si c'est réalisable...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Février 2015
    Messages : 118
    Par défaut
    Bonjour le Forum,

    J'ai orienté différemment mon approche et ferme ce sujet non résolu.

    OBO29

  5. #5
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Un peu tard...
    mets dans un module de code ce code :
    voir l'auteur dans le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    Option Compare Text
     
    Private Type GUID
        Data1 As Long
        Data2 As Integer
        Data3 As Integer
        Data4(0 To 7) As Byte
    End Type
     
    Private Type uPicDesc
        Size As Long
        Type As Long
        hPic As Long
        hPal As Long
    End Type
     
    Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
    Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
    Declare Function CopyImage Lib "user32" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
     
    Const CF_PALETTE = 9
    Const CF_ENHMETAFILE = 14
    Const IMAGE_BITMAP = 0
    Const LR_COPYRETURNORG = &H4
     
    ' 30 Oct 98 Stephen Bullen Created
    Function PastePicture(Optional lXlPicType As Long = xlPicture) As IPicture
        Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, lPicType As Long, hCopy As Long
     
        lPicType = IIf(lXlPicType = xlBitmap, CF_BITMAP, CF_ENHMETAFILE)
        hPicAvail = IsClipboardFormatAvailable(lPicType)
        If hPicAvail <> 0 Then
            h = OpenClipboard(0&)
            If h > 0 Then
                hPtr = GetClipboardData(lPicType)
                If lPicType = CF_BITMAP Then
                    hCopy = CopyImage(hPtr, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
                Else
                    hCopy = CopyEnhMetaFile(hPtr, vbNullString)
                End If
                h = CloseClipboard
                If hPtr <> 0 Then Set PastePicture = CreatePicture(hCopy, 0, lPicType)
            End If
        End If
    End Function
     
    ' 30 Oct 98 Stephen Bullen Created
    Private Function CreatePicture(ByVal hPic As Long, ByVal hPal As Long, ByVal lPicType) As IPicture
        Dim r As Long, uPicInfo As uPicDesc, IID_IDispatch As GUID, IPic As IPicture
     
        Const PICTYPE_BITMAP = 1
        Const PICTYPE_ENHMETAFILE = 4
        With IID_IDispatch
            .Data1 = &H7BF80980
            .Data2 = &HBF32
            .Data3 = &H101A
            .Data4(0) = &H8B
            .Data4(1) = &HBB
            .Data4(2) = &H0
            .Data4(3) = &HAA
            .Data4(4) = &H0
            .Data4(5) = &H30
            .Data4(6) = &HC
            .Data4(7) = &HAB
        End With
     
        With uPicInfo
            .Size = Len(uPicInfo)                                                   ' Length of structure.
            .Type = IIf(lPicType = CF_BITMAP, PICTYPE_BITMAP, PICTYPE_ENHMETAFILE)  ' Type of Picture
            .hPic = hPic                                                            ' Handle to image.
            .hPal = IIf(lPicType = CF_BITMAP, hPal, 0)                              ' Handle to palette (if bitmap).
        End With
     
        r = OleCreatePictureIndirect(uPicInfo, IID_IDispatch, True, IPic)
        If r <> 0 Then Debug.Print "Create Picture: " & fnOLEError(r)
        Set CreatePicture = IPic
    End Function
     
    ' 30 Oct 98 Stephen Bullen Created
    Private Function fnOLEError(lErrNum As Long) As String
        Const E_ABORT = &H80004004
        Const E_ACCESSDENIED = &H80070005
        Const E_FAIL = &H80004005
        Const E_HANDLE = &H80070006
        Const E_INVALIDARG = &H80070057
        Const E_NOINTERFACE = &H80004002
        Const E_NOTIMPL = &H80004001
        Const E_OUTOFMEMORY = &H8007000E
        Const E_POINTER = &H80004003
        Const E_UNEXPECTED = &H8000FFFF
        Const S_OK = &H0
     
        Select Case lErrNum
            Case E_ABORT
                fnOLEError = " Aborted"
            Case E_ACCESSDENIED
                fnOLEError = " Access Denied"
            Case E_FAIL
                fnOLEError = " General Failure"
            Case E_HANDLE
                fnOLEError = " Bad/Missing Handle"
            Case E_INVALIDARG
                fnOLEError = " Invalid Argument"
            Case E_NOINTERFACE
                fnOLEError = " No Interface"
            Case E_NOTIMPL
                fnOLEError = " Not Implemented"
            Case E_OUTOFMEMORY
                fnOLEError = " Out of Memory"
            Case E_POINTER
                fnOLEError = " Invalid Pointer"
            Case E_UNEXPECTED
                fnOLEError = " Unknown Error"
            Case S_OK
                fnOLEError = " Success!"
        End Select
    End Function
    Sinon il reste la possibilité de créer un fichier image en exportant la "shape", de charge le fichier avec "LoadPicture" et de détruire le fichier image.

    ESVBA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Centrer image sur userform
    Par m@tix dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/09/2011, 14h39
  2. position des images sur feuille excel
    Par PATHAB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/02/2008, 11h03
  3. Feuille de calcul sur UserForm
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/08/2007, 20h37
  4. [VBA-E] Question sur image dans userform ?
    Par damsmut dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 05h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo