Bien qu’il ne soit pas souvent nécessaire de contrôler les images ou les images dans Excel, en fonction du nombre de recherches Google sur ce sujet, c’est clairement quelque chose sur lequel les gens veulent en savoir plus. Cet article sert de référence pour couvrir la plupart des scénarios que nous sommes susceptibles de rencontrer pour copier, insérer, déplacer, supprimer et contrôler des images.
Adapter le code à vos besoins
Il est peu probable que l’un des codes réponde exactement à vos exigences. Chaque extrait de code utilise des variables pour contenir l’image, la feuille de calcul, une plage ou un objet. En modifiant ces variables, le code peut facilement être modifié et combiné avec d’autres extraits de code pour répondre à vos besoins spécifiques.
Insérer une image dans une feuille de calcul
Le code suivant insérera une image dans la cellule active de la feuille de calcul active, en conservant la taille de l’image d’origine.
Sub InsertImage() Dim ws As Worksheet Dim imagePath As String Dim imgLeft As Double Dim imgTop As Double Set ws = ActiveSheet imagePath = "C:UsersmarksDocumentsmyImage.png" imgLeft = ActiveCell.Left imgTop = ActiveCell.Top 'Width & Height = -1 means keep original size ws.Shapes.AddPicture _ fileName:=imagePath, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Width:=-1, _ Height:=-1 End Sub
Selon nos besoins, il peut être préférable de créer une image directement dans une variable objet. Ensuite, nous pouvons faire référence à l’image en utilisant la variable et n’avons pas besoin de connaître le nom de l’image. Le code suivant est un exemple de cette technique.
Sub InsertImageToDeclaredVariable() Dim myImage As Shape Dim ws As Worksheet Dim imagePath As String Dim imgLeft As Double Dim imgTop As Double Set ws = ActiveSheet imagePath = "C:UsersmarksDocumentsmyImage.png" imgLeft = ActiveCell.Left imgTop = ActiveCell.Top Set myImage = ws.Shapes.AddPicture( _ Filename:=imagePath, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=imgLeft, _ Top:=imgTop, _ Width:=-1, _ Height:=-1) 'Use the variable for the created image MsgBox myImage.Name End Sub
Noms des images
Le code ci-dessous affichera le nom de la dernière image insérée.
La boîte de message est pour illustrer que le code fonctionne. Une fois que nous avons capturé la forme en tant qu’objet dans le monde réel, nous effectuerions d’autres actions sur la forme.
Sub GetNameOfLastInsertedImage() Dim myImage As Shape Set myImage = ActiveSheet.Shapes(ActiveSheet.Shapes.Count) MsgBox myImage.Name End Sub
Le code ci-dessous renomme une image existante.
Sub RenameImage() Dim myImage As Shape Dim ws As Worksheet Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 2") myImage.Name = "New Image Name" End Sub
Obtenir les propriétés de l’image
Le code suivant montre comment récupérer les propriétés d’image courantes
Sub GetImageProperties() Dim myImage As Shape Dim ws As Worksheet Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 1") MsgBox "Top: " & myImage.Top & vbNewLine & _ "Left: " & myImage.Left & vbNewLine & _ "Width: " & myImage.Width & vbNewLine & _ "Height: " & myImage.Height & vbNewLine & _ "Z-Order: " & myImage.ZOrderPosition & vbNewLine & _ "Name: " & myImage.Name & vbNewLine & _ "Top Left Cell: " & myImage.TopLeftCell & vbNewLine End Sub
Supprimer une image
Le code suivant supprimera une image appelée Image 1 de la feuille de calcul active.
Sub DeleteImage() Dim myImage As Shape Dim ws As Worksheet Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 1") myImage.Delete End Sub
Rendre les images invisibles
Les images peuvent être rendues invisibles. Ils existent toujours et font partie du classeur, mais ils ne sont pas visibles pour l’utilisateur.
Sub MakeImageInvisible() Dim myImage As Shape Dim ws As Worksheet Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 1") myImage.Visible = msoFalse 'Make the image visible again 'myImage.Visible = msoTrue End Sub
Parcourir toutes les images d’une feuille de calcul
Le code suivant parcourt toutes les images de la feuille active.
Sub LoopThroughImagesOnWs() Dim shp As Shape Dim ws As Worksheet Set ws = ActiveSheet For Each shp In ws.Shapes If shp.Type = msoPicture Then 'Do something to the image 'Example, show message box MsgBox shp.Name & " is a picture" End If Next shp End Sub
Supprimer une image
Le code ci-dessous supprimera une image nommée spécifique.
Sub DeletePicture() Dim myImage As Shape Set myImage = ActiveSheet.Shapes("Picture 1") myImage.Delete End Sub
Confirmez si l’objet sélectionné est une image
Le code ci-dessous vérifiera si un objet spécifique est une image.
Sub CheckIfSelectionIsPicture() Dim thing As Object Set thing = Selection If TypeName(thing) = "Picture" Then MsgBox "Selection is a picture" Else MsgBox "Selection is NOT a picture" End If End Sub
Images liées
Les images peuvent être liées à des cellules ou à des plages nommées. Cela rend l’image dynamique; lorsque le contenu des cellules change, l’image change également.
Sub MakeImageLinkedPicture() Dim ws As Worksheet Set ws = ActiveSheet ws.Pictures("Picture 1").Formula = "=A1:D10" End Sub
Options de placement et de verrouillage de l’image
Le comportement de l’image peut être contrôlé à l’aide de l’option de placement.
Sub ImagePlacementAndLockingOptions() Dim myImage As Shape Dim ws As Worksheet Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 1") 'Image placement options myImage.Placement = xlFreeFloating 'The other placement options are: 'xlMoveAndSize 'xlMove 'Locking images (prevent editing image when worksheet protected) myImage.Locked = True 'The other placement options are: 'myImage.Locked = False End Sub
Faire pivoter les images
Le code suivant fait pivoter l’image d’un montant spécifique
Sub RotateImageIncremental() Dim myImage As Shape Dim rotationValue As Integer Set myImage = ActiveSheet.Shapes("Picture 1") rotationValue = 45 'Rotate the image by the amount specified by the rotationValue myImage.IncrementRotation (rotationValue) End Sub
Le code suivant fait pivoter l’image à un montant spécifique.
Sub RotateImageAbsolute() Dim myImage As Shape Dim rotationValue As Integer Set myImage = ActiveSheet.Shapes("Picture 2") rotationValue = 90 'Rotate the image to the amount specified by the rotationValue myImage.rotation = rotationValue End Sub
Définir la position de l’image au centre d’une cellule
Une image est positionnée en fonction du haut et de la gauche de cette image. Le code suivant définira la position afin qu’elle apparaisse centrée dans une cellule spécifique.
Sub CenterInCell() Dim myImage As Shape Dim cellLocation As Range Set myImage = ActiveSheet.Shapes("Picture 1") Set cellLocation = ActiveSheet.Range("B4") myImage.Top = cellLocation.Top + (cellLocation.Height / 2) - (myImage.Height / 2) myImage.Left = cellLocation.Left + (cellLocation.Width / 2) - (myImage.Width / 2) End Sub
Générez un code VBA précis en quelques secondes avec AutoMacro
AutoMacro est un puissant générateur de code VBA qui est livré avec une bibliothèque de code étendue et de nombreux autres outils et utilitaires permettant de gagner du temps.
Que vous soyez un codeur expérimenté cherchant à gagner du temps ou un débutant essayant simplement de faire fonctionner les choses, AutoMacro est l’outil qu’il vous faut.
Retourner une image horizontalement ou verticalement
Retourner l’image horizontalement:
Sub FlipImageHorizontal() Dim myImage As Shape Set myImage = ActiveSheet.Shapes("Picture 1") myImage.Flip msoFlipHorizontal End Sub
Retourner l’image verticalement:
Sub FlipImageVertical() Dim myImage As Shape Set myImage = ActiveSheet.Shapes("Picture 1") myImage.Flip msoFlipVertical End Sub
Redimensionner une image
Le code ci-dessous verrouille le rapport hauteur / largeur; par conséquent, le redimensionnement de la largeur ou de la hauteur conservera les proportions de l’image.
Sub ResizeImageLockAspectRatio() Dim myImage As Shape Dim imageWidth As Double Set myImage = ActiveSheet.Shapes("Picture 1") imageWidth = 100 myImage.LockAspectRatio = msoTrue myImage.Width = imageWidth End Sub
Lors du réglage du rapport hauteur / largeur sur msoFalse, la hauteur et la largeur fonctionnent indépendamment.
Sub ResizeImageHeightOrWidth() Dim myImage As Shape Dim imageWidth As Double Dim imageHeight as Double Set myImage = ActiveSheet.Shapes("Picture 1") imageWidth = 100 imageHeight = 50 myImage.LockAspectRatio = msoFalse myImage.Width = imageWidth myImage.Height = imageHeight End Sub
Le code suivant positionne une image et l’étire pour couvrir parfaitement une plage spécifiée.
Sub StretchImageToCoverCells() Dim myImage As Shape Dim ws As Worksheet Dim rng As Range Set ws = ActiveSheet Set myImage = ws.Shapes("Picture 1") Set rng = ws.Range("A2:D10") myImage.LockAspectRatio = msoFalse myImage.Left = rng.Left myImage.Top = rng.Top myImage.Width = rng.Width myImage.Height = rng.Height End Sub
Recadrage
Le code ci-dessous rogne une image en fonction de la distance du haut, de la gauche, du bas ou de la droite.
Sub CropImage() Dim myImage As Shape Set myImage = ActiveSheet.Shapes("Picture1") myImage.PictureFormat.CropLeft = 50 myImage.PictureFormat.CropTop = 50 myImage.PictureFormat.CropRight = 50 myImage.PictureFormat.CropBottom = 50 End Sub
Modification de l’ordre Z
L’image peut être déplacée vers l’avant ou vers l’arrière dans la pile d’objets (appelée ordre Z).
Sub ChangeZOrderRelative() Dim myImage As Shape Set myImage = ActiveSheet.Shapes("Picture 1") myImage.ZOrder msoBringForward 'Alternative send backward 'myImage.ZOrder msoSendBackward End Sub
La position de l’ordre Z ne peut pas être définie directement. Tout d’abord, envoyez l’image vers l’arrière, puis déplacez l’image vers l’avant avec une boucle. Continuez à boucler jusqu’à ce que l’image atteigne la position d’ordre Z correcte.
Sub ChangeZOrderAbsolute() Dim myImage As Shape Dim imageWidth As Double Dim imageZPosition As Integer Set myImage = ActiveSheet.Shapes("Picture 1") imageZPosition = 3 'Force z-order to zero then bring forward myImage.ZOrder msoSendToBack Do While myImage.zOrderPosition < imageZPosition myImage.ZOrder msoBringForward Loop End Sub
Définir l’image d’arrière-plan
L’image d’arrière-plan apparaît derrière les cellules de la feuille de calcul.
Sub SetImageBackground() Dim ws As Worksheet Dim imgPath As String Set ws = ActiveSheet imgPath = "C:UsersmarksDocumentsmyImage.png" ws.SetBackgroundPicture fileName:=imgPath 'Remove the background image 'ws.SetBackgroundPicture fileName:=" End Sub
Enregistrer l’image à partir d’Excel
Si nous avons une image dans un classeur Excel, il n’y a pas de moyen simple de l’enregistrer sur le disque en tant qu’image. Une solution de contournement courante consiste à définir l’image comme arrière-plan d’une zone de graphique, puis à exporter le graphique en tant qu’image.
Sub SavePictureFromExcel() Dim myPic As Shape Dim tempChartObj As ChartObject Dim savePath As String Set myPic = ActiveSheet.Shapes("Picture 1") Set tempChartObj = ActiveSheet.ChartObjects.Add(0, 0, myPic.Width, myPic.Height) savePath = "C:UsersmarksDownloadsmySavedPic.jpg" 'Copy picture into chart, then export chart myPic.Copy tempChartObj.Chart.ChartArea.Select tempChartObj.Chart.Paste tempChartObj.Chart.Export savePath tempChartObj.Delete End Sub
N’oubliez pas:
Si vous avez trouvé cet article utile ou si vous avez une meilleure approche, veuillez laisser un commentaire ci-dessous.
Avez-vous besoin d’aide pour l’adapter à vos besoins?
Je suppose que les exemples de cet article ne correspondaient pas exactement à votre situation. Nous utilisons tous Excel différemment, il est donc impossible d’écrire un article qui répondra aux besoins de chacun. En prenant le temps de comprendre les techniques et principes de cet article (et ailleurs sur ce site) vous devriez pouvoir l’adapter à vos besoins.
Mais si vous avez encore du mal :
- Lisez d’autres blogs ou regardez des vidéos YouTube sur le même sujet. Vous en bénéficierez beaucoup plus en découvrant vos propres solutions.
- Demandez le «Excel Ninja» dans votre bureau. C’est incroyable ce que les autres savent.
- Posez une question dans un forum Excel, ou la Communauté Microsoft Answers. N’oubliez pas que les personnes présentes sur ces forums donnent généralement leur temps gratuitement. Veillez donc à rédiger votre question, assurez-vous qu’elle est claire et concise. Répertoriez toutes les choses que vous avez essayées et fournissez des captures d’écran, des segments de code et des exemples de classeurs.