 
 
  |  | auteur : SilkyRoad |  
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 |  
Sub InsertionImage()
    Dim Emplacement As Range
    Dim Img As Object
    Dim ShapeObj As Shape
    
    
    For Each ShapeObj In ActiveSheet.Shapes
        If ShapeObj.Name = "Cible" Then ActiveSheet.Shapes("Cible").Delete
    Next ShapeObj
    
    If Application.Dialogs(xlDialogInsertPicture).Show Then
        
        Set Emplacement = Range("D3:E8")
        
        Set Img = ActiveSheet.DrawingObjects(ActiveSheet.Shapes.Count)
        
        With Img.ShapeRange
            
            .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 |  
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 |  
Sub AjoutImageFeuille_V02()
    Dim Shp As Shape
    Dim Fichier As String
    
    Fichier = "C:\Documents and Settings\mimi\dossier\Image2.jpg"
    
    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 |  
Sub AjoutImageFeuille_V03()
    Dim Shp As Shape
    Dim Fichier As String
    
    Fichier = "http://www.developpez.com/template/logo.gif"
    Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 0, 0, 150, 70)
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
La macro boucle sur les images de la feuille et les enregistre sur le disque dur au format GIF.
  
 | Vba |  
Sub ExtractionImagesFeuille()
    Dim Pict As Picture
    Dim Nb As Byte
    
    Application.ScreenUpdating = False
    
    For Each Pict In Worksheets("Feuil1").Pictures
        Pict.CopyPicture 
        
        With Worksheets("Feuil1").ChartObjects.Add(0, 0, Pict.Width, Pict.Height).Chart
            .Paste 
            
            .Export ThisWorkbook.Path & "\" & Pict.Name & ".gif", "GIF"
        End With
        
        
        Nb = Worksheets("Feuil1").ChartObjects.Count
        Worksheets("Feuil1").ChartObjects(Nb).Delete
    Next Pict
    
    Application.ScreenUpdating = True
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
Dans cet procédure, une image de la plage A1:B5 est collée dans la feuille de calcul.
  
 | Vba |  
Sub ImagePlageCellules()
    
    Worksheets("Feuil1").Range("A1:B5").CopyPicture
    
    Worksheets("Feuil1").Paste
    
    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 |  
Sub exporter_Feuille_ImageJPG()
Dim Ligne As Integer, Colonne As Integer
Application.ScreenUpdating = False
Feuil1.UsedRange.CopyPicture
Feuil1.Paste
Ligne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), SearchDirection:=xlPrevious).Row + 1
Colonne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), SearchDirection:=xlPrevious).Column + 1
With Feuil1.ChartObjects.Add(0, 0, Cells(Ligne, Colonne).Left, Cells(Ligne, Colonne).Top).Chart
    .Paste
    
    .Export ThisWorkbook.Path & "\monImage.jpg", "JPG"
End With
With Feuil1
    
    .ChartObjects(Feuil1.ChartObjects.Count).Delete
    
    .Shapes(Feuil1.Shapes.Count).Delete
End With
Application.ScreenUpdating = True
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  | Vba |  
Sub SupprimerImagesFeuille()
    Dim Sh As Shape
    
    For Each Sh In Worksheets("Feuil1").Shapes
        If Sh.Type = msoPicture Then Sh.Delete
    Next
End Sub
  |  
  |  
  |  | auteur : 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.
 
  |  
  |  | auteur : 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 |  
=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 |  
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
  |  
 
  |  
  |  | auteur : SilkyRoad |  
	Cette méthode simple fonctionne uniquement pour les formats JPG, jpeg, gif et bmp.
  
 | Vba |  
Sub DimensionsImage()
    
        
        
        
        
    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
  |  
  |  
 
 
 
						Consultez les autres F.A.Q's
					 
 Les sources présentés sur cette pages sont libre de droits,
			et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
			Copyright ©2008 
			Developpez LLC. Tout droits réservés Developpez LLC.
			Aucune reproduction, même partielle, ne peut être faite de ce site et de
			l'ensemble de son contenu : textes, documents et images sans l'autorisation
			expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
			de prison et jusqu'à 300 000 E de dommages et intérets.
			Cette page est déposée à la SACD. 
												 |