Affichage d'images décomposés via Combobox
Bonjour à tous!
je fais appel aux connaisseurs VBA car ma demande est un peu particulière :
J'ai une feuille nommé "Feuil1" dans laquelle j'ai une Combobox et une feuille nommé "images" dans laquelle j'ai créé des images avec les formes intégrés dans Excel en allant dans insertion->forme...
Pour pouvoir nommer mes images j'ai du grouper les formes qui compose chaque image, dans mon exemple si je dissocie "nounours" j'ai 6 formes qui le compose.
Avec le code que j'ai créé dans ma "Feuil1", j'arrive a récupérer les images de ma feuille "images" mais je souhaiterais que les images soit décomposé pour pouvoir avoir accès aux cellules Excel.
En clair, quand je choisi nounours dans ma Combobox, le nounours doit s'afficher décomposé et si je change avec "Lapin" le nounours s'efface et le lapin s'affiche décomposé lui aussi.
Peut-être qu'il y a un code plus simple, quelqu'un a t-il une idée?
Vous en remerciant par avance.
Bonjour,
un essai :
Remplacer la Sub Worksheet_Change existante par celle ci :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$2" And Target.Count = 1 Then
On Error Resume Next
GroupementShapes 'appel de la sub pour grouper les formes dégroupées
ActiveSheet.Shapes("Groupe").Delete
On Error GoTo 0
If Target <> "" Then
Sheets("Images").Shapes(Target).Copy
Target.Offset(0, 2).Select
ActiveSheet.Paste
Selection.Name = "monImage"
Selection.ShapeRange.Left = ActiveCell.Left - 175
Selection.ShapeRange.Top = ActiveCell.Top + 75
ActiveSheet.Shapes("monimage").Ungroup ' dégroupe les formes
Target.Select
End If
End If
End Subet copier cette sub après la précédente :
Sub GroupementShapes()
Dim Sh As Shape, T(), i As Integer
For Each Sh In ActiveSheet.Shapes
If Sh.Type = 1 Then 's'il s'agit d'une forme
i = i + 1
ReDim Preserve T(1 To i) 'augmente la taille du tableau
T(i) = Sh.Name 'insère le nom de la forme dans le tableau
End If
Next
If i = 0 Then Exit Sub 'si le tableau est vide, on sort.
Set Sh = ActiveSheet.Shapes.Range(T).Group 'Groupe les formes dont le nom se trouve dans le tableau
Sh.Name = "Groupe" 'Renomme le groupe.
End SubA+
Bonsoir AlgoPlus!
Très efficace! ça a l'air de fonctionner!
Un énorme merci et une très bonne soirée à toi! :-)
A+
Bonjour AlgoPlus!
désolé de te déranger une nouvelle fois mais impossible de faire fonctionner correctement le code dans mon fichier d'origine.
Les images s’affichent bien décomposées mais ne s'effacent pas lorsque je change d'image, elles se cumule.
Le code fonctionne bien sur le fichier que je t'avais envoyé mais impossible sur l'original...je te joins mon fichier si tu peux regarder?
Merci par avance.
Le souci vient de ce que dans la Sub GroupementShapes() on filtre sur les formes ( type=1) (pour éviter de sélectionner les boutons, case à cocher ....) et que l'image "Verrière" utilise des Connecteurs qui ont le type = 9.
La solution serait donc de remplacer la ligne
If Sh.Type = 1 Then 's'il s'agit d'une formepar
If Sh.Type = 1 Or Sh.Type = 9 Then 's'il s'agit d'une forme ou d'un connecteurMais le dessin en haut à gauche de la feuille Zone de vent Construction comprend des connecteurs qui seront effacés lors du lancement de la macro.
Solution trouvée pour l'éviter : sélectionner tous les éléments de ce dessin et les grouper. Un groupe étant de type=6, il ne sera pas "touché" par la macro.
S'il y avait une raison pour que les éléments de ce dessin ne soient pas groupés, je n'ai pas de solution(s)...
Merci, j'ai modifier le code et ça fonctionne très bien.
J'ai mis du temps à comprendre que je devais supprimer tous les connecteurs de mon fichiers pour que ça fonctionne. :-)J’arriverai à trouver une autre solution, le plus important est que ça fonctionne!
Merci beaucoup et très bonne continuation!
Gégé
Désolé je viens seulement de voir ta réponse.
En fait, le code ne fonctionnait pas avec les connecteurs qui était présent dans ma feuille (ceux en haut à gauche et les rectangles qui entoures les cellules).
La Combobox affichait bien les images sélectionnés mais elles se cumulaient, c'est seulement quand j'ai supprimé tous les connecteurs que le code a bien fonctionné.
Maintenant, en effet si je rajoute des connecteurs le code fonctionne toujours mais les supprimes comme tu m'expliquais.
Je ne peux pas les grouper car j'ai besoin d'avoir accès aux cellules, mais je trouverais une autre solution. :-)
Merci encore pour le temps que tu m'as accordé!
Bonne soirée!
Autant pour moi on peut bien grouper les connecteurs et avoir accès aux cellules!