Bloccare immagine in cella excel



  • Bloccare immagine in cella excel
    di Gabriela (utente non iscritto) data: 07/03/2017 13:42:33

    Buongiorno,
    devo realizzare un listino con codice prodotto, prezzo, foto e riferimento alla pagina del catalogo cartaceo.
    Ho una macro che mi permette di inserire nella cella accanto al nome prodotto l'immagine.
    Mi resta però un problema: se utilizzo i filtri di excel per fare un ordinamento o per visualizzare solo parte del listino, mi ritrovo le foto dei prodotti non inclusi nel filtro accatastate tutte nell'ultima riga!
    Come posso fare per risolvere questo problema?
    Esiste un modo per bloccare l'immagine nella cella e, quindi, nasconderla quando la riga in cui è contenuta non è visualizzata?


    questo è il codice che utilizzo per caricare le foto:
     
    Sub InsImg()
    Application.ScreenUpdating = False
    
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    mPath = ActiveWorkbook.Path
    r = 2 ' riga inizio prodotti
    Lr = Range("A" & Rows.Count).End(xlUp).Row ' ultima riga da analizzare
    For i = r To Lr
        mFoto = Cells(i, 1)
        
        If Len(mFoto & "") <> 0 Then ' se c'e' il nome prodotto
            If Dir(mPath & "" & mFoto & ".jpg") <> "" Then ' se la foto esiste
                ' inserisce foto e adatta a dimensioni cella/colonna B
                With ActiveSheet.Pictures.Insert(mPath & "" & mFoto & ".jpg")
    
    'NOTA: in blu per centrare la foto nelle celle (puoi ovviamente variare), altrimenti vengono una attaccata all'altra
                    .Top = Range("B" & i).Top + 5
                    .Left = Range("B" & i).Left + 5
                    .Height = Range("B" & i).Height - 10
                    .Width = Range("B" & i).Width - 10
                End With
            End If
        End If
    Next i
    Application.ScreenUpdating = True
    End Sub
    



  • di alfrimpa data: 07/03/2017 14:03:09

    Ciao Gabriela

    Mi auguro tanto di sbagliarmi ma penso che quello che hai chiesto non sia possibile.

    Le immagini sono "oggetti" avulsi dal foglio ossia non sono direttamente collegate ad una cella o ad una riga per cui se filtri dei dati quelle collegate a righe non visualizzate non scompaiono ma si sovrappongono.

    In ogni caso se puoi allegare un file di esempio con pochi record e relative immagini vediamo quello che si può fare.

    Alfredo





  • di Gianfranco data: 07/03/2017 15:42:00






  • di Gianfranco data: 07/03/2017 15:49:34

    Ciao




    vai nella proprietà dell'immagine
    e seleziona

    sposta e ridimensiona con la cella


    ed è fatto

    nella macro bisogna inserire
    xxxxxx.Placement = xlMoveAndSize

    ma non mi ricordo come fare

    A esperti vba la palla



  • di alfrimpa data: 07/03/2017 16:26:58

    Gianfranco credo che la macro serva solo ad inserire le immagini.

    Quando si applica il filtro dovrebbe bastare il tuo primo suggerimento

    Alfredo





  • di Gianfranco data: 07/03/2017 16:30:05

    ciao
    ti ho fregato sul tempo

    prova

     
    Sub InsImg()
    Application.ScreenUpdating = False
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    mPath = ActiveWorkbook.Path
    r = 2 ' riga inizio prodotti
    Lr = Range("A" & Rows.Count).End(xlUp).Row ' ultima riga da analizzare
    For i = r To Lr
        mFoto = Cells(i, 1)
        
        If Len(mFoto & "") <> 0 Then ' se c'e' il nome prodotto
            If Dir(mPath & "" & mFoto & ".jpg") <> "" Then ' se la foto esiste
                ' inserisce foto e adatta a dimensioni cella/colonna B
                With ActiveSheet.Pictures.Insert(mPath & "" & mFoto & ".jpg")
    'NOTA: in blu per centrare la foto nelle celle (puoi ovviamente variare), altrimenti vengono una attaccata all'altra
                    .Top = Range("B" & i).Top + 5
                    .Left = Range("B" & i).Left + 5
                    .Height = Range("B" & i).Height - 10
                    .Width = Range("B" & i).Width - 10
                    .Placement = xlMoveAndSize
                End With
            End If
        End If
    Next i
    Application.ScreenUpdating = True
    End Sub



  • di Gianfranco data: 07/03/2017 16:31:08

    ho inserito solo
    .Placement = xlMoveAndSize

    e funziona bene almeno con le tre immagini a disposizione

    altrimenti bisogna farlo a mano


  • FUNZIONA!!!!
    di Gabriela data: 08/03/2017 10:43:37


    Siete grandi!!!!
    Funziona perfettamente, ho solo dovuto cambiare qualche parametro per centrare meglio la foto nella cella, ma funziona perfettamente!
    ....ancira grazie!