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.

11classeur2.xlsm (26.61 Ko)

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 Sub

et 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 Sub

A+

Bonsoir AlgoPlus!

Très efficace! ça a l'air de fonctionner!

Un énorme merci et une très bonne soirée à toi! :-)

A+

15calcul.xlsm (254.89 Ko)

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 forme

par

        If Sh.Type = 1 Or Sh.Type = 9 Then 's'il s'agit d'une forme ou d'un connecteur

Mais 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é
J'ai mis du temps à comprendre que je devais supprimer tous les connecteurs de mon fichiers pour que ça fonctionne. :-)

Il n'est pas nécessaire de supprimer les connecteurs ???

J'ai dû mal m'exprimer ???

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!

Rechercher des sujets similaires à "affichage images decomposes via combobox"