Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ecrire correctement un array

12 réponses
Avatar
manbas
Bonjour
Toujours en echec sur un probleme de selection de shapes présents dans une
feuille (en sélectionner certaines et pas toutes), je rencontre une
difficulté d'écriture avec array. Les solutions qui me permettraient
d'écrire une macro pérenne ne marchent pas.

result = [A1].Value 'cellule A1 contient la chaine de caractères, qui est la
concaténation des noms des formes à sélectionner obtenue par macro, exemple
: rect1, fl1
N1 = [B1].Value ' B1 contient le nom de la première forme, exemple: rect1
N2 = [B2].Value ' B2 contient le nom de la deuxième forme, exemple: fl1
resultBis = N1 & ", " & N2
ActiveSheet.Shapes.Range(Array("rect1", "fl1")).Select 'fonctionne, mais
inutilisable car ré-écriture macro
ActiveSheet.Shapes.Range(Array(N1, N2)).Select 'fonctionne alors qu'il n'y a
pas de guillemets dans l'écriture, mais inutilisable car limite a priori le
nombre de formes
ActiveSheet.Shapes.Range(Array(result)).Select 'ne fonctionne pas
ActiveSheet.Shapes.Range(Array(resultBis)).Select 'ne fonctionne pas

Pouvez-vous me donner vos avis SVP?

10 réponses

1 2
Avatar
michdenis
Bonjour,

Pour sélectionner toutes les Shapes dont les noms
apparaissent dans la plage A1:Ax de la "Feuil1"

Dans la liste, il ne doit pas y avoir des contrôles qui
émanent de la barre d'outils "Formulaire" ou "Contrôles.

'-------------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'-------------------------------------------



"manbas" a écrit dans le message de groupe de discussion :
##
Bonjour
Toujours en echec sur un probleme de selection de shapes présents dans une
feuille (en sélectionner certaines et pas toutes), je rencontre une
difficulté d'écriture avec array. Les solutions qui me permettraient
d'écrire une macro pérenne ne marchent pas.

result = [A1].Value 'cellule A1 contient la chaine de caractères, qui est la
concaténation des noms des formes à sélectionner obtenue par macro, exemple
: rect1, fl1
N1 = [B1].Value ' B1 contient le nom de la première forme, exemple: rect1
N2 = [B2].Value ' B2 contient le nom de la deuxième forme, exemple: fl1
resultBis = N1 & ", " & N2
ActiveSheet.Shapes.Range(Array("rect1", "fl1")).Select 'fonctionne, mais
inutilisable car ré-écriture macro
ActiveSheet.Shapes.Range(Array(N1, N2)).Select 'fonctionne alors qu'il n'y a
pas de guillemets dans l'écriture, mais inutilisable car limite a priori le
nombre de formes
ActiveSheet.Shapes.Range(Array(result)).Select 'ne fonctionne pas
ActiveSheet.Shapes.Range(Array(resultBis)).Select 'ne fonctionne pas

Pouvez-vous me donner vos avis SVP?
Avatar
manbas
Merci Michdenis. Comme tu vois je suis toujours sur le même sujet.
Les formes sont des formes automatiques crées à partir de la BO Dessin, au
travers de commandes VBA (cf classeur cjoint)
Le code est en échec sur .Shapes.Range(Arr).Select
avec le message Erreur d'execution 1004: l'index de cette collection est en
dehors des limites.
Moi j'ai p'u d'idées !


"michdenis" a écrit dans le message de
news:
Bonjour,

Pour sélectionner toutes les Shapes dont les noms
apparaissent dans la plage A1:Ax de la "Feuil1"

Dans la liste, il ne doit pas y avoir des contrôles qui
émanent de la barre d'outils "Formulaire" ou "Contrôles.

'-------------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'-------------------------------------------



"manbas" a écrit dans le message de groupe de
discussion :
##
Bonjour
Toujours en echec sur un probleme de selection de shapes présents dans une
feuille (en sélectionner certaines et pas toutes), je rencontre une
difficulté d'écriture avec array. Les solutions qui me permettraient
d'écrire une macro pérenne ne marchent pas.

