Excel adattamento foto a cella



  • Excel - adattamento foto a cella
    di narsil87 data: 27/01/2017 11:43:48

    Buongiorno a tutti,
    premetto che sono proprio fresca nell'uso d VBA.
    Su internet ho trovato la macro che vi riporto (che funziona benissimo!), per inserire una immagine da una cartella "Foto" su un file contenente un elenco di prodotti: a prodotto collegavo la foto corrispondente e la adattavo alla forma della cella.

    La mia domanda però è la seguente: se volessi semplificare?
    se io volessi semplicemente creare una macro che mi "sistemasse" la foto che vado a inserire manualmente nel mio file, in modo da adattarla alla dimensione della cella, cosa dovreicambiare?
    E se volessi adattare l'immagine a più celle unite?
    Vi ringrazio davvero per l'aiuto e scusate per il basso livello di conoscenza di excel
     
    Sub InsImg()
    Application.ScreenUpdating = False
    ActiveSheet.Shapes.SelectAll
    Selection.Delete
    mPath = "C:UsersValeriaDesktopNuova cartellaFOTO"
    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 + 2
                    .Left = Range("B" & i).Left
                    .Height = Range("B" & i).Height
                    .Width = Range("B" & i).Width
                End With
            End If
        End If
    Next i
    Application.ScreenUpdating = True
    End Sub



  • di patel data: 27/01/2017 12:28:24

    tu vorresti inserire manualmente nella cella l'immagine e po tramite macro adattarla alla cella ?
    mi sembra una complicazione invece che una semplificazione





  • di narsil87 data: 27/01/2017 12:32:17

    Premetto che non condivido quello che vi sto chiedendo per due motivi:
    - non ritengo che excel vada usato come un power point
    - come dite voi non è una semplificazione
    ma chi mi ha chiesto il file è una persona che non sa quasi usare il pc, figuriamoci excel e voleva solo poter inserire delle immagini vicino al nome del prodotto senza però dover adattare ogni volta l'immagine alla cella...
    Grazie in anticipo!



  • di zsadist data: 27/01/2017 12:39:04

    una domanda.. magari sciocca.

    se non ho capito male, hai un foglio excel con un elenco di prodotti.. accanto al nome del prodotto, visualizzare l'immagine corrispondente, giusto?

    non può essere più utile, chiedo, se in un apposito spazio (che in questo caso puoi definire come dimensioni), apparisse l'immagine del prodotto che selezioni?



  • di narsil87 data: 27/01/2017 12:42:37

    sarebbe bello ma già quando gli ho presentato questa soluzione l'ha trovata complicata perchè dovrebbe salvare le foto in una cartella apposita e nominarle con il nome del prodotto ...!!
    So che è pietoso ma è un mio superiore e devo cercare di accontentarlo :(



  • di zsadist data: 27/01/2017 12:47:05

    beh, non cambierebbe nulla su salvataggio dei file..
    considera:
    le foto non verrebbero caricate sul file excel, rendendolo più "leggero"

    essendo articoli, suppongo che abbiano un codice articolo, in elenco, quindi, le foto basta nominarli con il codice..

    comunque.., era solo per chiedere.. :)




  • di narsil87 data: 27/01/2017 12:49:13

    se non è un problema allora vi chiederei entrambe le soluzioni....! così propongo le due possibilità! grazie 1000!!!



  • di zsadist data: 27/01/2017 13:16:27

    beh, ok..

    guarda, ti metto il codice VBA da riadattare secondo le tue esigenze.. e completandolo :) 
     
    'codice da mettere sul foglio (sheets) ove vi sia l'elenco e lo spazio dedicato per la visualizzazione dell'immagine
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Application.EnableEvents = False 'Blocco la gestione degli eventi
    ind = Target.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Application.EnableEvents = True 'Riattivo la gestione degli eventi
    On Error Resume Next 'se errore, prosegui 
    If Target.Column = 1 And Target.Row > 18 Then GoTo Okrey Else: GoTo NoFoto 'in questo caso, se si seleziona la prima colonna (A) e una riga che vada oltre alla 18, avvio la procedura, altrimenti vado in NoFoto
    
    Okrey:
    Percorso = ActiveSheet.Cells(1, 1) 'in A1 metto l'indirizzo completo della cartella contenente le foto
    
    
    If Range(ind).Value = "" Then GoTo NoFoto
    
    foto = Range(ind).Value & ".jpg"
    
    
    On Error GoTo NoFoto
    Foglio4.Image1.Picture = LoadPicture(Percorso & foto)
    
    
    
    Exit Sub
    NoFoto: 'in caso di errore o di riga non contenente un riferimento per le foto, visualizzo nulla
    Foglio4.Image1.Picture = LoadPicture("") 
    
    End Sub



  • di zsadist data: 27/01/2017 13:22:27

    ah... ti allego un esempio del formato Image1 che ho utilizzato nel codice..

    anzi.. ti ho fatto un file di esempio...



  • di narsil87 data: 27/01/2017 13:55:24

    Grazie 1000! speriamo di convincerlo!



  • di zsadist data: 27/01/2017 14:01:10

    ti ho allegato l'esempio con foto..
    così magari gli fai vedere una cosa nella pratica..

    purtroppo, l'esempio che avevo fatto, comprendeva troppe foto..
    ho ridotto il tutto, per fare un file Zip accettabile..

    scusami