Code VBA pour insérer, déplacer, supprimer

 

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

AutoMacroExample

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 :

  1. 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.
  2. Demandez le «Excel Ninja» dans votre bureau. C’est incroyable ce que les autres savent.
  3. 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.

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *