Microsoft 365 Affichage photo : visible - pas visible

famu

XLDnaute Occasionnel
Bonjour à tous,
J'ai une liste d'inventaire de matériels sur une feuille ("Liste") et des photos, dans le même classeur mais sur une autre feuille ("Data Photos").
J'aimerais, via VBA, afficher la photo dans la feuille Liste en face de la référence.
J'ai fait un test (lancement de la macro "Image 1"), ça fonctionne car je fais apparaître l'image qui est déjà sur la feuille liste. Impossible pour moi de la faire apparaître si elle est sur la feuille Data Photos. Pour info, la feuille Data Photos n'est pas complète, il y aura environ une centaine de photos par la suite.
Auriez-vous une solution pour m'aider ?
D'avance merci,
Famu
 

Pièces jointes

  • Inventaire.xlsm
    619.7 KB · Affichages: 13

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Famu,
Un essai en PJ avec :
VB:
Sub Image()
    For Each I In Worksheets(1).Shapes
        I.Delete
    Next
    Sheets("Data Photos").Shapes("Groupe 26").Copy
    Sheets("Liste").Range("F1").Select
    ActiveSheet.Paste
End Sub
On supprime toutes les images puis on copie celle désirée.
Reste ensuite à bien choisir l'image à copier....
( Le mieux que j'ai trouvé même si c'est fastidieux est d'appeler l'image de façon déterministe, par ex avec le contenu de la ligne colonne B. De cette façon on lit la ligne en B ce qui donne le nom de l'image à copier )
 

Pièces jointes

  • Inventaire.xlsm
    619.7 KB · Affichages: 7

famu

XLDnaute Occasionnel
Fonctionne bien ! Le problème et que la macro ne fait pas la différence entre en la photo et le rectangle pour lancer la macro. Du coup, il supprime aussi le rectangle.
Mais le principe est de copier/coller et ensuite supprimer est OK.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ma macro souffre d'un défaut, il supprime aussi les boutons. ( Comme vous vous en êtes aperçu )
Ceci étant dit, les boutons ne servent à rien. On peut faire plus simple pour éviter de rajouter plein de boutons.
En PJ un ex où il suffit de cliquer sur une cellule pour faire apparaitre l'image.
J'ai opté pour une colonne D donnant le N° de l'image, plus simple peut être que de renommer chaque image.
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:D100")) Is Nothing Then  ' Si clic dans colonne A:D
        Nom = "Groupe " & Cells(Target.Row, "D")                ' On extrait le N) de l'image
        L = Target.Row                                          ' On calcule le N° de ligne cliquée
        For Each I In Worksheets(1).Shapes                      ' On efface tous les shapes
            I.Delete
        Next
        If Cells(L, "D") = "" Then Exit Sub                     ' Si pas de N° image on sort
        Sheets("Data Photos").Shapes(Nom).Copy                  ' On copie l'image
        Sheets("Liste").Range("F" & L).Select                   ' On va en F, ligne cliquée
        ActiveSheet.Paste                                       ' on colle l'image
    End If
Fin:
End Sub
 

Pièces jointes

  • Inventaire2.xlsm
    619.2 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Famu,
Un essai en PJ.
Jamais vu ça auparavant. C'est comme si une liste déroulante était considérée comme un shape.
Pour résoudre le problème, je ne supprime le shape que si il est dans la partie droite de l'écran.
Bizarre.
 

Pièces jointes

  • Inventaire (2).xlsm
    499.2 KB · Affichages: 16

Discussions similaires

Réponses
15
Affichages
578
Réponses
10
Affichages
506

Statistiques des forums

Discussions
312 190
Messages
2 086 040
Membres
103 105
dernier inscrit
fofana