Les objets groupés sur Excel
Comment gère t on les modifications sur les objets groupés. Exemple: une image avec deux "zone text"? Si je modifie le texte d'une des "zone text" comment je peut le voir par code?
Dans le code ci dessous, je scrute la feuille à activation et à la désactivation de celle ci, puis je compare pour voir les modifications.
Code:
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
| 'boucle sur les objets de la feuille
Public Function BoucleImagesFeuille(s_NomFeuille As String, i_Colonne As Integer) As Integer
Dim Obj As Shape
Dim i_Iteration As Integer
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Sheets("DonneesFeuille").Cells.Columns(i_Colonne).ClearContents
'Compte le nombre de formes dans la feuille
Sheets("DonneesFeuille").Cells(1, i_Colonne + 1).Value = Worksheets(s_NomFeuille).Shapes.Count
'Boucle sur les formes contenues dans la feuille
i_Iteration = 0
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"
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
Application.ScreenUpdating = True
BoucleImagesFeuille = 1
End Function |
L'objet group est considéré comme un seul objet
Voilà une piste pour ce que vous voulez. Je crois.
Code:
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 |
Salutations