result = [A1].Value 'cellule A1 contient la chaine de caractères, qui est
la
concaténation des noms des formes à sélectionner obtenue par macro,
exemple
: rect1, fl1
N1 = [B1].Value ' B1 contient le nom de la première forme, exemple: rect1
N2 = [B2].Value ' B2 contient le nom de la deuxième forme, exemple: fl1
resultBis = N1 & ", " & N2
ActiveSheet.Shapes.Range(Array("rect1", "fl1")).Select 'fonctionne, mais
inutilisable car ré-écriture macro
ActiveSheet.Shapes.Range(Array(N1, N2)).Select 'fonctionne alors qu'il n'y
a
pas de guillemets dans l'écriture, mais inutilisable car limite a priori
le
nombre de formes
ActiveSheet.Shapes.Range(Array(result)).Select 'ne fonctionne pas
ActiveSheet.Shapes.Range(Array(resultBis)).Select 'ne fonctionne pas

Pouvez-vous me donner vos avis SVP?



Avatar
michdenis
Si tu as mis le code dans un module standard,
la feuille active doit être la feuille où tu as tes shapes.

Tu peux simplement ajouter à la macro ceci :
La ligne : .Activate pour en être sûr !

'------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
.Activate
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'------------------------------------
Avatar
manbas
Pas mieux, malheureusement. Même en élargissant la plage A1:AP...


"michdenis" a écrit dans le message de
news:
Si tu as mis le code dans un module standard,
la feuille active doit être la feuille où tu as tes shapes.

Tu peux simplement ajouter à la macro ceci :
La ligne : .Activate pour en être sûr !

'------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
.Activate
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'------------------------------------







Avatar
michdenis
fichier exemple : http://cjoint.com/?jutbfRaV0B



"manbas" a écrit dans le message de groupe de discussion :

Pas mieux, malheureusement. Même en élargissant la plage A1:AP...


"michdenis" a écrit dans le message de
news:
Si tu as mis le code dans un module standard,
la feuille active doit être la feuille où tu as tes shapes.

Tu peux simplement ajouter à la macro ceci :
La ligne : .Activate pour en être sûr !

'------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
.Activate
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'------------------------------------







Avatar
FS
Bonsoir,

Si tu travailles toujours sur le classeur dont tu avais envoyé un
exemplaire sur cjoint le 19/9 à 17h05, je trouve 29 formes sur la
feuille 1 (Chronologie) avec des noms du style D1-F1, D2-F2 etc. et
d'autres plus exotiques (AutoShape 241 par exemple).
Selon quels critères veux-tu en "sélectionner certaines et pas toutes" ?

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

manbas a écrit :
Bonjour
Toujours en echec sur un probleme de selection de shapes présents dans
une feuille (en sélectionner certaines et pas toutes), je rencontre une
difficulté d'écriture avec array. Les solutions qui me permettraient
d'écrire une macro pérenne ne marchent pas.

result = [A1].Value 'cellule A1 contient la chaine de caractères, qui
est la concaténation des noms des formes à sélectionner obtenue par
macro, exemple : rect1, fl1
N1 = [B1].Value ' B1 contient le nom de la première forme, exemple: rect1
N2 = [B2].Value ' B2 contient le nom de la deuxième forme, exemple: fl1
resultBis = N1 & ", " & N2
ActiveSheet.Shapes.Range(Array("rect1", "fl1")).Select 'fonctionne, mais
inutilisable car ré-écriture macro
ActiveSheet.Shapes.Range(Array(N1, N2)).Select 'fonctionne alors qu'il
n'y a pas de guillemets dans l'écriture, mais inutilisable car limite a
priori le nombre de formes
ActiveSheet.Shapes.Range(Array(result)).Select 'ne fonctionne pas
ActiveSheet.Shapes.Range(Array(resultBis)).Select 'ne fonctionne pas

Pouvez-vous me donner vos avis SVP?




Avatar
manbas
Merci pour tout MichDenis
Sur ma feuille il y a une majorité de zones de texte, qui ne sont pas
sélectionnées par ce code!! Les zones de texte ne semblent pas être des
shapes comme les autres.
Je vais repenser ma feuille en tenant compte de ça.

"michdenis" a écrit dans le message de
news:
fichier exemple : http://cjoint.com/?jutbfRaV0B



