@Johnny,
concernant vos questions sur les formes, ceci est peut-être une application plus simple pour créer des nouvelles formes
Sub MonDuplicate()
'***********************************************************************************
'le but est de créer un shape unique de la forme voulu (ici msoShapeFlowchartOr avec des dimensions minimales
'Puis on sait faire autant de copies que vous voulez.
'Avec ce copie, c'est vraiment facile de le positionner sur les coordinates X&Y
'Et puis on agrandit à partir du centre, largeur et hauteur indépendant ou en proportion.
'***********************************************************************************
With Sheets("Blad1")
For Each shp In .Shapes
If StrComp(shp.Name, "Duplicate", 1) = 0 Then shp.Delete 'pour avoir un shape "unique" Duplicate
Next
'msoShapeFlowchartOr >>> choisir le bon format
With .Shapes.AddShape(msoShapeFlowchartOr, 1, 1, 0.1, 0.1) 'largeur et hauteur sont vraiment minimal !!!, position XY n'a pas d'importance
.Name = "Duplicate"
.LockAspectRatio = msoTrue 'largeur et hauteur : msoTrue= les 2 changent en proportion, msoFalse = les 2 sont indépendant
'.... 'éventuellement d'autres propriétés communs (couleur intérieur, bordures, ...)
End With
End Sub
End Sub
Sub Nouveau_Shape()
'***************************************************************************************
'on copie&colle(=duplicate) l'origine, on le déplace et change ses dimensions
'comme les dimensions sont du centre ("msoScaleFromMiddle"), le centre du shape reste le même
'c'est à dire qu'on ne doit plus faire le décalage avec la moitié du largeur et hauteur pou savoir le point haut&gauche
'si ".LockAspectRatio = msoTrue", on ne change qu'une dimension
'***************************************************************************************
With Sheets("blad1")
With .Shapes("Duplicate").Duplicate 'copie&colle de l'origine
.Name = "Nom_du_Nouveau_shape" & Format(i, "000") 'avec i un numéro
.Left = x
.Top = y
.ScaleWidth MonLargeur, msoFalse, msoScaleFromMiddle 'agrandir avec le centre figé
.ScaleHeight MonHauteur, msoFalse, msoScaleFromMiddle 'si "lockratio=..." seulement un dès 2
End With
End With
End Sub