Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !
'Nécessite d'activer la référence 'Microsoft PowerPoint XX.0 Object Library'
Function MergeShapes(shpRange As Excel.ShapeRange, Optional MergeMode As Office.MsoMergeCmd = Office.MsoMergeCmd.msoMergeUnion) As Excel.Shape
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
Dim groupTopSheet As Single
Dim groupLeftSheet As Single
Dim groupTopSlide As Single
Dim groupLeftSlide As Single
Dim i As Long
On Error GoTo GestErr
'créer une nouvelle instance de PowerPoint
Set pptApp = CreateObject("PowerPoint.Application")
'créer une nouvelle présentation et un slide vide
Set pptPres = pptApp.Presentations.Add
Set pptSlide = pptPres.Slides.Add(1, 12) '12 = ppLayoutBlank
'initialiser la position (top/left) du groupe de forme sur la feuille excel
groupTopSheet = shpRange(1).Top
groupLeftSheet = shpRange(1).Left
With pptSlide
'boucler sur toutes les formes à grouper
For i = 1 To shpRange.Count
'copier la forme sur le slide
shpRange(i).Copy
.Shapes.Paste
'repositionner la forme par rapport à la première / mémoriser les position sur le slide
If i = 1 Then
groupTopSlide = .Shapes(i).Top
groupLeftSlide = .Shapes(i).Left
Else
.Shapes(i).Top = .Shapes(1).Top + shpRange(i).Top - shpRange(1).Top
.Shapes(i).Left = .Shapes(1).Left + shpRange(i).Left - shpRange(1).Left
If .Shapes(i).Top < groupTopSlide Then groupTopSlide = .Shapes(i).Top
If .Shapes(i).Left < groupLeftSlide Then groupLeftSlide = .Shapes(i).Left
End If
'recalculer la position du groupe de forme sur la feuille excel
If shpRange(i).Top < groupTopSheet Then groupTopSheet = shpRange(i).Top
If shpRange(i).Left < groupLeftSheet Then groupLeftSheet = shpRange(i).Left
Next i
'grouper les formes
groupTopSheet = groupTopSheet - groupTopSlide
groupLeftSheet = groupLeftSheet - groupLeftSlide
.Shapes.Range.MergeShapes MergeMode
'copier la/les forme(s) résultante(s) de l'opération de Merge
If .Shapes.Count > 1 Then .Shapes.Range.Group
groupTopSheet = groupTopSheet + .Shapes(1).Top
groupLeftSheet = groupLeftSheet + .Shapes(1).Left
.Shapes(1).Copy
End With
'copier la forme sur la feuille excel
With shpRange.Parent
.Paste
Set MergeShapes = .Shapes(.Shapes.Count)
End With
'repositionner la forme
MergeShapes.Top = groupTopSheet
MergeShapes.Left = groupLeftSheet
GestFin:
On Error Resume Next
Set pptSlide = Nothing
pptPres.Close
Set pptPres = Nothing
pptApp.Quit
Set pptApp = Nothing
Exit Function
GestErr:
Stop 'erreur à creuser
GoTo GestFin
End Function
Sub Test()
Dim shpRange As Excel.ShapeRange
Dim shpMerge As Excel.Shape
'récupérer les formes à grouper
Set shpRange = ActiveSheet.Shapes.Range(Array("Forme 1", "Forme 2"))
'créer la forme groupée et la renommer
Set shpMerge = MergeShapes(shpRange, msoMergeUnion)
shpMerge.Name = "Shp_Union"
Set shpMerge = Nothing
Set shpRange = Nothing
End Sub
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?
We use cookies and similar technologies for the following purposes:
Est ce que vous acceptez les cookies et ces technologies?