skip to Main Content

Urmăream zilele trecute un podcast al lui Mr. Excel şi spre sfârşitul acestuia a lansat o provocare ce a devenit concurs până la urmă.

Care era cerinţa ?
Folosind un slicer să se schimbe o serie de imagini, dar în acelaşi timp să apară şi câte un text personalizat legat de acele poze, într-o formă (shape).
Mai mult decât atât, în momentul schimbării pozelor, poza anterioară să nu mai fie afişată.

După o serie de încercări, am ajuns la o soluţie destul de simplă.
1. Am creat un folder – Images – şi am stocat 3 poze;
2. Am modificat numele pozelor astfel: My_Beach.jpg, My_Car.jpg şi My_House.jpg;
3. Am creat un workbook şi l-am salvat în formatul macro-enabled *.xlsmImages in Slicer.xlsm;
4. Într-una dintre sheet-uri am creat un tabel ce conţine trei coloane: ID, Object şi Text;

IDObjectText
1My_BeachThis is my beach
2My_CarThis is my car
3My_HouseThis is my house
[stextbox id=”warning” caption=”Atenţie” bgcolor=”ffffff”]Datele din coloana Object trebuie să fie sortate ascendent, altfel formula pe care o vom scrie la unul dintre paşii următori, va afişa o eroare.[/stextbox]

5. Pe baza acestui tabel, am creat un PivotTable într-un alt sheet;
6. În tabelul pivot am specificat pentru Row Labels, coloana Object;

Object
My_Car
My_House
My_Beach

7. Am inserat un slicer şi ca sursă am specificat coloana ID şi apoi am modificat slicer-ul astfel încât valorile să apară sub formă de butoane.

Slicers - afişare imagini în funcţie de valoarea filtrată

8.  În celula D2 vom scrie următoarea formulă: =VLOOKUP(A4;tblObjects[[Object]:[Text]];2)
Utilizând funcţia VLOOKUP vom căuta valoarea ce rămâne după filtrare, în tabelul din primul sheet, şi vom afişa textul din coloana 2.
9. Vom insera un shape şi după ce îl desenăm, executăm un click pe acesta şi în bara de formule scriem expresia: =$D$2
Astfel, rezultatul formulei va fi afişat în shape.

Slicers - afişare imagini în funcţie de valoarea filtrată

10. Vom ascunde formula din celula D2, prin tragerea acestui shape peste celulă.

Slicers - afişare imagini în funcţie de valoarea filtrată

11. Acum vom trece la partea de macrocomenzi.
Accesăm editorul VBA folosind combinaţia de taste Alt+F11.
12. În cadrul editorului, vom accesa modulul foii în care avem inserat slicer-ul. În cazul meu este Sheet1 (Slicer).
În partea dreaptă vom selecta opţiunea Worksheet din caseta de evenimente (a) şi opţiunea Change din caseta de proceduri (b).

Slicers - afişare imagini în funcţie de valoarea filtrată

13. Codul scris este:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo err
    'create Location as a constant
    Set Location = Range("A4")
    'set cell J4 as default selected cell
    Range("J4").Select
    'delete all previous images
    ActiveSheet.Pictures.Delete
    'insert a new image
    ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & Location & ".jpg").Select
    Exit Sub
err:
    MsgBox err.Description, vbOKOnly + vbInformation, "Error"
End Sub

Să detaliem codul:
– pentru a nu complica codul, definim o constantă numită Location, constantă ce va face referire la adresa celulei în care am numele pozei.
– am definit celula J4 ca fiind celula activă, în mod implicit, pentru afişarea pozei;
– am adăugat o linie de cod ce va şterge toate pozele existente în sheet;
– folosind calea relativă a workbook-ului, dar şi numele pozelor extrase din celula A4, vom introduce pozele în sheet.
Această porţiune din cod: ThisWorkbook.Path & "\" & Location & ".jpg" are ca rezultat C:\Documents and Settings\Alexandru\Desktop\Images\.jpg (lipseşte numele pozei, fiindcă această porţiune de cod este testată în Immediate Window).

Acum, iată rezultatul:

Download fişiere de lucru

P.S. Sunt una dintre cele 5 persoane care au câştigat câte o carte semnată de Mr. Excel.

Cosmin Tătaru

Pasionat de blogging și tehnologie încă din 2009, Cosmin este aici să vă ajute să vă creșteți vânzările și productivitatea punând tehnologia la treabă pentru dumneavoastră.

Mergeți sus

Dacă derulezi pagina sau dacă navighezi pe acest site, îți dai acordul să folosim cookies. Cookie consent --> vezi detalii

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close