Bonjour,
Je pense avoir (enfin!) compris comment cela fonctionne, et je m'étais compliqué la vie pour rien. La solution de Rouge marche en effet très bien et sans recours à
.Top = .TopLeftCell.Top ni .Left = .TopLeftCell.Left
Merci encore pour votre aide
Voici la macro :
' 2 onlets concernés
' Identité ou l'on trouve le nom de la personne concernée par la photo
' Trombi ou sera stockée la photo avec un emplacement réservé pour chaque personne
' la photo sera recherchée sur un répertoire quelconque
Sub newphoto()
'ouverture de la fenetre de selection des fichiers
' recherche dans un répertoire de la photo concernée
sfilter = "Excel Files (*.png), *.png"
messources = Application.GetOpenFilename(FileFilter:=sfilter, FilterIndex:=1, Title:="Selection des fichiers", MultiSelect:=True)
' ______________________________________________________________________________
For i = LBound(messources) To UBound(messources)
varnam = messources(i) ' path + nom + suffixe
varnamx = Mid(varnam, 44, 50) ' nom + suffixe
varnamy = Left(varnamx, Len(varnamx) - 4) ' nom
varnamz = "PW_" & varnamy ' nom préfixé
Next i
Sheets("Identité").Select ' onglet ou se trouve, sur la ligne courante, le nom de la photo
' le nom de la forme correspondant à la photo est "PW_nom_personne"
addr1 = "AA" & ActiveCell.Row
nameph0 = Range(addr1) ' nom de la photo à supprimer
' adresse de la photo à supprimer puis à recréer dans onglet trombi
addr2 = "Z" & ActiveCell.Row
nameph2 = Range(addr2)
Sheets("TROMBI").Select ' onglet ou sera stocké la photo
On Error GoTo bypass ' au cas ou la photo dans trombi a déjà été supprimée
ActiveSheet.Shapes.Range(Array(nameph0)).Select ' proteger par un on error goto
Selection.Delete
bypass:
' #########################################################
Dim GES As Object
Range(nameph2).Select ' emplacement de la photo dans onglet Trombi
Set GES = Sheets("Trombi").Pictures.Insert(varnam)
GES.Name = varnamz
ActiveSheet.Shapes.Range(Array(GES.Name)).Select
Selection.ShapeRange.Height = 77.9527559055 ' taille unifiée pour toutes les photos
Selection.ShapeRange.Width = 58.3937007874
' GES.Top = Range(nameph2) 'lignes inutiles du fait du range(nameph2) avant le SET GES
' GES.Left = Range(nameph2) ' ""
fin_nph:
End Sub