Supprimer objet WordArt

T

Thomas

Guest
Bonjour le forum,



Sur sur feuille, j'ai des boutons de commandes et des éléments de type WordArt.


Comment faire par code pour supprimer uniquement les éléments WordArt ?



Remerciements de vos réponses.

@+
 
V

Vériland

Guest
Bonsoir Thomas et toi le Forum,
Ah ben personne n'est passé ?...bon ben j'm'y colle alors...
smiley_161.gif


Tout d'abord pour infos, un objet WordArt est considéré comme une image...donc pour supprimer l'image présente sur une feuille on pourrait faire...

ActiveSheet.Shapes(1).Delete

...mais là c'est à tour de rôle...je n'ai pas fait de boucle...bon

Seulement cette procédure considère comme image tous les objets de la feuille...à savoir un bouton , un forme, un WordArt...etc...donc il faut préciser de quel objet il s'agit...et pour montrer qu'il s'agit bien d'un objet WordArt faut l'dire à la macro...pour cela le shapes à besoin du nom de l'objet...on pourrait le définir ainsi :

ActiveSheet.Shapes("WordArt 1").Delete
voilà qui est fait...on supprime bien le Wordart 1...
smiley_167.gif


Par contre le problème avec cette procédure, c'est qu'elle va supprimer uniquement l'objet nommé WordArt 1...et si sur la feuille il y a plusieurs objets de ce type il faudra à chaque fois lui spécifier le nom...arf !

donc une solution...on peut par exemple lister sur une colonne tous les objets présents sur cette feuille...ici cette macro affiche dans la colonne A le nom de tous les objets présents sur la feuille...

Sub Lister_Noms_Images()
Dim Image As Variant
Dim Ligne As String
With Feuil1
.Columns(1).Clear
For Each Image In ActiveSheet.DrawingObjects
Ligne = .[A65536].End(xlUp).Row
.[A1].Offset(Ligne) = Image.Name
Next
End With
End Sub


ensuite de cette liste on va faire en sorte de ne garder que les noms qui contiennent la lettre W et l'afficher sur la colonne B...ce qui donne maintenant cette macro...

Sub Chercher()
Dim Cherche As String, FirstADdress As String
Dim L As Integer, Lig As Integer
Dim Maplage As Range
Dim C As Object
Cherche = "W"
Lig = 1
L = Sheets(1).Range("A65536").End(xlUp).Row
Set Maplage = Sheets(1).Range("A1:A" & L)
With Maplage
Set C = .Find(Cherche, LookIn:=xlValues)
If Not C Is Nothing Then
FirstADdress = C.Address
Do
Range("B" & Lig).Value = C
Lig = Lig + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> FirstADdress
End If
End With
End Sub


et là on pourrait s'arrêter et remplacer le Range("B" & Lig).Value = C par ActiveSheet.Shapes(C).Delete...cela effacerait bien l'image au lieu d'afficher le nom sur la colonne B...
Ca va tu suis ?...lool...bon ben j'ai pas fini...
smiley_706.gif


maintenant que tu as bien compris le principe, on va faire en sorte de rassembler ces deux procédures...mais on va simplifier la manip et éviter d'avoir à inscrire les données sur une feuille...ce qui va donner pour le même fonctionnement cette macro...

Option Explicit

Sub Effacer_Images_Wordart()
'Vériland
'Septembre 2003
'http://www.excel-downloads.com/html/French/forum/messages/1_51396_51396.htm
Dim Image As Variant
Dim Nom As String, Cherche As String
Dim Boucle As Variant
Cherche = "W"
For Each Image In ActiveSheet.DrawingObjects
Nom = Image.Name
For Boucle = 1 To Len(Nom)
If Mid(Nom, Boucle, 1) = Cherche Then ActiveSheet.Shapes(Nom).Delete
Next Boucle
Next
End Sub


c'est déjà plus simple...En fait cette macro fera l'opération souhaitée...à savoir qu'elle va effacer toutes les images contenant la lettre W...donc les WordArt...

Voilà...c'est ma façon de voir les choses...mais y'a p'têt une autre méthode...lol
D'ailleurs ce sera p'têt plus compliqué si les objets Wordart sont nommés différemment...mais là c'est une autre histoire...
smiley_799.gif


Bonne programmation

A+Veriland.gif


PS : Macro à copier depuis le forum auquel cas tu risques d'avoir les attributs gras du post dedans...
 

Discussions similaires

Réponses
4
Affichages
222
Réponses
7
Affichages
488

Statistiques des forums

Discussions
313 916
Messages
2 103 534
Membres
108 707
dernier inscrit
JJ69