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: