VBA-Supprimer une photo dans une cellule

Fermé
Alvasta - 25 mars 2016 à 09:42
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 - 31 mars 2016 à 14:12
Bonjour,

Je travaille sur Excel 2007.
Je souhaite supprimer une photo dans la cellule B21 de la feuille "AddEntry".
J'utilise le code suivant (que j'ai trouvé sur different forum):

Dim s As Shape
Sheets("AddEntry").Activate
For Each s In ActiveSheet.Shapes
If Not Intersect(s.TopLeftCell, Sheets("AddEntry").Range("B21")) Is Nothing Then
s.Delete
End If
Next s

Lors de l'exécution du code, le message d'erreur 1004 s'affiche.
Comment puis-je résoudre ce problème?
Ps: Je ne suis pas un as de VBA :)

Merci pour votre aide

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
25 mars 2016 à 10:10
bonjour
si ta photo an nom par ex:"moi"
ActiveSheet.Shapes("moi").Delete

Bonjour Michel,

Ma photo n'a pas un nom particulier.
Pour charger la photo j'utilise le code suivant:

Sub insertpicture()
Dim Image As Variant
Dim L As Single, T As Single, W As Single, H As Single

Set shEntry = Sheets("AddEntry")

L = Range("B21").Left
T = Range("B21").Top
W = Range("B21").Width
H = Range("B21").Height

Image = Application.GetOpenFilename(, , Picture)
If Image <> False Then
shEntry.Shapes.AddPicture Image, True, True, L, T, W, H
End If
End Sub

Merci pour ton aide
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304 > Alvasta
25 mars 2016 à 10:59
essaies avec "image" comme nom de photo
0
Je suis novice sur VBA. Excuses moi pour cette question.
Dois je modifier le nom de l'image que je l'importe ou quand je l'efface?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
25 mars 2016 à 11:19
apparemment non puisque
Image = Application.GetOpenFilename(, , Picture)
te donne normalement le nom de l'image

et donc, sans guillemets à image
ActiveSheet.Shapes(image).Delete
0
J'ai testé avec ActiveSheet.Shapes(image).Delete
ceci ne marche pas.
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
25 mars 2016 à 12:17
Bonjour tout le monde,

    For Each s In ActiveSheet.Shapes
        If s.TopLeftCell.Address = "$B$21" Then
            s.Delete
        End If
    Next s

eric

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
Modifié par michel_m le 25/03/2016 à 12:20
re,

j'ai retrouvé !
il faut baptiser l'image quand on la charge
http://www.cjoint.com/c/FCzlokJB2Nt

les codes insérer e detruire

Option Explicit
Sub inserer_image()
Dim Image As Picture
Dim design As String
Range("B21").Select
design = ThisWorkbook.Path & "\virageadroite.jpg"
'design = "http://www.photo-libre.fr/nature/Mini/" & Cells(3, "B")
Set Image = ActiveSheet.Pictures.Insert(design)
With Image.ShapeRange
.Top = Range("B21").Top
.Left = Range("B21").Left
.Name = "cartepost"
.Height = Range("B21").Height - 10
.Width = Range("B21").Width - 10
.LockAspectRatio = msoFalse
End With
End Sub

Sub detruire()
ActiveSheet.Shapes("cartepost").Delete
End Sub


 Michel
@ Michel et Eric
J'ai testé les 2 codes et je suis toujours bloqué.
Voici le code:
Pour inserer la photo dans la cellule B21
Option Base 1
Option Explicit

Sub insertpicture()
Dim Image As Variant
Dim sh As Shape
Dim L As Single, T As Single, W As Single, H As Single

Set shEntry = Sheets("AddEntry")

L = Range("B21").Left
T = Range("B21").Top
W = Range("B21").Width
H = Range("B21").Height

Image = Application.GetOpenFilename
If Image <> False Then
shEntry.Shapes.AddPicture Image, True, True, L, T, W, H
End If

'change the name of the picture
shEntry.Activate
For Each sh In ActiveSheet.Shapes
If sh.TopLeftCell.Address = "$B$21" Then
sh.Name = "Youhou"
End If
Next sh

End Sub

Pour supprimer la photo de la cellule B21
Sub saveincident()
Set shEntry = Sheets("AddEntry")

shEntry.Activate
ActiveSheet.Shapes("Youhou").Delete

End Sub

Merci!
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
30 mars 2016 à 12:29
Bonjour,

Indente ton code et utilise la balise code (icone <>) pour que ça soit lisible.
Là on n'a pas envie de lire quoi que ce soit.

Michel et moi testons avant de proposer, donc chez nous c'est ok.
Dire ça marche pas n'éclaire en rien ton cas.
Dans ce cas déposer un fichier avec ce que tu as fait sur cjoint.com et colle ici le lien fourni.
eric
0
Excuses moi Eric
Je suis encore novice sur VBA, et je bidouille comme je peux les codes :)
C'est un peu du bricolage

Voici le lien avec un extrait de mon fichier http://www.cjoint.com/c/FCElkjWqkKC

Merci pour votre aide
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
30 mars 2016 à 13:39
Quand j'exécute les bouts de code ajout, nommage et suppression de l'image tout se déroule bien.
Cherche ailleurs, ton problème n'est pas là.
Dire ça marche pas ou je suis bloqué ne veut rien dire...
0
Quand on exécute le code la première fois, le code s'exécute comme une lettre à la poste.
Mais la deuxiéme fois (en rajoutant une nouvelle photo), VBA m'indique l'erreur 1004 sur la ligne
If sh.TopLeftCell.Address = "$B$21" Then
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
31 mars 2016 à 11:35
Bonjour,

Je dois rajouter une commande obligant excel à supprimer toutes les images sur ma feuil1 portant le nom Youhou? 

Il doit surtout faire ce que tu as décidé qu'il fasse, c'est toi qui gère.
Si tu as envie d'empiler 50 photos au même endroit il le fera.
Avant d'ajouter une photo en B21 boucle sur tous les shapes et si tu en as déjà une à cet emplacement (.top et .left) soit tu abandonnes, soit tu supprimes pour la remplacer (soit tu empiles mais je ne vois pas l'intérêt à part obtenir un fichier obèse qui plante)
Chaque emplacement de photos doit avoir un nom précis. Et si plusieurs doivent avoir le même nom tu peut démarrer le nom par la ref de la cellule pour les différencier. Ex : "B21_Ident", "B23_Ident"
eric
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 304
31 mars 2016 à 13:15
Bonjour,
J'admire ta patience, Eric ;o)

cordialement
0
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
31 mars 2016 à 14:12
Salut michel,

Des fois je m'étonne moi-même :-)
eric
0