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 :

Afficher des images dans des controles créer dynamiquement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Par défaut Afficher des images dans des controles créer dynamiquement
    Bonjour à tous,

    Voici trois jours que je bute sur un problème.

    Je dois créer un tableur EXCELL permettant de réaliser des plan de nettoyage.

    A partir d'une fiche type, l'utilisateur final en cliquant simplement dans une cellule va pouvoir choisir un pictogramme d'action à réaliser.

    J'avais une premiere version avec 18 actions. Une form avec 18 bouton et tut été reglé....

    Aujourd'hui, je dois rendre l'application dynamique. C'est à dire que l'utilisateur pourra créer des actions? C'est dernières seront stockées dasn la feuille "Pictogramme".

    J'ai réussi à créer dynamique le nombre de controle en fonction du nombre de pictogramme.

    Je voudrais maintenant que l'image contenu dans les controles soit différente.

    Impossible de mettre le nom de l'image en variable.....

    Voir mon commentaire dans le code de la feuille qui s'appelle USF_Act.

    Si l'un de vous à une petite idée.....

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    j'ai regarder ton userform USF_Act car je suppose que c'est celui la dont tu parle

    j'ai viré absolument tout ton code de cet userform
    j'ai aussi viré tout le code de la classe CmdButton

    ton userform au depart
    Nom : Capture.JPG
Affichages : 1085
Taille : 98,3 Ko


    il n'y que la frame et je l'ai fait tout petit

    nouveau code complet de cet userform
    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
    Option Explicit
    Dim cl As New CmdButton
    Private Sub UserForm_Initialize()
        Dim L&, T&, I&, Shp, Le&, Img
        L = 0
        T = -110
        I = 0
        For Each Shp In Sheets("Pictogrammes").OLEObjects
            If Left(Shp.Name, 5) = "Image" Then
                If I < 8 Then Le = Le + 1 Else Le = 0: I = 0
                If I Mod 8 = 0 Then T = T + 110
                Set Img = Me.Frame1.Controls.Add("forms.Image.1")
                With Img
                    .Name = "image" & Le
                    .Left = L + 90 * I
                    If Frame1.Width < .Left + 80 Then Frame1.Width = .Left + 83
                    .Top = T
                    If Frame1.Height < .Top + 80 Then Frame1.Height = .Top
                    .Height = 80
                    .Width = 80
                    .Picture = Sheets("Pictogrammes").OLEObjects(Shp.Name).Object.Picture    'Le problème est ici
                    .PictureSizeMode = 3
                End With
                I = I + 1
            End If
            cl.AddIMG Img
             Next
        Me.Width = Frame1.Width + 10
        Me.Height = Frame1.Height + 10
    End Sub
    nouveau code de la classe
    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
     
    Option Explicit
    '# Evénements pour bouton de commande
    'Private WithEvents bouton As MSForms.CommandButton
    Public WithEvents Image As MSForms.Image
     
    Public INDEX As Long
    Dim cls() As New CmdButton
    Sub AddIMG(Img)
        INDEX = INDEX + 1: ReDim Preserve cls(0 To INDEX): Set cls(INDEX).Image = Img
    End Sub
     
    Private Sub Image_Click()
        MsgBox Image.Name
    End Sub
    resultat le userform est arranger a la taille suffisante pour des rangées de 8 et les évènements de tes images sont opérationnels
    Nom : demo3.gif
