Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
J'ai sur une feuille Excel un groupe de Zone Texte avec des noms de ville.
Est-il possible en VBA de copier l'ensemble des zone texte dans une colonne ex."B3"
Sub ListeTexteShapes()
Dim s As Shape, t$, a
Application.ScreenUpdating = False
On Error Resume Next 'si Groupe_Pays n'existe pas
With ActiveSheet
'---dégroupage---
.Shapes("Groupe_Pays").Ungroup
'---création de la liste---
For Each s In .Shapes
If s.Name Like "Rectangle*" Then
t = t & Chr(1) & s.TextFrame.Characters.Text
End If
Next
t = Mid(t, 2)
'---Groupage---
For Each s In .Shapes
If s.Name Like "Rectangle*" Then s.Select False
Next
Selection.ShapeRange.Group.Name = "Groupe_Pays"
ActiveCell.Activate
'---restitution en B3---
a = Split(t, Chr(1))
.Range("B3:B" & .Rows.Count) = "" 'RAZ
.[B3].Resize(UBound(a) + 1) = Application.Transpose(a)
.[B3].Resize(UBound(a) + 1).Sort .[B3], xlAscending, Header:=xlNo 'tri
End With
End Sub
Edit : bonjour NezQuiCoule, oui votre solution est plus simple, mais il faut qu'il n'y ait que des rectangles dans le groupe.
Pour éviter de dégrouper-regrouper, une solution qui fonctionne sur Excel 2003 :
Code:
Sub ListeTexteShapes()
Dim s As Shape, t$, a
Application.ScreenUpdating = False
With ActiveSheet
'---création de la liste---
For Each s In .Shapes("Groupe_Pays").GroupItems
s.Select
If s.Name Like "Rectangle*" Then _
t = t & Chr(1) & s.TextFrame.Characters.Text
Next
ActiveCell.Activate
t = Mid(t, 2)
a = Split(t, Chr(1))
'---restitution en B3---
.Range("B3:B" & .Rows.Count) = "" 'RAZ
.[B3].Resize(UBound(a) + 1) = Application.Transpose(a)
.[B3].Resize(UBound(a) + 1).Sort .[B3], xlAscending, Header:=xlNo
End With
End Sub
J'ai testé la dernière proposition de Job75 sous 2007 : C'est OK
Une variante de la même, sans transpose ni select:
VB:
Sub ListeTexteShapes_2()
Dim s As Shape, t As Variant, i&
With ActiveSheet
With .Shapes("Groupe_Pays")
ReDim t(1 To .GroupItems.Count, 1 To 2)
For Each s In .GroupItems
If s.Name Like "Rectangle*" Then
i = i + 1
t(i, 1) = s.TextFrame.Characters.Text
End If
Next s
End With
.Range("B3:B" & .Rows.Count).ClearContents
.[B3].Resize(i, 1) = t
.[B3].Resize(i).Sort .[B3], xlAscending, Header:=xlNo
End With
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD