VBA-Supprimer une photo dans une cellule

Alvasta -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour
    si ta photo an nom par ex:"moi"
    ActiveSheet.Shapes("moi").Delete

    0
    1. Alvasta
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Alvasta
       
      essaies avec "image" comme nom de photo
      0
    3. Alvasta
       
      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
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    5. Alvasta
       
      J'ai testé avec ActiveSheet.Shapes(image).Delete
      ceci ne marche pas.
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour tout le monde,

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

    eric

    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
    1. Alvasta
       
      @ 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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    3. Alvasta
       
      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
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    5. Alvasta
       
      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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour,
      J'admire ta patience, Eric ;o)

      cordialement
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Salut michel,

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