J'ai fait un petit programme vba pour remplir une plage de cellule avec une image importée (avec rognage et redimensionnement en fonction de la plage), mais des décalages inconsistants apparaissent constamment. Parfois dans un sens parfois dans l'autre, parfois l'image est plus grande ou plus petite que la plage selectionnée
Code vba déclanché par double clic sur une plage contenant un texte précis.
En desactivant certaiens actions, jeme rend compte que c'est ni l'importantion ni le rognage qui pose proble, mais le redimentionnement, qui ne parait pourtant pas le plus compliqué.
la partie concernée :
Code vba déclanché par double clic sur une plage contenant un texte précis.
VB:
Sub InsertionImage()
Dim emplacement As Range
Dim Img As Object
Dim Imgr, ImgW2, ImgH2, emplr As String
'Dim ShapeObj As Shape
If Application.Dialogs(xlDialogInsertPicture).Show Then
'D�finit l'emplacement de l'image
Set emplacement = ActiveCell.MergeArea
Set Img = ActiveSheet.DrawingObjects(ActiveSheet.Shapes.Count)
Imgr = (Img.Height / Img.Width)
emplr = (emplacement.Height / emplacement.Width)
With Img.ShapeRange
.LockAspectRatio = msoTrue
If Imgr >= emplr Then
.Left = emplacement.Left
.Top = emplacement.Top
.Width = emplacement.Width
ImgW2 = Img.Width
ImgH2 = Img.Height
.LockAspectRatio = msoFalse
.ScaleHeight (emplacement.Height / Img.Height), msoFalse, msoScaleFromTopLeft
.PictureFormat.Crop.PictureWidth = ImgW2
.PictureFormat.Crop.PictureHeight = ImgH2
.PictureFormat.Crop.PictureOffsetX = 0
.PictureFormat.Crop.PictureOffsetY = 0
Else
.Left = emplacement.Left
.Top = emplacement.Top
.Height = emplacement.Height
ImgW2 = Img.Width
ImgH2 = Img.Height
.LockAspectRatio = msoFalse
.ScaleWidth (emplacement.Width / Img.Width), msoFalse, msoScaleFromTopLeft
.PictureFormat.Crop.PictureWidth = ImgW2
.PictureFormat.Crop.PictureHeight = ImgH2
.PictureFormat.Crop.PictureOffsetX = 0
.PictureFormat.Crop.PictureOffsetY = 0
End If
End With
Else
MsgBox "Insertion d'image interrompue."
End If
End Sub
En desactivant certaiens actions, jeme rend compte que c'est ni l'importantion ni le rognage qui pose proble, mais le redimentionnement, qui ne parait pourtant pas le plus compliqué.
la partie concernée :
VB:
With Img.ShapeRange
.LockAspectRatio = msoTrue
If Imgr >= emplr Then
.Left = emplacement.Left
.Top = emplacement.Top
.Width = emplacement.Width
Else
.Left = emplacement.Left
.Top = emplacement.Top
.Height = emplacement.Height
End if
End with
Pièces jointes
Dernière édition: