J'aimerai créer un fichier qui me permette d'afficher successivement des images (toujours au même endroit) en fonction du button sur lequel je vais cliquer mais je vous avoue que je suis un peu perdu.
Je vous mets en PJ ce à quoi j'aimerai que cela ressemble.
Les bouttons bleu serait les bouttons actifs et afficherai une image différente en fonction de si je clique sur 20-25 ou 15-20 mais l'image serait affiché toujours au même endroit dans le cadre blanc
Bonsoir Gustinhio, et bienvenu sur XLD,
Pour moi le plus simple est de rendre toutes les images invisibles puis d'afficher celle qui est demandée.
Pour se simplifier la vie, le nom des images est en colonne B qui est masquée.
Ce qui fait qu'on peut rajouter autant d'images qu'on veut sans se préoccuper de leur place, ni de modifier la macro. de plus juste une simple macro pour tout gérer,avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
If Target.Count > 1 Or Target = "" Then Exit Sub
If Not Intersect(Target, [A:A]) Is Nothing Then
Application.ScreenUpdating = False
For Each Sh In Shapes ' On masque toutes les images
Sh.Visible = False
Next Sh
NomImage = Cells(Target.Row, "B") ' On récupère le nom de l'image à afficher
Shapes(NomImage).Visible = True ' On l'affiche
End If
Fin:
End Sub
Bonsoir Gustinhio, et bienvenu sur XLD,
Pour moi le plus simple est de rendre toutes les images invisibles puis d'afficher celle qui est demandée.
Pour se simplifier la vie, le nom des images est en colonne B qui est masquée.
Ce qui fait qu'on peut rajouter autant d'images qu'on veut sans se préoccuper de leur place, ni de modifier la macro. de plus juste une simple macro pour tout gérer,avec :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
If Target.Count > 1 Or Target = "" Then Exit Sub
If Not Intersect(Target, [A:A]) Is Nothing Then
Application.ScreenUpdating = False
For Each Sh In Shapes ' On masque toutes les images
Sh.Visible = False
Next Sh
NomImage = Cells(Target.Row, "B") ' On récupère le nom de l'image à afficher
Shapes(NomImage).Visible = True ' On l'affiche
End If
Fin:
End Sub
Je les ai masqué, tout simplement. faire Mise en page/En-têtes/Afficher. Regarde la pièce jointe 1145172
La macro est événementielle, elle est à mettre dans la feuille considérée.
Merci beaucoup pour ton aide je viens de réussir exactement ce que je voulais faire.
Dernière chose que je voulais te demander si je veux rajouter des Bouttons en colonnes C et masquer la collone D pour avoir le bon nom de l'image comment dois-je changer cette macro ?
If Not Intersect(Target, [A:A]) Is Nothing Then Donne la colonne active sur le clic
NomImage = Cells(Target.Row, "B") Donne la colonne où se trouve le nom des images
Donc si les cellules à cliquer sont en C, et les noms en D :
VB:
If Not Intersect(Target, [C:C]) Is Nothing Then
et
NomImage = Cells(Target.Row, "D")
If Not Intersect(Target, [A:A]) Is Nothing Then Donne la colonne active sur le clic
NomImage = Cells(Target.Row, "B") Donne la colonne où se trouve le nom des images
Donc si les cellules à cliquer sont en C, et les noms en D :
VB:
If Not Intersect(Target, [C:C]) Is Nothing Then
et
NomImage = Cells(Target.Row, "D")
Bonjour,
Je rappelle qu'il faut deux colonnes pour avoir les infos sur une image, une pour écrire un texte et détecter un clic, l'autre pour y mettre le nom de l'image.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
If Target.Count > 1 Or Target = "" Then Exit Sub ' Si selection multiple ou cellule vide on sort
If Not Intersect(Target, [A:A]) Is Nothing Or _
Not Intersect(Target, [D:D]) Is Nothing Or _
Not Intersect(Target, [G:G]) Is Nothing Or _
Not Intersect(Target, [J:J]) Is Nothing Then ' Détection des zones à prendre en compte
Application.ScreenUpdating = False
For Each Sh In Shapes ' On masque toutes les images
Sh.Visible = False
Next Sh
NomImage = Cells(Target.Row, Target.Column + 1) ' On récupère le nom de l'image à afficher
Shapes(NomImage).Visible = True ' On l'affiche
End If
Fin:
End Sub
J'ai rajouté celle ci, à lancer à la main, qui rend visibles toutes les images. Quand il y en a beaucoup cela peut être utile pour les manipuler lors de la mise au point.
Code:
Sub ToutVoir()
For Each Sh In Shapes
Sh.Visible = True
Next Sh
End Sub