Affichages : 1153
Taille : 491,0 Ko

    en gros j'ai pratiqué toute les activités représentées par tes images sur ton userform
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Par défaut
    Mon problème était de gérer l'ajout par l'utilisateur de pictogramme au delà des 18 de bases.

    J'aurais egalement le me problème pour les produits, les dilutions, etc etc.


    Je regarde jeudi si tu as trouvé la solution et je mettrais alors le sujet en résolu.

    Encore merci

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    je t'ai donné une base fonctionnelle car ta version ne fonctionnait pas
    a toi de bucher un peu dessus et d'en comprendre les rouages
    ca devrait pas être trop compliqué
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Avec un seul userform adaptable selon le contexte (pour office x32).

    Fait à la hâte. plus tard à améliorer

    Codes

    Module standard:
    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
    Option Explicit
     
    Public Cls() As New CmdButton
    Public sN As Integer
    Public sCol As Integer
    Public sL As Single
     
    Public Sub Suppression()
    Dim Btn As Object
     
    If MsgBox("Voulez-vous supprimer le picto?", vbYesNo) = vbYes Then
        Set Btn = ActiveSheet.Shapes(Application.Caller)
        Btn.Delete
        Set Btn = Nothing
    End If
    End Sub
    Module de classe (nommé CmdButton)
    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    Option Explicit
    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 CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) 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
     
    Public WithEvents Image As MSForms.Image
     
    Private Sub Image_Click()
    Dim NomImage As String
     
    NomImage = Image.Tag
    If NomImage <> "" Then
        Feuil1.Shapes(NomImage).Copy
        ActiveSheet.Paste
        Selection.OnAction = "Suppression"
        Range("A1").Select
    End If
    Unload Image.Parent.Parent
    End Sub
     
    Private Sub PictureAdd(Usf As Object, i As Integer, ByVal N As Integer, Shp As Object, Gauch As Single, Haut As Single, ByVal L As Single, ByVal H As Single)
    Dim Frm As MSForms.Frame
    Dim Img As MSForms.Image
     
    Set Frm = Usf.Frame1
    Set Img = Frm.Controls.Add("forms.Image.1")
    With Img
        i = i + 1
        .Tag = Shp.Name
        .Left = Gauch
        .Top = Haut
        .Width = L
        .Height = H
     
        With Frm
            If .Width < (N + 1) * L Then .Width = .Width + L + 10
            .Height = Haut + H + 20
        End With
     
        If i Mod N = 0 Then
            Haut = Haut + H + 10
            Gauch = 0
        Else
            Gauch = Gauch + L + 10
        End If
     
        Shp.CopyPicture
        .Picture = PastePicture
        .PictureSizeMode = 3
        ReDim Preserve Cls(1 To i)
        Set Cls(i).Image = Img
    End With
    Set Frm = Nothing
    End Sub
     
    Sub Ajouter(Usf As Object, i As Integer, ByVal N As Integer, Gauch As Single, Haut As Single, ByVal L As Single, ByVal H As Single, ByVal Col As Integer)
    Dim Shap As Shape
     
    For Each Shap In Feuil1.Shapes
        If Shap.Type = 13 Then
            If Shap.TopLeftCell.Column = Col Then PictureAdd Usf, i, N, Shap, Gauch, Haut, L, H
        End If
    Next Shap
     
    Usf.Width = Usf.Frame1.Width + 10
    Usf.Height = Usf.Frame1.Height + 10
    End Sub
     
    Private Function PastePicture() As IPicture
    Const lMETAFILE As Long = 14
    Dim lPictureAvailable As Long
    Dim lClipHandle As Long
    Dim lPicHandle As Long
    Dim lCopyHandle As Long
    Dim uInterGUID As GUID
    Dim uPictureInfo As uPicDesc
    Dim lOLEHandle As Long
    Dim iTempPicture As IPicture
     
    lPictureAvailable = IsClipboardFormatAvailable(lMETAFILE)
    If lPictureAvailable <> 0 Then
        lClipHandle = OpenClipboard(0&)
        If lClipHandle > 0 Then
            lPicHandle = GetClipboardData(lMETAFILE)
            lCopyHandle = CopyEnhMetaFile(lPicHandle, vbNullString)
            lClipHandle = CloseClipboard
            If lPicHandle <> 0 Then
                With uInterGUID
                    .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 uPictureInfo
                    .Size = Len(uPictureInfo)       ' Length of structure.
                    .Type = 4                       ' Type of Picture = Metafile
                    .hPic = lCopyHandle             ' Handle to image.
                    .hPal = 0                       ' Handle to palette.
                End With
                lOLEHandle = OleCreatePictureIndirect(uPictureInfo, uInterGUID, True, iTempPicture)
     
                If lOLEHandle = 0 Then Set PastePicture = iTempPicture
            End If
        End If
    End If
    End Function
    Module de la feuille Vierge:
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Cl As CmdButton
     
    If Target.Count = 1 Then
        If Target.Row > 5 And Target.Row < 12 Then
            If Range("A" & Target.Row).Value <> "" Then
                Select Case Target.Column
                    Case 2: sCol = 6: sL = 60: sN = 8
                    Case 3: sCol = 4: sL = 60: sN = 8
                    Case 4: sCol = 8: sL = 160: sN = 4
                    Case 5 To 8: sCol = 2: sL = 80: sN = 7
                End Select
                If sCol > 0 Then
                    Set Cl = New CmdButton
                    Cl.Ajouter USF_Act, 0, sN, 0, 0, sL, 80, sCol
                    sCol = 0
                    USF_Act.Show
                    Set Cl = Nothing
                End If
            Else
                MsgBox "Remplir d'abord le QUOI"
            End If
        End If
    End If
    End Sub
    Module de l'userform USF_Act
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
     
    ReDim Cls(0)
    Erase Cls
    End Sub
    En feuille Vierge, toutes les images sont des Shapes et non des Oleobjects

    Classeur exemple:

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Mercatog tu n'a garder que les pictures sur le sheets tu a viré les controls images ??
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    bonjour

    j'ai regarder ton userform USF_Act car je suppose que c'est celui la dont tu parle

    j'ai viré absolument tout ton code de cet userform
    j'ai aussi viré tout le code de la classe CmdButton

    ton userform au depart
    Nom : Capture.JPG
