Sélectionner les shape dont indice > x

_RV

XLDnaute Nouveau
bonjour à tous,

j'ai un petit souci, je voudrais sélectionner toutes les images (plutot shapes) dont l'indice est supérieur à un nombre que je définis, et les supprimer

pour l'instant je tape le code suivant:

Dim k As Variant

If k > 3 Then ActiveSheet.Shapes(k).SelectAll
Selection.Delete

End If

je me rends bien compte que le k est mal défini, mais je vois pas trop comment faire, qqun pourrait-il m'aiguiller?

merci,

Hervé.
 

Hervé

XLDnaute Barbatruc
Bonjour

Et un truc dans ce style :

Public Sub vev()
Dim i As Byte
For i = 1 To Shapes.Count
If Right(Shapes(i).Name, 1) > 3 Then Shapes(i).Delete
Next i
End Sub


Attention : un bouton permettant de lancer cette macro est un shape aussi.

Salut
 

Hervé

XLDnaute Barbatruc
re

J'ai l'impression de m'écrire, lol

Public Sub vev()
Dim i As Byte
For i = 1 To Shapes.Count
If Right(Shapes(i).Name, 1) > 3 Then
If Shapes(i).Type <> 8 Then
Shapes(i).Delete
End If
End If
Next i
End Sub

je ne vois pas ce qui pourrait coincer avec cette ligne ?

On dit juste : pour i=1 jusqu'au nombre de shapes.

Comment son nommé tes shapes ?

La macro ci-dessus exclus de la boucles les boutons.

Salut
 

Hervé

XLDnaute Barbatruc
Hervé écrit:
re

J'ai l'impression de m'écrire, lol

Public Sub vev()
Dim i As Byte
For i = 1 To Shapes.Count
If Right(Shapes(i).Name, 1) > 3 Then
If Shapes(i).Type <> 8 Then
Shapes(i).Delete
End If
End If
Next i
End Sub

je ne vois pas ce qui pourrait coincer avec cette ligne ?

On dit juste : pour i=1 jusqu'au nombre de shapes.

Comment sont nommé tes shapes ?

La macro ci-dessus exclus de la boucles les boutons.

Salut
 

galopin01

XLDnaute Occasionnel
bonjour,
shapes s'utilise avec Worksheets(i) ou ActiveWorksheet

En l'absence de modèle joint il est difficile de répondre avec précision à la question.
Voir à ce sujet l'aide de :
'OLEObjects', 'progID' et (dans ProgID) le lien vers 'Identificateurs de programmation OLE'
Pour faire simple, on peut s'en tirer avec quelque chose dans ce genre :

For Each O In ActiveSheet.OLEObjects
ZString = O.progID
If left(ZString,11)= 'Forms.Image' Then 'ou 'Forms.Label' ou...

Ok ?
 

_RV

XLDnaute Nouveau
Salut Hervé, galopin01, le forum,

Hervé ton code ne marche pas, et je ne comprends pas non plus pourquoi... il me semblait bon, et j'étais deja tout heureux de le lancer...et zob...

pour info je ne nomme pas mes shapes, parce que ce sont des graphes que je copie en tant qu'image (ce sont donc des images... je supprime les graphes). Qd mes données changent, je créé une nouvelle image de résultats.

A force d'en ajouter, il y en a beaucoup sur ma feuille, donc je voudrais qu'avec un bouton, elles disparaissent toutes (sauf evidement les boutons qui servent à ma macro...)


Galopin si tu es ds le coin, je veux bien que tu m'expliques un peu ton code, parce que je rame complètement là...


merci les gars,

à++

Hervé.
 

_RV

XLDnaute Nouveau
re-bonjour les gars, le forum

voici ce que j'essaie, et j'ai enfin un message d'erreur clair (que je n'arrive pas à éliminer, mais au moins je sais ce qui va pas)

j'utilise le code


For Each i In ActiveSheet.Shapes(i)