"manbas" a écrit dans le message de groupe de
discussion :

Pas mieux, malheureusement. Même en élargissant la plage A1:AP...


"michdenis" a écrit dans le message de
news:
Si tu as mis le code dans un module standard,
la feuille active doit être la feuille où tu as tes shapes.

Tu peux simplement ajouter à la macro ceci :
La ligne : .Activate pour en être sûr !

'------------------------------------
Sub test()
Dim A As Integer, X As Integer
Dim Arr()

With Worksheets("Feuil1")
.Activate
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
X = .Rows.Count
ReDim Arr(1 To X)
For A = 1 To X
Arr(A) = Range("A" & A)
Next
End With
.Shapes.Range(Arr).Select
End With

End Sub
'------------------------------------










Avatar
manbas
Bonsoir Frederic
Merci de jeter un oeil sur mes problemes.
En effet je travaille toujours dessus.
Les shapes D correspondent aux zones de texte, et les F correspondent aux
connecteurs. Les 241 & co sont les accolades que j'ai rajouté pour
MichDenis, afin de differencier les résultats obtenus avec le même code dans
2003 et 2007 (celles-ci ne sont pas des shapes obtenues par macro)
La feuille est divisée globalement en 4 pages au format paysage, délimitées
par les colonnes bleues.
L'objectif est de selectionner les shapes page par page pour les copier dans
powerpoint slide par slide.

"FS" a écrit dans le message de
news:
Bonsoir,

Si tu travailles toujours sur le classeur dont tu avais envoyé un
exemplaire sur cjoint le 19/9 à 17h05, je trouve 29 formes sur la feuille
1 (Chronologie) avec des noms du style D1-F1, D2-F2 etc. et d'autres plus
exotiques (AutoShape 241 par exemple).
Selon quels critères veux-tu en "sélectionner certaines et pas toutes" ?

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

manbas a écrit :
Bonjour
Toujours en echec sur un probleme de selection de shapes présents dans
une feuille (en sélectionner certaines et pas toutes), je rencontre une
difficulté d'écriture avec array. Les solutions qui me permettraient
d'écrire une macro pérenne ne marchent pas.

result = [A1].Value 'cellule A1 contient la chaine de caractères, qui est
la concaténation des noms des formes à sélectionner obtenue par macro,
exemple : rect1, fl1
N1 = [B1].Value ' B1 contient le nom de la première forme, exemple: rect1
N2 = [B2].Value ' B2 contient le nom de la deuxième forme, exemple: fl1
resultBis = N1 & ", " & N2
ActiveSheet.Shapes.Range(Array("rect1", "fl1")).Select 'fonctionne, mais
inutilisable car ré-écriture macro
ActiveSheet.Shapes.Range(Array(N1, N2)).Select 'fonctionne alors qu'il
n'y a pas de guillemets dans l'écriture, mais inutilisable car limite a
priori le nombre de formes
ActiveSheet.Shapes.Range(Array(result)).Select 'ne fonctionne pas
ActiveSheet.Shapes.Range(Array(resultBis)).Select 'ne fonctionne pas

Pouvez-vous me donner vos avis SVP?





Avatar
michdenis
La procédure soumise n'a aucune difficulté à sélectionner
des zones de texte. Comme déjà énoncé, ces zones de texte
ne doivent pas être des contrôles "Textbox" émanant de la barre d'outils
"contrôles". En Excel 2007, ces zones de texte ont par défaut :
ZoneTexte 1, 1 étant l'index ... !
Avatar
manbas
OK
J'ai enfin compris ! (j'oubliais les espace entre les mots des shapes dans
ta démo: Zonedetexte9).
ça correspond tout à fait à la solution au problème de l'array qui était au
départ de ce fil, donc probleme résolu.
Merci beaucoup +++
A bientôt



"michdenis" a écrit dans le message de
news:
La procédure soumise n'a aucune difficulté à sélectionner
des zones de texte. Comme déjà énoncé, ces zones de texte
ne doivent pas être des contrôles "Textbox" émanant de la barre d'outils
"contrôles". En Excel 2007, ces zones de texte ont par défaut :
ZoneTexte 1, 1 étant l'index ... !






1 2