1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| Public Function BoucleImagesFeuille(s_NomFeuille As String, i_Colonne As Integer) As Integer
'---A J O U T 1 ---
Dim tabGroup As Variant
tabGroup = Array()
'----F I N A J O U T 1 -------------
Dim Obj As Shape
Dim i_Iteration As Integer
Application.DisplayAlerts = True
Application.ScreenUpdating = False
Sheets("DonneesFeuille").Cells.Columns(i_Colonne).ClearContents
' un groupe de forme est considéré comme une seule forme
'Compte le nombre de formes dans la feuille
Sheets("DonneesFeuille").Cells(1, i_Colonne + 1).Value = _
Worksheets(s_NomFeuille).Shapes.Count & " forme(s) avant dégroupage"
'Boucle sur les formes contenues dans la feuille
i_Iteration = 0
'---A J O U T 2---
' S'il y a des formes groupées, on cherche le nom de la dernière forme
'pour pouvoir regrouper plus tard et on place cette valeur dans un tableau
'dynamique
For Each Obj In Worksheets(s_NomFeuille).Shapes
If Obj.Type = msoGroup Then
ReDim Preserve tabGroup(UBound(tabGroup) + 1)
tabGroup(UBound(tabGroup)) = Obj.GroupItems(Obj.GroupItems.Count).Name
End If
Next
' une autre boucle pour dissocier les groupes
For Each Obj In Worksheets(s_NomFeuille).Shapes
If Obj.Type = msoGroup Then Obj.Ungroup
Next
'Maintenant on peut compter le nombre de formes dans la feuille et de groupes
Sheets("DonneesFeuille").Cells(2, i_Colonne + 1).Value = _
Worksheets(s_NomFeuille).Shapes.Count & " forme(s) après dégroupage"
Sheets("DonneesFeuille").Cells(3, i_Colonne + 1).Value = _
UBound(tabGroup) + 1 & " groupe(s)"
'----F I N A J O U T 2-------------
For Each Obj In Worksheets(s_NomFeuille).Shapes
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Name
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Height
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Width
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Top
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.Left
'là je sais que c'est un objet groupé mais je n'ai pas accès aux "zone text"
' Normal l'objet groupé est considéré comme seul
'comparez les Shapes.Count
If InStr(Obj.Name, "Text Box") >= 1 Or InStr(Obj.Name, "Group") >= 1 Then
i_Iteration = i_Iteration + 1
Sheets("DonneesFeuille").Cells(i_Iteration, i_Colonne).Value = Obj.AlternativeText
End If
''''''Application.ScreenUpdating = True
Next Obj
'---A J O U T 3 ---
'on regroupe les formes
'on sélectionne la feuille
Worksheets(s_NomFeuille).Select
'on initialise la cellule active pour ne pas rester sur une forme à la fin de la macro
AC = ActiveCell.Address
For g = 0 To UBound(tabGroup)
Worksheets(s_NomFeuille).Shapes(tabGroup(g)).Select
Selection.ShapeRange.Regroup
Next g
Application.Goto Range(AC)
'----F I N A J O U T 3-------------
Application.ScreenUpdating = True
BoucleImagesFeuille = 1
End Function |
Partager