Affichages : 1085
Taille : 98,3 Ko


    il n'y que la frame et je l'ai fait tout petit

    nouveau code complet de cet userform
    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
    Option Explicit
    Dim cl As New CmdButton
    Private Sub UserForm_Initialize()
        Dim L&, T&, I&, Shp, Le&, Img
        L = 0
        T = -110
        I = 0
        For Each Shp In Sheets("Pictogrammes").OLEObjects
            If Left(Shp.Name, 5) = "Image" Then
                If I < 8 Then Le = Le + 1 Else Le = 0: I = 0
                If I Mod 8 = 0 Then T = T + 110
                Set Img = Me.Frame1.Controls.Add("forms.Image.1")
                With Img
                    .Name = "image" & Le
                    .Left = L + 90 * I
                    If Frame1.Width < .Left + 80 Then Frame1.Width = .Left + 83
                    .Top = T
                    If Frame1.Height < .Top + 80 Then Frame1.Height = .Top
                    .Height = 80
                    .Width = 80
                    .Picture = Sheets("Pictogrammes").OLEObjects(Shp.Name).Object.Picture    'Le problème est ici
                    .PictureSizeMode = 3
                End With
                I = I + 1
            End If
            cl.AddIMG Img
             Next
        Me.Width = Frame1.Width + 10
        Me.Height = Frame1.Height + 10
    End Sub
    nouveau code de la classe
    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
     
    Option Explicit
    '# Evénements pour bouton de commande
    'Private WithEvents bouton As MSForms.CommandButton
    Public WithEvents Image As MSForms.Image
     
    Public INDEX As Long
    Dim cls() As New CmdButton
    Sub AddIMG(Img)
        INDEX = INDEX + 1: ReDim Preserve cls(0 To INDEX): Set cls(INDEX).Image = Img
    End Sub
     
    Private Sub Image_Click()
        MsgBox Image.Name
    End Sub
    resultat le userform est arranger a la taille suffisante pour des rangées de 8 et les évènements de tes images sont opérationnels
    Nom : demo3.gif
Affichages : 1153
Taille : 491,0 Ko

    en gros j'ai pratiqué toute les activités représentées par tes images sur ton userform
    Bonjour Patrick.

    J'envisage de rester sur ta proposition qui me semble être la plus simple. Cependant elle n'affiche que 16 images alors qu'il y a bien 18 images sur la feuille pictogramme. Je ne comprend pas où se situe le problème
    Je te remercie par avance pour ta réponse.

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    non elles y sont mais j'ai oublié d redim le height comme je le fait pour le width
    et en plus je m'était planté pour les noms maintenant elles ont leur vrai nom



    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
     
    Dim cl As New CmdButton
    Private Sub UserForm_Initialize()
        l = 0
        t = -100
        I = 0
        For Each shp In Sheets("Pictogrammes").OLEObjects
            If Left(shp.Name, 5) = "Image" Then
                If I < 8 Then le = le + 1 Else le = 0: I = 0
                If I Mod 8 = 0 Then t = t + 100
                Set img = Me.Frame1.Controls.Add("forms.Image.1")
                With img
                    .Name = shp.Name
                    .Left = l + 90 * I
                    If Frame1.Width < .Left + 80 Then Frame1.Width = .Left + 83
                    .Top = t
                    If Frame1.Height < .Top + 80 Then Frame1.Height = .Top + 100
                    .Height = 80
                    .Width = 80
                    .Picture = Sheets("Pictogrammes").OLEObjects(shp.Name).Object.Picture    'Le problème est ici
                    .PictureSizeMode = 3
                End With
                I = I + 1
            End If
            cl.AddIMG img
             Next
        Me.Width = Frame1.Width + 10
        Me.Height = Frame1.Height + 10
    End Sub
    et si tu préfère la méthode de compil d'instances de classe avec un Object collection comme tu avais tenté c'est comme ca :

    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
    Option Explicit
    Dim cl As CmdButton
    Dim images As New Collection
    Private Sub UserForm_Initialize()
        Dim L&, T&, I&, Shp, Le&, Img
        L = 0
        T = -100
        I = 0
        For Each Shp In Sheets("Pictogrammes").OLEObjects
            If Left(Shp.Name, 5) = "Image" Then
                If I < 8 Then Le = Le + 1 Else Le = 0: I = 0
                If I Mod 8 = 0 Then T = T + 100
                Set Img = Me.Frame1.Controls.Add("forms.Image.1")
                With Img
                    .Name = Shp.Name
                    .Left = L + 90 * I
                    If Frame1.Width < .Left + 80 Then Frame1.Width = .Left + 83
                    .Top = T
                    If Frame1.Height < .Top + 80 Then Frame1.Height = .Top + 100
                    .Height = 80
                    .Width = 80
                    .Picture = Sheets("Pictogrammes").OLEObjects(Shp.Name).Object.Picture    'Le problème est ici
                    .PictureSizeMode = 3
                End With
                I = I + 1
            End If
            Set cl = New CmdButton
            Set cl.Image = Img
            images.Add cl
        Next
        Me.Width = Frame1.Width + 10
        Me.Height = Frame1.Height + 10
    End Sub



    la méthode de mercatog n'est pas a jeter car si tu veux les autres images qui sont des pictures!! et non des controls image tu en aura besoins!!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #9
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Par défaut
    Merci. Ca fonctionne parfaitement...

    Du coup je continue et là nouveau blocage.

    J'avais lu un article dans lequel il était dit qu'on ne pouvait utiliser que des contrôles image dans une feuille pour pouvoir récupérer les images et les utiliser dans une USERFORM. C'est pour cela que tu as pu voir que j'avais à la fois des images sous la forme d'image et d'autre sous la forme de controle image dans ma feuille "pictogrammes"

    Initialement je voulais que l'utilisateur final puisse ajouter des pictogramme. D’où ma présentation en colonne, en allant récupérer le nom de l'image, il était simple d'ajouter une nouvelle image avec un nom du type nom = nom+1

    Mon problème est que je ne maîtrise absolument pas les "Objets" et encore moins leur manipulation.....

    Donc aujourd'hui, impossible pour moi de mettre une nouvelle image:

    Voici le code que j'ai utilisé:

    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
    Private Sub CommandButton2_Click()
     
    Dim pathFichier As String, New_Pict As String, tmpStr() As String
    Dim Nbr_Pict
    Dim Exist_Pict
    Dim Tmp_Name
    Dim New_Name
    pathFichier = ""
    'tmpStr = ""
    New_Pict = ""
    pathFichier = Application.GetOpenFilename
    tmpStr = Split(pathFichier, "\")
    New_Pict = tmpStr(UBound(tmpStr))
     
    Nbr_Pict = 0
     
    For Each Exist_Pict In Sheets("Pictogrammes").OLEObjects
    Nbr_Pict = Nbr_Pict + 1
    Next
     
    Nbr_Pict = Nbr_Pict + 1
     
    New_Name = "Image" & Nbr_Pict
     
    Dim Img As Object
    Set Img = Sheets("Pictogrammes").OLEObjects(New_Name).Object
    Img.Picture = LoadPicture(pathFichier)
     
    End Sub
    Bien entendu j'ai un plantage....

    Je ne sais pas ajouter une nouvelle image, pour l’instant j'ai juste réussi à remplacer l'image contenu dans mon dernier contrôle image....

    Si tu as une méthode pour utiliser des image (Shape je crois) plutôt que des contrôles image, ce serait plus simple pour moi pour la suite...

    Il faut que j'oublie les copier coller utilisant librairie car ce fichier excell sera distribué sur des postes différents donc risque de problème suivant les versions 32 ou 64....

    Je te remercie.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    En #5, j'avais mis un fichier exemple téléchargeable ne comportant que des images et aucun contrôle image. En plus il utilise un SEUL userform.

    Je ne me souci aucunement des noms des images. Seule leur position sur les colonnes de la feuille Pictogrammes importe.

Discussions similaires

  1. afficher des données en dynamique dans un gridview
    Par DeveloppeurWeb dans le forum VB.NET
    Réponses: 0
    Dernier message: 05/07/2011, 18h48
  2. [Débutant] Comment afficher plusieurs images dans des axes differents
    Par DOUBLE_H dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 07/06/2011, 23h22
  3. Réponses: 0
    Dernier message: 30/11/2009, 09h50
  4. Créer des controles utilisateur dynamique
    Par oclone dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/10/2008, 13h42
  5. Réponses: 9
    Dernier message: 28/10/2005, 13h48

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