Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion d'affichage d'image dans cellule

6 réponses
Avatar
Alex
Bonjour =E0 tous,

Je rencontre un probl=E8me de positionnement d'affichage d'image sur une
feuille, et m'en explique.
Depuis un formulaire vba, l'utilisateur peut selectionner une photo.
Ce la rappatrie automatiquement le chemin d'acc=E8s.
Quand la personne valide les informations saisies se positionne sur
une feuille sur la ligne n+1 (creation d'une nouvelle ligne), j'ai
=E9crit ceci :

nbligne =3D Range("B1").CurrentRegion.Rows.Count
i =3D nbligne + 1
If Me.CheminPhot <> "" Then
Cells(i, 1).Value =3D Me.CheminPhot
img =3D Cells(i, 1).Value
Set monimage =3D ActiveSheet.Pictures.Insert(img)
monimage.Height =3D ActiveCell.Height
monimage.Width =3D ActiveCell.Width
end if

Cela fonctionne tr=E8s bien, =E0 un d=E9tail pr=E8s l'image se positionne
toujours en A1 et non sur ma ligne i.

Quelqu'un aurait il une id=E9e de solution =E0 mon probl=E8me.

Merci par avance de votre aide.
Cordialement.
Alex

6 réponses

Avatar
MichD
Bonjour,

Ajoute ces 2 lignes à cette section de ta procédure :

Set monimage = ActiveSheet.Pictures.Insert(img)
monimage.Height = ActiveCell.Height
monimage.Width = ActiveCell.Width
monimage.Left = ActiveCell.Left '<<<==== monimage.Top = ActiveCell.Top '<<<====

MichD
---------------------------------------------------------------
Avatar
Alex
Bonjour,

Merci pour la réponse. Malheureusement l'image se positionne toujours
en A1, j'ai également tenté de remplacé ActiveCell par Cells(i,1) :

Set monimage = ActiveSheet.Pictures.Insert(img)
monimage.Height = Cells(i, 1).Height
monimage.Width = Cells(i, 1).Width

monimage.Left = Cells(i, 1).Left
monimage.Top = Cells(i, 1).Top

Mais également elle se positionne en A1.

Merci d'avance de votre aide.
Cordialement.
Alex
Avatar
MichD
Il n'y a pas de raison pourquoi ceci ne devrait pas fonctionner....

'----------------------------------------------------
Sub test()
Dim i As Long, MonImage As Picture
Dim Img As String
With Worksheets("Feuil1") 'Adapte le nom de la feuille
i = .Range("A65536").End(xlUp).Row + 1
If Me.CheminPhot <> "" Then
.Range("A" & i).Value = "toto" ' Me.CheminPhot
Img = .Range("A" & i).Value
Set MonImage = .Pictures.Insert(Img)
MonImage.ShapeRange.LockAspectRatio = msoFalse
With .Range("A" & i)
MonImage.Height = .Height
MonImage.Width = .Width
MonImage.Top = .Top
MonImage.Left = .Left
End With
End If
End With
End Sub
'----------------------------------------------------


MichD
---------------------------------------------------------------
Avatar
Alex
Re :
J'ai testé et cela bloque sur Set MonImage = .Pictures.Insert(Img)
Avec la souris en me positionnant sur la ligne, apparait le message suivant :
MonImage = Nothing, et le (img) apporte bien le l'adresse du lien
Sur le message "Debogage" :

Erreur d'excution 1004
Impossible de lire propriété Insert de la classe Pictures

Si cela avait fonctionné, est que cela aurait voulu dire qu'il faille que je corrige mes lignes avec : cells(i,X) par des Range("A" & i) ?

Merci d'avance pour ta réponse.
Bien cordialement.
Alex
Avatar
MichD
Ceci a été testé avec Excel 2010 et cela fonctionne très bien.

Cette ligne a été désactivée, car elle fait référence à un contrôle
de ton formulaire que je n'ai pas...
'If Me.CheminPhot <> "" Then

' pour cette ligne de code :
.Range("A" & i).Value = "toto" ' Me.CheminPhot
Observe bien, j'ai mis "toto" car encore une fois
le contrôle "Me.CheminPhot" n'existe pas dans mon
environnement. À modifier dans ton application!

'Ceci est un fichier image sur mon ordinateur
Img = "C:UsersMichDPicturesIMG.bmp"

Que tu utilises "Cells()" ou "Range" n'a pas d'importance
pourvu que tu fasses référence à la cellule de la feuil1
ou celle que tu as utilisée dans ton application.

Quand cette ligne de code tombe en erreur, quelle est la valeur
de la variable "Img" ? Est-ce que le chemin et le nom de l'image
+ extension du fichier existe réellement?

'-------------------------------------------------------
Sub test()
Dim i As Long, MonImage As Picture
Dim Img As String
With Worksheets("Feuil1") 'Adapte le nom de la feuille
i = .Range("A65536").End(xlUp).Row + 1
'If Me.CheminPhot <> "" Then
.Range("A" & i).Value = "toto" ' Me.CheminPhot
Img = "C:UsersMichDPicturesIMG.bmp" ' .Range("A" & i).Value
Set MonImage = .Pictures.Insert(Img)
MonImage.ShapeRange.LockAspectRatio = msoFalse
With .Range("A" & i)
MonImage.Height = .Height
MonImage.Width = .Width
MonImage.Top = .Top
MonImage.Left = .Left
End With
' End If
End With
End Sub
'-------------------------------------------------------


MichD
---------------------------------------------------------------
Avatar
Alex
La cela fonctionne, je n'avais sans doute pas bien fait les
adaptations de la macro.
Merci beaucoup.
Alex