Nommer puis supprimer une image insérer
Bonjour, la fonction ci-dessous me permet d'insérer une image depuis l'ordinateur et de l'insérer dans une autre feuille que la feuille de ma checkbox dans une ligne vierge ( b étant définis par une autre checkbox) à la taille de la cellule.
Private Sub CheckBox17_Click() 'image divers montage'
Dim nf As Variant
Dim L As Single, T As Single, W As Single, H As Single
If CheckBox17.Value Then
nf = Application.GetOpenFilename("Fichiers jpg,*.jpg")
If Not nf = False Then
L = Worksheets("RECAP").Cells(b, 2).Left + 25
T = Worksheets("RECAP").Cells(b, 2).Top + 25
W = Worksheets("RECAP").Cells(b, 2).Width - 50
H = Worksheets("RECAP").Cells(b, 2).Height - 50
Worksheets("RECAP").Shapes.AddPicture nf, True, True, L, T, W, H
End If
End If
End Sub
Ce que je voudrais, c'est que lorsque ma checkbox = false, l'image qui à était insérer grâce à celle-ci soit supprimé.
Je sais le faire avec un nom d'image définis mais le problème c'est qu'ici, l'image peut avoir n'import quel nom.
Merci pour votre temps.
Bonjour Wiawin et bienvenue sur le Forum,
C'est pas un sujet que je maîtrise mais j'ai déjà essayer de résoudre un problème similaire pour une autre personne sur ce forum.
Je vais donc essayer de te dire ce que je connais sur ce thème, et te filer une piste pour la résolution de ton problème.
Alors, le problème avec la gestion d'une image qui a été insérer c'est que son nom sera random et qu'il n'est pas modifiable.
Par exemple, si tu insére 20 images, alors le nom de tes images iront de "Picture 1" à "Picture 20"
Si tu en supprime 18, tes images garderons le même nom, et si tu insère encore une image, alors elle prendra le nom de "Picture 21" (Alors que tu a 3 images dans ton fichier).
Donc personnellement, pour sélectionner la dernière image insérer (donc celle qui aura le chiffre le plus grand après le "Picture") dans ma feuille, je me sers du code ci-dessous:
Sub DelShape()
Dim x As Integer
For x = 1 To 1000 'Le To 1000 est un exemple, tu peux avoir moins/plus d'image que sa
On Error Resume Next 'Gestion de l'erreur
ActiveSheet.Shapes.Range(Array("Picture " & x)).Select 'On selectionne donc toute les images jusqu'à la dernière
On Error GoTo 0
Next
Selection.Delete 'On supp l'image selectionné
End Sub
Voilà
Donc tu peux t'en servir dans ta procédure comme cela :
If CheckBox.Value = False Then
Call DelShape
End If
Si cette solution ne te conviens pas, je te conseil de te tourner vers l'insertion d'image via ActiveX dans l'onglet Développeur et à la catégorie "Contrôle"
Les ActiveX permettent d'insérer des images, et via la propriété, de modifier leur nom (comme avec les UserForm)
Restant à ta dispo
Je te remercie de ta réponse, tu m'a appris 2 3 trucs mais je ne veux pas supprimer la dernière qui aura était inséré car l'annulation de la checkbox peut se faire après l'insertion d'autre image donc cela ne fonctionnera pas.
Je travail déjà sous ActiveX contrôle:
Je sais insérer une image précise dont je connais le répertoire et le nom et donc la supprimer via son nom mais pas la même chose avec une image random qui sera inséré par l'utilisateur.
Je viens de trouver ma solution en gros :
nf = Application.GetOpenFilename("Fichiers jpg,*.jpg") 'Chercher
Set nom1 = Sheets("RECAP").Pictures.Insert(nf) 'insertion de l'image 'Insertion
nom1.Name = "image1" 'Renommer
Else: Worksheets("RECAP").Shapes("image1").Delete 'Supprimer
Ce qui donne:
Private Sub CheckBox17_Click() 'image divers montage'
Dim nf As Variant
Dim L As Single, T As Single, W As Single, H As Single
Dim nom1 As Object
Dim Fichier As String
If checkbox17.Value Then
nf = Application.GetOpenFilename("Fichiers jpg,*.jpg") 'permet a l'utilisateur d’insérer l'image qu'il veut
If Not nf = False Then
L = Worksheets("RECAP").Cells(b, 2).Left + 25
T = Worksheets("RECAP").Cells(b, 2).Top + 25
W = Worksheets("RECAP").Cells(b, 2).Width - 50
H = Worksheets("RECAP").Cells(b, 2).Height - 50
Set nom1 = Sheets("RECAP").Pictures.Insert(nf) 'insertion de l'image
nom1.Name = "image1" 'Renommer
With nom1.ShapeRange
.LockAspectRatio = msoFalse
.Top = T
.Left = L
.Height = H
.Width = W
End With
End If
Else: Worksheets("RECAP").Shapes("image1").Delete 'Supprimer
End If
End Sub
Merci encore ! =)