If ActiveSheet.Shapes(i).Type <> 8 Then
ActiveSheet.Shapes(i).Delete

End If

Next



et là il me dit 'l'index de cette collection est en-dehors des limites'

je pense que c'est déjà ce qui se passait avec le 1er code d'Hervé... mais comment faire pour restreindre les 'limites'??
 

Hervé

XLDnaute Barbatruc
Bonjour

Si il s'agit de graphe :

Public Sub vev()
Dim forme As Shape
For Each forme In Shapes
If forme.Type <> 8 Then forme.Delete
Next forme
End Sub

cette macro efface tout les shapes de la feuille active.

Si problème, une petite pièce jointe serait le bienvenue.

Salut
 

ChTi160

XLDnaute Barbatruc
Salut'_RV et Hervé et galopin01'
je ne suis pas un pro mais ce code ne me semble pas logique



For Each i In ActiveSheet.Shapes(i)
celà devrait vouloir dire pour chaque élément de la collection ActiveSheet.Shapes
If ActiveSheet.Shapes(i).Type <> 8 Then
ActiveSheet.Shapes(i).Delete
End If
Next
donc pas logique je pense
 

mutzik

XLDnaute Barbatruc
Bonjour le fil, le forum, _RV

Pour en revenir plus basiquement au début de ce qui t'amène à vouloir écrire cette macro, pourrais-tu juste me dire pourquoi tu tiens à éffacer ton graphe et à le recréer à chaque fois.

Nous avons une politique dans ma société qui dit 'Essayons de résoudre les problèmes à la source' d'o&ugrave; cette question

@+
Bertrand
 

galopin01

XLDnaute Occasionnel
bonjour,

Sub test()
On Error Resume Next
For i = ActiveSheet.Shapes.Count To 1 Step -1
If ActiveSheet.Shapes(i).Type = 3 Then ActiveSheet.Shapes(i).Delete
Next
End Sub

Chez moi Type = 3 correspond aux graphiques

Pour répondre à Chti160 les Shapes regrouvrent un tas de 'Formes' du bouton à l'image en passant par les graphiques.
Donc on peut en distinguer quelques uns entre eux via 'Type'. Mais certains 'type' recouvrent plusieurs Shapes différents donc celà n'est pas valable pour tout.

Dans ce cas cette macro devrait faire l'affaire.

Ok ?
 

_RV

XLDnaute Nouveau
Salut à tous, je vous joins un fichier d'exemple (celui sur lequel je bosse avant de pourrir mon vrai fichier)

le 1er bouton sert à créer un graphe figé de la plage de donnée.

La plage de donnée est amenée à changer, et si je veux un nouveau graphe à ce moment, je rappuie sur le bouton et je l'obtiens (tout en conservant le 1er graphe intact...)

jusque là c'est exactement ce que je veux (meme si le code est celui d'un débutant, moi, et qu'il est énorme...)

sauf qu'au bout d'un certains nombre de plages de données différentes (ce sont les résultats d'une simul, c'est pour ca que ca bouge), ma feuille est pleine de graphe. et comme je compte pas imprimer du papier peint, je voudrais tous les effacer (c'est là que je sais pas faire), ensuite je recréerai les 3 qui m'interessent sur les 50 (mais ca ca va, je sais faire)

oki?

hep, hep, je viens d'essayer le code d'Hervé, ayé ca roule, la classe...

bon je vous joins qd meme le fichier si ca vous intéresse...

bonnes fetes de paques à vous! et merci!

Hervé



nb: à Paques, bois ton pack!




[file name=Automatisation_graphes_20050324111129.zip size=22352]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Automatisation_graphes_20050324111129.zip[/file]
 

Pièces jointes

  • Automatisation_graphes_20050324111129.zip
    21.8 KB · Affichages: 42

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 017
Messages
2 104 584
Membres
109 084
dernier inscrit
mizab