Images, Shapes et Cie

Anonyme
2020-10-26T14:43:06+00:00

Bonjour,

Dans Excel VBA, j'aimerais insérer dans un label ou dans un bouton, une image qui est dans un classeur (l'image est donc interne). J'ai lu plusieurs réponses sur plusieurs forums, mais franchement ils ne sont pas clairs. Les variables ne sont pas déclarées et on ne sait pas donc de quels types elles sont ni ce qu'elles font. J'ai également essayé de lire les documentations de Microsoft, mais elles manquent aussi de clarté à mon sens.

Par exemple, voici ce que j'ai trouvé:

Dim f

Private Sub UserForm_Initialize()

  Set f = Sheets("photos")

  For Each s In f.Shapes

    Me.ComboBox1.AddItem s.Name

  Next

End Sub

Private Sub ComboBox1_Change()

  Set s = f.Shapes(CStr(Me.ComboBox1))

  s.CopyPicture xlScreen, xlBitmap

  With s.Parent.ChartObjects.Add(0, 0, s.Width, s.Height).Chart

    While .Shapes.Count = 0

        DoEvents

        .Paste

    Wend

    .Export "monimage.jpg", "Jpg"

    .Parent.Delete

  End With

  Me.Image1.PictureSizeMode = fmPictureSizeModeZoom

  Me.Image1.Picture = LoadPicture("monimage.jpg")

  Kill "monimage.jpg"

End Sub

Quelqu'un peut-il m'expliquer ce code en détail ou en proposer un qui soit plus clair et mieux expliqué?

La partie que je ne comprends pas c'est celle en rouge.

Merci d'avance

Microsoft 365 et Office | Installer, entrer des clés, activer | Pour la maison | Autres

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

7 réponses

  1. DanielCo 107.7K Points de réputation
    2020-10-27T11:27:39+00:00

    Le chartobject est un type particulier de shape. Donc :

    • le chartobject contient le graphique (chart).
    • la feuille contient le chartobject.

    On retrouve cette hiérarchie dans la ligne :

    MsgBox ActiveSheet.ChartObjects(1).Chart.Name

    En ce qui concerne ton code, il fonctionne. Pour l'exécuter, j'ai utilisé un clic sur le userform :

    Private Sub UserForm_Click()

      giveATry

    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2020-10-27T09:36:35+00:00

    Je te fais une réponse dès que possible. Je n'ai pas le temps tout de suite.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire