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

FAQ Excel

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022 

 
OuvrirSommaireLes images

Sans macro, vous pouvez utiliser le menu Insertion/Images.
Sélectionnez l'image à partir de la boîte dialogue, puis cliquez sur le bouton OK pour valider.

L'exemple suivant reproduit la même opération par macro.
L'image sélectionnée sera en plus repositionnée sur la plage de cellules D3:E8. S'il y avait déjà une image à cet emplacement (et nommée "Cible"), celle ci sera préalablement supprimée.

Vba
Sélectionnez
Sub InsertionImage()
    Dim Emplacement As Range
    Dim Img As Object
    Dim ShapeObj As Shape
 
    'Boucle pour supprimer l'ancienne image
    For Each ShapeObj In ActiveSheet.Shapes
        If ShapeObj.Name = "Cible" Then ActiveSheet.Shapes("Cible").Delete
    Next ShapeObj
 
    If Application.Dialogs(xlDialogInsertPicture).Show Then
        'Définit l'emplacement de l'image
        Set Emplacement = Range("D3:E8")
 
        Set Img = ActiveSheet.DrawingObjects(ActiveSheet.Shapes.Count)
 
        With Img.ShapeRange
            'Nommer l'image insérée (Pour la supprimer plus facilement ensuite)
            .Name = "Cible"
            .LockAspectRatio = msoFalse
            .Left = Emplacement.Left
            .Top = Emplacement.Top
            .Height = Emplacement.Height
            .Width = Emplacement.Width
        End With
 
    Else
        MsgBox "Insertion d'image interrompue."
    End If
 
End Sub

Ces deux autres méthodes permettent aussi d'insérer une image dans la feuille de calcul :

L'élément masqué Pictures est pris en charge uniquement pour assurer une compatibilité descendante entre les différentes versions d'Excel. Il préférable d'utiliser la propriété Shapes (type msoPicture) dans vos nouveaux projets. Néanmoins comme l'élément Pictures fonctionne encore, il peut être intéressant de voir son fonctionnement.

Vba
Sélectionnez
Sub AjoutImageFeuille_V01()
    Dim Fichier As String
 
    Fichier = "C:\Documents and Settings\mimi\dossier\ Image2.jpg"
    Feuil1.Pictures.Insert Fichier
End Sub

Les exemples suivants montrent comment insérer une image à partir de la méthode AddPicture.

Vba
Sélectionnez
Sub AjoutImageFeuille_V02()
    Dim Shp As Shape
    Dim Fichier As String
 
    Fichier = "C:\Documents and Settings\mimi\dossier\Image2.jpg"
    'expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
    Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 0, 0, 100, 90)
End Sub

Vous pouvez vous en servir aussi pour insérer dans la feuille, une image stockée sur une page Web :

Vba
Sélectionnez
Sub AjoutImageFeuille_V03()
    Dim Shp As Shape
    Dim Fichier As String
 
    Fichier = "https://www.developpez.com/template/logo.gif"
    Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 0, 0, 150, 70)
End Sub
Créé le 14 mai 2007  par SilkyRoad

Ce problème peut se produire si l'image se trouve à un emplacement HTTP.

Pour contourner ce problème, codez la macro VBA pour insérer l'image comme une image de remplissage dans une forme tel qu'un rectangle.

Un exemple par macro en reprenant l'idée de l'aide Microsoft :

Vba
Sélectionnez
Dim strImage As String
Dim Sh As Shape
 
Set Sh = Worksheets("Feuil1").Shapes.AddShape(msoShapeRectangle, 40, 80, 140, 50)
 
strImage = "https://www.developpez.com/template/logo.gif"
Sh.Fill.UserPicture strImage
Créé le 26 mai 2008  par Microsoft, SilkyRoad

La macro boucle sur les images de la feuille et les enregistre sur le disque dur au format GIF.

Vba
Sélectionnez
Sub ExtractionImagesFeuille()
    Dim Pict As Picture
    Dim Nb As Byte
 
    Application.ScreenUpdating = False
 
    For Each Pict In Worksheets("Feuil1").Pictures
        Pict.CopyPicture 'copie l'image
 
        With Worksheets("Feuil1").ChartObjects.Add(0, 0, Pict.Width, Pict.Height).Chart
            .Paste 'colle l'image dans un graphique temporaire
            'Sauvegarde au format image, dans le même répertoire que ce classeur.
            .Export ThisWorkbook.Path & "\" & Pict.Name & ".gif", "GIF"
        End With
 
        'Supprime le graphique
        Nb = Worksheets("Feuil1").ChartObjects.Count
        Worksheets("Feuil1").ChartObjects(Nb).Delete
    Next Pict
 
    Application.ScreenUpdating = True
End Sub
Créé le 14 mai 2007  par SilkyRoad

Dans cet procédure, une image de la plage A1:B5 est collée dans la feuille de calcul.

Vba
Sélectionnez
Sub ImagePlageCellules()
    'La plage de cellules A1:B5 est copiée dans le Presse-papiers en tant qu'image.
    Worksheets("Feuil1").Range("A1:B5").CopyPicture
    'L'image est collée dans la feuille active
    Worksheets("Feuil1").Paste
    ' renomme l'image
    Selection.Name = "Image A1:B5"
End Sub

Dans cet autre exemple, une image de la feuille complète est créée puis enregistrée sur le disque dur.

Vba
Sélectionnez
Sub exporter_Feuille_ImageJPG()
Dim Ligne As Integer, Colonne As Integer
 
Application.ScreenUpdating = False
 
'Copie, en tant qu'image, les cellules utilisées dans la feuille.
Feuil1.UsedRange.CopyPicture
Feuil1.Paste
 
'Récupére la position des dernières lignes et colonnes utilisées.
'Cette information va servir à redimensionner la taille de l'image.
Ligne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), SearchDirection:=xlPrevious).Row + 1
Colonne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), SearchDirection:=xlPrevious).Column + 1
 
'Crée un graphique temporaire
With Feuil1.ChartObjects.Add(0, 0, Cells(Ligne, Colonne).Left, Cells(Ligne, Colonne).Top).Chart
    .Paste
    'exporte l'image sur le disque dur, dans le même répertoire que ce classeur.
    .Export ThisWorkbook.Path & "\monImage.jpg", "JPG"
End With
 
 
With Feuil1
    'Supprime le graphique temporaire
    .ChartObjects(Feuil1.ChartObjects.Count).Delete
    'Supprime l'image dans la feuille.
    .Shapes(Feuil1.Shapes.Count).Delete
End With
 
Application.ScreenUpdating = True
End Sub
Créé le 14 mai 2007  par SilkyRoad
Vba
Sélectionnez
Sub SupprimerImagesFeuille()
    Dim Sh As Shape
 
    For Each Sh In Worksheets("Feuil1").Shapes
        If Sh.Type = msoPicture Then Sh.Delete
    Next
End Sub
Créé le 14 mai 2007  par SilkyRoad

Une première solution de stockage consiste à enregistrer le fichier au format binaire dans une des feuilles de calcul. Vous pouvez ensuite reconstituer l'image et la visualiser en utilisant le contrôle WebBrowser :

Consultez le tutoriel.

Une deuxième possibilité consiste à stocker l'image GIF dans un contrôle ImageList.

Consultez le tutoriel.

Nota :
Le stockage d'images dans un classeur alourdit considérablement la taille en ko.
Il est toujours préférable, quand c'est possible, de stocker les images à l'extérieur du classeur et de les charger quand vous en avez besoin.

Créé le 14 mai 2007  par SilkyRoad

Oui, en utilisant par exemple la bibliothèque Windows Image Acquisition.

Créé le 14 mai 2007  par SilkyRoad

Téléchargez le classeur démo.
Le fichier zip contient une version xls et une version xlsx (Excel 2007).

Créé le 20 août 2007  par SilkyRoad

Une possibilité consiste à placer l'image dans un graphique et d'utiliser ensuite les évènements de ce dernier.
Cet exemple contient un plan de département. Le nom de la commune et le nombre de personnes s'affiche dans les cellules B8:B9 lorsque vous déplacez le curseur sur l'image sur un point précis (le graphique doit être préalablement activé).

Les villes à tester dans l'exemple :
Rambouillet
Mormant
Etampes
Versailles
Magny en Vexin
Nangis

Les données sources sont stockées dans l'onglet "Base".
Les colonnes x et y contiennent les coordonnées horizontales et verticales de chaque ville. Le code intègre aussi la modification éventuelle du zoom (mais pas le redimensionnement manuel du graphique).

Pour retrouver facilement les coordonnées d'autres villes, ou plus généralement d'un point dans l'image, utilisez :

La formule matricielle,

Vba
Sélectionnez
=INDEX($C$2:$C$7;EQUIV(1;($A$2:$A$7>=F1-((F1*5)/100))*($A$2:$A$7<=F1+((F1*5)/100))*($B$2:$B$7>=F2-((F2*5)/100))*
($B$2:$B$7<=F2+((F2*5)/100));0))

dans la cellule G1 de l'onglet "Base", permet d'identifier les croisements verticaux et horizontaux des points, (F1*5)/100 et (F2*5)/100 servants à définir la précision de proximité pour chaque position de la souris.

Vba
Sélectionnez
Private Sub Graph_MouseMove(ByVal Button As Long, ByVal Shift As Long, _
                    ByVal x As Long, ByVal y As Long)
 
    Dim ElementID As Long
    Dim Arg1 As Long, Arg2 As Long
 
 
    On Error Resume Next
    ActiveChart.GetChartElement x, y, ElementID, Arg1, Arg2
 
    Range("A14") = x
    Range("A15") = y
End Sub

Téléchargez le classeur démo.

Créé le 2 octobre 2007  par SilkyRoad

Cette méthode simple fonctionne uniquement pour les formats JPG, jpeg, gif et bmp.

Vba
Sélectionnez
Sub DimensionsImage()
    'Fonctionne pour les formats :
        'JPG
        'jpeg
        'gif
        'bmp
    Dim iPict As IPictureDisp
    Dim NomFichier As String
 
    NomFichier = "C:\dossier\lapin.jpg"
 
    Set iPict = LoadPicture(NomFichier)
    MsgBox Round((iPict.Width) / 21.16, 0) & " x " & Round((iPict.Height) / 21.16, 0)
 
    Set iPict = Nothing
End Sub
Créé le 19 février 2008  par SilkyRoad

clGdiPlus est un module de classe VBA pour faciliter l'utilisation de la librairie graphique gdiplus.dll (GDI+).

Vous pourrez en autre :
     Personnaliser la forme d'un formulaire
     Gérer les données Exif des images
     Développer un jeu de tir
     Inclure des images jpeg dans un objet OLE
     Créer une mosaïque de photos
     Afficher des informations sur une carte géographique
     Créer un Casse-brique

Consultez les tutoriels d'Arkham46

Créé le 20 septembre 2008  par Arkham46

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.