OVH Cloud OVH Cloud

Remplir un Array avec des objets Shape

4 réponses
Avatar
fabienne HUÏEZ
bonjour =E0 tous,

sur une feuille de calcul j'ai des objets Shapes (deux=20
boutons fixes et des zones de liste qui se cr=E9ent=20
dynamiquement).

A la fin d'une proc=E9dure, je voudrais supprimer SEULEMENT=20
les zones de liste (pas les boutons).

J'arrive =E0 les lister avec le code ci-dessous, mais je ne=20
sais pas les mettre dans un tableau=20

Dim arShapes() As Variant
Set mydocument =3D ActiveSheet
With mydocument.Shapes
For i =3D 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType =3D xlDropDown Then
Debug.Print mydocument.Shapes(i).Name

????????
QUE FAUT-IL ECRIRE ICI POUR OBTENIR
'arShapes =3D Array("Drop Down 148", "Drop Down=20
150", "Drop Down 152") =20


merci de votre aide
fabienne

4 réponses

Avatar
Papou
Bonjour
Dim n as Long
Dim arShapes()
Set mydocument = ActiveSheet
n = 0
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown Then
n = n + 1
Redim Preserve arShapes(n)
arShapes(n) = mydocument.Shapes(i).Name
'...etc...

Cordialement
Pascal

"fabienne HUÏEZ" a écrit dans le message
de news:8da701c485eb$e6aef150$
bonjour à tous,

sur une feuille de calcul j'ai des objets Shapes (deux
boutons fixes et des zones de liste qui se créent
dynamiquement).

A la fin d'une procédure, je voudrais supprimer SEULEMENT
les zones de liste (pas les boutons).

J'arrive à les lister avec le code ci-dessous, mais je ne
sais pas les mettre dans un tableau

Dim arShapes() As Variant
Set mydocument = ActiveSheet
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown Then
Debug.Print mydocument.Shapes(i).Name

????????
QUE FAUT-IL ECRIRE ICI POUR OBTENIR
'arShapes = Array("Drop Down 148", "Drop Down
150", "Drop Down 152")


merci de votre aide
fabienne
Avatar
Nicolas B.
Salut,

Si tu veux seulement supprimer tes listes, il n'est pas nécessaire de
passer par un tableau :

Sub SuppListes()
For Each shp In ActiveSheet.Shapes
If shp.Type = msoFormControl Then 'rajoute cette condition
'si tu as d'autres objets que ceux provenant de la BO Formulaire
If shp.FormControlType = xlDropDown Then shp.Delete
End If
Next
End Sub


A+
Nicolas B.


fabienne HUÏEZ wrote:
bonjour à tous,

sur une feuille de calcul j'ai des objets Shapes (deux
boutons fixes et des zones de liste qui se créent
dynamiquement).

A la fin d'une procédure, je voudrais supprimer SEULEMENT
les zones de liste (pas les boutons).

J'arrive à les lister avec le code ci-dessous, mais je ne
sais pas les mettre dans un tableau

Dim arShapes() As Variant
Set mydocument = ActiveSheet
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown Then
Debug.Print mydocument.Shapes(i).Name

????????
QUE FAUT-IL ECRIRE ICI POUR OBTENIR
'arShapes = Array("Drop Down 148", "Drop Down
150", "Drop Down 152")


merci de votre aide
fabienne



Avatar
fabienne.HUÏEZ
bonjour Papou,

c'est bien ce que j'avais écris mais avec cette syntaxe,
j'ai des problèmes pour la suppression.

l'exemple de l'aide affiche:

Dim arShapes() as Variant
dim objRange as object
set MyDocument=Woorsheets(1)
arShapes=Array("Oval 4", "Rectangle 5")
set objRange=myDocument.Shapes.Range(arShapes)
objRange.[Action à faire]


En l'adaptant à mon cas, jobtiens:
Set mydocument = ActiveSheet
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown Then
Debug.Print mydocument.Shapes(i).Name
NomShapes = NomShapes & """" & (mydocument.Shapes(i).Name)
& """"
NomShapes = NomShapes & ", "
end if
Next

TronqueNomShapes = Mid(NomShapes, 2, Len(NomShapes) - 4)
arShapes = Array(TronqueNomShapes)

En faisant du pas à pas, à ce niveau j'obtiens
TronqueNomShapes="Drop Down 148", "Drop Down 150"....
soit presque? la syntaxe qui fonctionne en dur. Manque t-
il des paranthèses ?
mais ensuite j'ai l'erreur 1004
"l'élément poratn ce nom est introuvable"

'arShapes = Array("Drop Down 148", "Drop Down 150", "Drop
Down 152") 'bon en dur
set objRange = mydocument.Shapes.Range(arShapes)
objRange.Delete

où est le problème ?
merci de ta collaboration
fabienne

-----Message d'origine-----
Bonjour
Dim n as Long
Dim arShapes()
Set mydocument = ActiveSheet
n = 0
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown
Then

n = n + 1
Redim Preserve arShapes(n)
arShapes(n) = mydocument.Shapes(i).Name
'...etc...

Cordialement
Pascal

"fabienne HUÏEZ" a
écrit dans le message

de news:8da701c485eb$e6aef150$
bonjour à tous,

sur une feuille de calcul j'ai des objets Shapes (deux
boutons fixes et des zones de liste qui se créent
dynamiquement).

A la fin d'une procédure, je voudrais supprimer SEULEMENT
les zones de liste (pas les boutons).

J'arrive à les lister avec le code ci-dessous, mais je ne
sais pas les mettre dans un tableau

Dim arShapes() As Variant
Set mydocument = ActiveSheet
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown
Then

Debug.Print mydocument.Shapes(i).Name

????????
QUE FAUT-IL ECRIRE ICI POUR OBTENIR
'arShapes = Array("Drop Down 148", "Drop Down
150", "Drop Down 152")


merci de votre aide
fabienne


.



Avatar
fabienne.HUÏEZ
il suffisait d'y penser...

merci beaucoup. C'est impeccable
fabienne



-----Message d'origine-----
Salut,

Si tu veux seulement supprimer tes listes, il n'est pas
nécessaire de

passer par un tableau :

Sub SuppListes()
For Each shp In ActiveSheet.Shapes
If shp.Type = msoFormControl Then 'rajoute cette
condition

'si tu as d'autres objets que ceux provenant de la
BO Formulaire

If shp.FormControlType = xlDropDown Then
shp.Delete

End If
Next
End Sub


A+
Nicolas B.


fabienne HUÏEZ wrote:
bonjour à tous,

sur une feuille de calcul j'ai des objets Shapes (deux
boutons fixes et des zones de liste qui se créent
dynamiquement).

A la fin d'une procédure, je voudrais supprimer
SEULEMENT


les zones de liste (pas les boutons).

J'arrive à les lister avec le code ci-dessous, mais je
ne


sais pas les mettre dans un tableau

Dim arShapes() As Variant
Set mydocument = ActiveSheet
With mydocument.Shapes
For i = 1 To mydocument.Shapes.Count
If mydocument.Shapes(i).FormControlType = xlDropDown
Then


Debug.Print mydocument.Shapes(i).Name

????????
QUE FAUT-IL ECRIRE ICI POUR OBTENIR
'arShapes = Array("Drop Down 148", "Drop Down
150", "Drop Down 152")


merci de votre aide
fabienne

.