Supprimer une image présente dans une cellule via macro
Résolu/Fermé
A voir également:
- Supprimer une image présente dans une cellule via macro
- Supprimer une page word - Guide
- Aller à la ligne dans une cellule excel - Guide
- Supprimer compte instagram - Guide
- Excel cellule couleur si condition texte - Guide
- Comment agrandir une image - Guide
15 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 09:45
5 févr. 2015 à 09:45
Bonjour,
Cliques sur ton image, tu verras son nom en haut à gauche en dessous du ruban. Mets la dans le code ci-dessous:
Cliques sur ton image, tu verras son nom en haut à gauche en dessous du ruban. Mets la dans le code ci-dessous:
ActiveSheet.Shapes("Image 1").Select ' a adapter le nom de l'image Selection.Delete
612C
Messages postés
2
Date d'inscription
vendredi 30 janvier 2015
Statut
Membre
Dernière intervention
5 février 2015
5 févr. 2015 à 09:49
5 févr. 2015 à 09:49
Bonjour,
C'est du VBA ou une macro?
en VBA :
Dim imgx As Object
For Each imgx In ActiveSheet.Shapes
imgx.Delete
Next
C'est du VBA ou une macro?
en VBA :
Dim imgx As Object
For Each imgx In ActiveSheet.Shapes
imgx.Delete
Next
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 09:49
5 févr. 2015 à 09:49
Si tu n'as qu'une image sur ta feuille, tu peux utiliser aussi cela:
Par contre si il n'y a pas d'image tu auras un bug!
ActiveSheet.Shapes.SelectAll Selection.Delete
Par contre si il n'y a pas d'image tu auras un bug!
Merci de vos réponses rapides !
Pivert > Le problème est que ce n'est pas toujours la même cellule qui sera copiée, donc pas tout le temps la même image... Et il y a plus de deux cents images =/ Il n'y a pas d'équivalent à celui sur toute la feuille mais pour juste une cellule ?
612C > C'est du VBA, mais l'image n'apparaît pas via le VBA. En gros, chaque cellule du tableau de la feuille "bdd" a une image, et le code copie la cellule, ce qui copie aussi l'image en même temps.
Pivert > Le problème est que ce n'est pas toujours la même cellule qui sera copiée, donc pas tout le temps la même image... Et il y a plus de deux cents images =/ Il n'y a pas d'équivalent à celui sur toute la feuille mais pour juste une cellule ?
612C > C'est du VBA, mais l'image n'apparaît pas via le VBA. En gros, chaque cellule du tableau de la feuille "bdd" a une image, et le code copie la cellule, ce qui copie aussi l'image en même temps.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 10:05
5 févr. 2015 à 10:05
Si c'est la dernière image tu peux l'avoir comme ceci:
Dim img As Object Set img = Worksheets(1).Shapes 'a adapter le nom de la feuille MsgBox img.Count 'nbre d'images
Excuses moi, je débute en VBA et... Je ne vois pas quoi modifier dans ce code, pour l'adapter au nom de la feuille ainsi que le "nbre d'images'" =/
Juste un peu de curiosité : si je fais apparaître plusieurs images (par exemple 4) de cellules différentes, il me suffirait d'utiliser ce code 4 fois pour supprimer les 4 ?
Juste un peu de curiosité : si je fais apparaître plusieurs images (par exemple 4) de cellules différentes, il me suffirait d'utiliser ce code 4 fois pour supprimer les 4 ?
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 11:00
5 févr. 2015 à 11:00
La solution est dans ma 1ère réponse. Il te faut récupérer le nom de l'image et l'adapter au code
Il s'agit de la feuille active où se trouve tes images
Il faut faire ce code pour chaque image à supprimer en l'adaptant au nom de l'image
C'est simple!
ActiveSheet.Shapes("Image 1").Select ' a adapter le nom de l'image Selection.Delete
Il s'agit de la feuille active où se trouve tes images
Il faut faire ce code pour chaque image à supprimer en l'adaptant au nom de l'image
C'est simple!
Sauf que comme précisé dans ma première réponse, ce n'est pas la même image qui apparaît. J'ai besoin d'une manière pour supprimer une image, sans devoir préciser son nom, vu que je ne le sais pas à l'avance.
L'autre code que tu m'as proposé, qui supprime la dernière image apparue ( de ce que j'ai compris ) m'irait, mais je ne vois pas comment le faire fonctionner, je ne sais pas quoi modifier là-dedans pour l'adapter, comme tu l'as marqué dans le commentaire..
L'autre code que tu m'as proposé, qui supprime la dernière image apparue ( de ce que j'ai compris ) m'irait, mais je ne vois pas comment le faire fonctionner, je ne sais pas quoi modifier là-dedans pour l'adapter, comme tu l'as marqué dans le commentaire..
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 13:39
5 févr. 2015 à 13:39
Voilà essaie ceci avec un bouton:
Private Sub CommandButton1_Click() Dim var Dim img As Object Set img = ActiveSheet.Shapes var = img.Count 'nbre d'images 'vérification nom image en haut à gauche sous le ruban MsgBox "Image " & var 'verifier si cela correspond à la dernière image, sinon corrigé var 'en conséquence par var + 1 ou 2 etc. If var = "0" Then Exit Sub 'si pas d'image ActiveSheet.Shapes("Image " & var).Select Selection.Delete End Sub
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 13:46
5 févr. 2015 à 13:46
Par exemple si le MsgBox te donne: "Image 100"
et que ta dernère image est "Image 104" tu mets ceci:
et que ta dernère image est "Image 104" tu mets ceci:
ActiveSheet.Shapes("Image " & var + 4).Select
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 14:03
5 févr. 2015 à 14:03
Une autre solution. Il faut sélectionner l'image à supprimer et mettre ce code:
Je pense qu'avec tout cela tu vas pouvoir l'adapter à ton programme!
Private Sub CommandButton2_Click() Dim img As Object For Each img In ActiveSheet.Shapes img.Select MsgBox "Le nom de la forme sélectionnée est : " & img.Name ActiveSheet.Shapes(img.Name).Select Selection.Delete Next End Sub
Je pense qu'avec tout cela tu vas pouvoir l'adapter à ton programme!
J'ai vraiment du mal avec tes codes... Désolé, vraiment =/
Le problème est que techniquement, on ne va pas faire apparaître juste une fois les images. Les gens qui se serviront du fichier vont les faire apparaître / disparaître plusieurs fois ( vu qu'il y a de l'aléatoire ) et le problème est que les noms continuent d'avancer.
Par exemple, Je viens de faire apparaître 5 images, qui vont de Image 54 a 59, je les supprime via " ActiveSheet.Shapes("Image 1").Select ' a adapter le nom de l'image
Selection.Delete "et lorsqu'on génère d'autres images, les noms continuent... donc le code ne fonctionne plus.
De plus, dans tout les cas ça va buguer et ne pas marché vu que techniquement, il peut y avoir jusqu'à cinq images à supprimer mais parfois moins, ce n'est pas obligatoire !
Je commence à penser que ce que je demande est impossible =/
Le problème est que techniquement, on ne va pas faire apparaître juste une fois les images. Les gens qui se serviront du fichier vont les faire apparaître / disparaître plusieurs fois ( vu qu'il y a de l'aléatoire ) et le problème est que les noms continuent d'avancer.
Par exemple, Je viens de faire apparaître 5 images, qui vont de Image 54 a 59, je les supprime via " ActiveSheet.Shapes("Image 1").Select ' a adapter le nom de l'image
Selection.Delete "et lorsqu'on génère d'autres images, les noms continuent... donc le code ne fonctionne plus.
De plus, dans tout les cas ça va buguer et ne pas marché vu que techniquement, il peut y avoir jusqu'à cinq images à supprimer mais parfois moins, ce n'est pas obligatoire !
Je commence à penser que ce que je demande est impossible =/
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 14:47
5 févr. 2015 à 14:47
Une autre solution.Supprimer la dernière image d'un clic droit en A1 si A1 contient "1"
Allez dans la feuille qui contient les images, mettre 1 dans la cellule A1 (a adapter)
Allez dans le code sélectionner en haut à gauche la feuille concernée et mettre ce code:
A chaque clic droit dans A1 ou dans une cellule qui contient "1", la dernière image est supprimée. Cela est a adapter suivant tes préférences
Allez dans la feuille qui contient les images, mettre 1 dans la cellule A1 (a adapter)
Allez dans le code sélectionner en haut à gauche la feuille concernée et mettre ce code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Value = "1" Then delete_shapes End If End Sub Private Sub delete_shapes() Dim img As Object For Each img In ActiveSheet.Shapes MsgBox "Le nom de la forme sélectionnée est : " & img.Name 'a supprimer après essai ActiveSheet.Shapes(img.Name).Select Selection.Delete Exit Sub Next End Sub
A chaque clic droit dans A1 ou dans une cellule qui contient "1", la dernière image est supprimée. Cela est a adapter suivant tes préférences
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 15:26
5 févr. 2015 à 15:26
J'ai une autre solution, si tu connais où ce trouve le bord haut et gauche de l'image. Je l'ai mis dans l'evenement de la feuille: Worksheet_SelectionChange
Tu peux changer:
a adapter la cellule
Tu peux changer:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim img As Object For Each img In ActiveSheet.Shapes If Not Application.Intersect(img.TopLeftCell, ActiveSheet.Range("C19")) Is Nothing Then If img.Type = msoPicture Then img.Delete End If Next img End Sub
a adapter la cellule
Salut, encore merci de tes rapides réponses !
La première "nouvelle" solution ne me convient pas, s'il faut à chaque fois faire un clique droit sur l'image, autant dire simplement à la personne de cliquer dessus et d'appuyer sur suppr'... =/
Concernant l'autre, je ne comprend pas ce que tu veux dire par "bord haut et gauche de l'image"... L'image est redimensionnée pour rentrer largement dans la cellule ( de manière à ce que, lorsque la macro copie la cellule, elle recopie bien la position de l'image )
La première "nouvelle" solution ne me convient pas, s'il faut à chaque fois faire un clique droit sur l'image, autant dire simplement à la personne de cliquer dessus et d'appuyer sur suppr'... =/
Concernant l'autre, je ne comprend pas ce que tu veux dire par "bord haut et gauche de l'image"... L'image est redimensionnée pour rentrer largement dans la cellule ( de manière à ce que, lorsque la macro copie la cellule, elle recopie bien la position de l'image )
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 18:18
5 févr. 2015 à 18:18
Voici un exemple avec une plage de cellule.
A adapter a tes besoins
http://www.cjoint.com/data3/3BfsA08D15b.htm
A adapter a tes besoins
http://www.cjoint.com/data3/3BfsA08D15b.htm
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
5 févr. 2015 à 18:28
5 févr. 2015 à 18:28
Et regarde ce que font ces 2 boutons avec un autre code:
Option Explicit Sub Bouton1_Clic() 'caché Dim img As Object For Each img In ActiveSheet.Shapes If Not Application.Intersect(img.TopLeftCell, ActiveSheet.Range("A3:M31")) Is Nothing Then If img.Type = msoPicture Then img.Visible = False End If Next img End Sub Sub Bouton7_Clic() 'visible Dim img As Object For Each img In ActiveSheet.Shapes If Not Application.Intersect(img.TopLeftCell, ActiveSheet.Range("A3:M31")) Is Nothing Then If img.Type = msoPicture Then img.Visible = True End If Next img End Sub