Hojas de cálculo en Excel - página principal

Mostrar imágenes asociadas a un desplegable

Quizás te hayas preguntado alguna vez, como podrías seleccionar un dato de un desplegable, y que al lado salga su foto, es decir, que salga la foto asociada al elemento seleccionado del desplegable. Esto es especialmente útil por ejemplo, si tenemos un listado desplegable de productos o de empleados, y queremos que al seleccionar cada empleado o artículo, nos salga al lado la foto de cada uno de ellos.

¿Verdad que parece un tema interesante?. Pues nada, vamos a tratar de explicarlo, porque no tiene mucho secreto.

Lo primero que tendremos que hacer, es que las imágenes (fotos de los empleados, de los productos, etc.) sean todas del mismo tamaño, para que no se muestren unas imágenes grandes y otras pequeñas, y nos quede poco elegante. Además, es importante que las fotos no tengan espacios vacíos, ni acentos (tampoco los elementos del desplegable), para que los usuarios de todos los países puedan utilizar el código sin problemas. En lugar de utilizar espacios vacíos, usaremos guiones. Por ejemplo, si tenemos un listado de artículos, y hay uno que se llama Bidones de 50 litros, a la foto le pondremos como nombre Bidones-de-50-litros.jpg. Lo recomendable -para tener un código bastante simple, como el que os muestro en este artículo-, es que las fotos tengan todas la misma extensión, …o todas "jpg", o todas "gif", o todas "png", etc. En el caso de que utilicéis otra extensión distinta a "jpg", tendréis que cambiar la línea del código fuente que veréis al final de este artículo, para que en su lugar aparezca "gif", o la extensión que utilicéis para vuestras imágenes.

Las fotos y el libro de excel con el desplegable, los guardaremos en la misma carpeta o directorio. Si estuvieran en directorios diferentes, deberíamos modificar el código VBA para informar de la ruta correcta de las imágenes.

Vamos a explicarlo con un ejemplo. Yo he utilizado una serie de vehículos clásicos (de los cuales soy un apasionado, todo sea dicho de paso), de tal forma que cada vez que seleccionemos uno de los coches, nos saldrá debajo su foto correspondiente. Si por ejemplo seleccionases en el desplegable, el Golf GTI mk1, aparecería esto en tu pantalla:


Y si seleccionases por ejemplo el Seat 124 Sport, aparecería esto de forma automática:


Lo primero será crear en la Hoja2, un listado con los coches que tenemos. En este caso tenemos 5 vehículos, tal y como se muestra en la imagen siguiente:


Ahora, le pondremos un nombre al rango de datos comprendido entre B4 y B8, para lo que seleccionaremos ese rango, y definiremos un nombre para el mismo. En este caso, le he puesto como nombre coches, tal y como se puede ver en la zona enmarcada en rojo, en la siguiente imagen (para definir un nombre, la forma más sencilla es escribir el nombre en esa zona enmarcada en rojo, y pulsar intro):


Ahora ya sabemos que el rango de celdas que hay entre B4 y B8 de la Hoja2, se llama coches.

A continuación pasaremos a la Hoja1, y por ejemplo, en la celda C4, crearemos la lista desplegable con los coches, para que cada vez que seleccionemos un modelo, nos salga debajo su foto correspondiente. Para ello, seleccionaremos en el menú Datos, la opción Validación…, y en la pestaña Configuración, que es la que nos saldrá por defecto en primer plano, elegiremos en Permitir la opción Lista, y en Origen introduciremos el nombre definido anteriormente, precedido del signo igual, tal y como se muestra en la siguiente imagen:


De tal forma que tendremos algo como esto que se muestra en la siguiente imagen, al pulsar en la flechita del desplegable:


Una vez hecho esto, solo nos quedará copiar y pegar el código que hará que se nos muestre la foto, pero no lo incluiremos en un módulo, sino dentro de la Hoja1, tal y como se muestra en esta imagen:


El código que tenemos que copiar y pegar en la Hoja1, es este:


Private Sub Worksheet_Change(ByVal Target As Range)
'Si ha errores, que continúe
On Error Resume Next
'Si cambiamos el dato de la celda C4,
'mostramos la foto de ese vehículo

If Target.Cells = Range("C4") Then
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'pasamos a una variable, el nombre de la foto,
'que será el mismo que el nombre del coche, pero
'separado con guiones, y sin acentos, para que
'todos los usuarios puedan verlo correctamente

foto = Range("C4").Value
'en la foto, reemplazamos los espacios, por guiones
foto = Replace(foto, " ", "-")
'ahora le añadimos la extensión "jpg"
foto = foto & ".jpg"
'ahora buscamos la foto en el mismo directorio
'donde tenemos este fichero de excel

rutayarchivo = ActiveWorkbook.Path & "\" & foto
'borramos la foto del coche (si hubiera alguna)
Me.Shapes("foto_del_coche").Delete
'creamos el objeto fotografia, con la foto insertada
Set fotografia = Me.Pictures.Insert(rutayarchivo)
'haremos que la foto ocupe desde B6 hasta D21,
'para que no salgan fotos supergrandes, o
'superpequeñas, y salgan más "normalitas"

With Range("B6:D21")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
'le ponemos un nombre al objeto "fotografia"
'para poder borrarla cuando cambie la celda D6
'(ver que borramos la foto que hubiese, antes de insertar la nueva)

With fotografia
.Name = "foto_del_coche"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
'eliminamos el objeto
Set fotografia = Nothing
'ponemos todo como estaba
Application.ScreenUpdating = True
End If
End Sub

Ese código lo que hace es insertar la foto, de cada uno de los coches, cada vez que seleccionemos uno de ellos. Para ello, debemos tener presente una serie de variables que he utilizado, para simplificar el código VBA:

1.- Las fotos y el fichero deben estar en el mismo directorio.
2.- Las fotos y los modelos de vehículos, deben tener el mismo nombre (en ambos casos sin acentos, y en el caso de las fotos, sustituyendo los espacios por guiones).
3.- Las fotos deben tener todas la misma extensión (en el código verás que aparece por ahí la extensión ".jpg").

Desde aquí podéis descargar el fichero de excel, con el ejemplo que os presento en este artículo, junto con las imágenes de los vehículos clásicos, para que podáis ver en funcionamiento como se crean listas de validación con imágenes asociadas a cada elemento del desplegable.



114 comentarios:

OSCAR dijo...

¡Excelente aporte! Gracias

El pilt®afilla - www.3piesalgato.com dijo...

Muchas gracias por tu comentario.

Víctor dijo...

Muy bueno, nunca había estado en tu blog y es genial.

Pero tengo una pequeña sugerencia, ¿qué te parece la idea de usar un objeto imagelist en lugar de rutas específicas?

El pilt®afilla - www.3piesalgato.com dijo...

Muchas gracias por tu comentario.

Respecto al imagelist, hummmmm, para ser sinceros, nunca lo he utilizado.

Anónimo dijo...

Hola, superútil todo esto. Pero si protejo la hoja ya no puedo ver las fotos. ¿Se puede hacer algo?

El pilt®afilla - www.3piesalgato.com dijo...

Gracias por tu comentario. Aquí tienes como desproteger y proteger una hoja. Tan solo tendrás que poner una línea para desproteger la hoja, al principio del código, y otra línea para proteger la hoja, al final del código (esas dos líneas están en el enlace que te puse antes).

Un saludo.

Anónimo dijo...

Hola,
Gracias por el trabajo, me ha ayudado, pero necesito algo más...
Podemos hacer lo mismo sin contar con ficheros externos?.
Es decir, tener todas las imagenes ya en la hoja y visualizar la que nos interese dependiento de la seleccion del combo?.

OSCAR dijo...

Javier: tengo un problema al aplicar la función en un UForm: cuando cambio el nombre en el desplegable, y el nuevo no tiene foto, se queda con la foto anterior. Está en el evento Change del ComboBox1...

Anónimo dijo...

Hola tus comentarios son muy buenos, quisiera saber como puedo hacer para que cada vez que seleccione un dato de la lista, graficar datos, por ejemplo de varias compañias?

Muchas gracias

Anónimo dijo...

Hola, Excelente. Una posible mejora. Tengo un combo que se rellena de una lista de otra hoja.Este combo lo uso para rellenar una celda de una fila, me gustaria que cada vez que voy bajando de fila, el combo apareciera a la derecha de la celda que tiene que ser rellenada. Porque si tengo 300 filas (registros) el combo siempre aparece en el misno sitio y tengo que desplazarme con la barra lateral hasta donde se encuentra la ultima fila. Gracias de entemano

Anónimo dijo...

hacer que se visualice un grafico espesificado en una hoja de calculo y se cmbie segun el nombre de el rango

Anónimo dijo...

EXCELENTE,
COMO PUEDO HACER LO MISMO, PERO CON UNA LISTA DE 300 ARTICULOS CADA UNO CON SU FOTO, Y QUE APAREZCAN CADA UNA CON SU FOTO AL LADO?

Anónimo dijo...

!Hola Javier!-Desde Costa Rica, un saludo y gracias por tus aportes. Hice bien el despegable de vehículos, pero al final despues de pegar el código no me salen las fotos. ¿Cómo hago para que se enlacen las imágenes al proyecto?-¿Con cada imágen hay que insertar el código o sólo una vez para todas?-Ni con el ejemplo que tuyo se pudieron ver la foto. ¿Cuál será el problema?. Gracias.

El pilt®afilla - www.3piesalgato.com dijo...

Hola anzuna1946.

Deberías poder ver las imágenes, si las descargaste y las guardaste en el mismo directorio donde has guardado el fichero de excel (viene todo en un fichero comprimido).

Hasta ahora nadie se ha quejado de que no las pudiera ver. Yo lo he testeado y funciona correctamente.

No obstante, prueba una cosa. En el código hay una línea que pone esto:

On Error Resume Next

Ponle una comilla simple delante, para que sea un comentario (o quita esa línea). Prueba de nuevo la aplicación, y mira a ver si te tira algún error.

Un saludo.

Anónimo dijo...

EXCELENTE APORTE JAVIER ME SIRVE MUCHO

ElProfe dijo...

Javier:

Le encontré utilidad a tu propuesta y al código de este artículo, haciendo un "album familiar dinámico" en Excel (fotos, fechas de nacimiento, etc. etc.)

Quedó espectacular!

Gracias por compartir tu conocimiento.

Saludos desde Colombia

Juan M. Beltrán V.

ElProfe dijo...

Javier:

Tengo una inquietud al respecto de tu archivo para "Mostrar imagenes.."
Intenté reemplazar la celda de validación por un Combobox y por un listbox, pero no funcionó :(

Por favor disculpa si en alguna parte me perdí de algo, pero cual es la razón de que no funcione con estas herramientas?

Gracias anticipadas por tu atención y por tu ayuda.

Saludos,

ElProfe

El pilt®afilla - www.3piesalgato.com dijo...

es que no lo he probado, pero imagino que tiene que ver con que ya no cambia nada de la hoja de cálculo, es decir, ya no se ejecuta Worksheet_Change, sino que lo que cambia es el item del combobox.

En el blog hay algunos ejemplos para hacer cosillas, en función del item seleccionado en el combo. Échales un vistazo.

Saludos.

excel n' cia dijo...

La leche.
Muy bien Javier, muy chulo!!!.
Saludos.

excel n' cia dijo...

Vaya Javier,

Veo con sorpresa como dejas mi comentario de alabanza mientras aquellos en los que pretendía hacer una humilde aportación han desaparecido...

Pues muy bien, realmente dominas excel y BV, pero sigo pensando que en numerosas ocasiones es más fácil utilizar el propio excel que teclear interminables líneas de código.

Por ejemplo, tu opción para la primitiva, no dudo que el programa de BV sea exquisito. Pero se puede hacer lo mismo con sólo un par de fórmulas en excel.

Saludos.

excel n' cia dijo...

ah,...

Espectacular, y te has dignado a entrar en mi blog para votar que es malo...

Muchas gracias por tu contribución.
Pensaba que podría ser interesante compartir ideas contigo, pero veo que solo te interesan los alagos.

Para hacerte feliz, entraré de vez en cuando para decirte lo bueno que eres.

Saludos.

El pilt®afilla - www.3piesalgato.com dijo...

excel n' cia, varias cosas que debo dejar claras:

Yo no he entrado en tu blog a firmar negativamente. Para serte sincero, ni siquiera he entrado, porque no he tenido tiempo, pero iba a entrar a ver lo que tenías sobre excel, porque muchas cosas no las sé, y a mí también me gusta aprender, y te lo digo completamente en serio.

He borrado todos tus mensajes, porque contenían spam. Si te fijas, en el blog, no existe ni un solo enlace a webs, de gente que solo escribe "me gusta tu blog, bla, bla, bla". Suelo borrar los enlaces, porque este blog no debe servir para posicionar la web de los usuarios, sino para compartir lo poco que sé.

He borrado todos tus mensajes precisamente por eso, porque en todos ellos, has dejado un enlace a tu web. Si solo lo hubieras hecho 1 vez, es muy probable que no lo hubiese borrado, pero creo que no tenías necesidad de dejar tu web, en cada uno de los mensajes.

Si te fijas, solo en uno de ellos, no has dejado enlace, y ese mensaje no lo he borrado.

Te garantizo que no ha habido otro motivo para borrar tus mensajes, pues como podrás ver, todas las aportaciones que hacen los usuarios del blog las respeto, y acato, siempre que no las usen como plataforma para dar a conocer sus sitios web, pues como te comentaba, me molesta el uso interesado que se le de al blog. Si lo deseas, te invito a que postees de nuevo tus mensajes (los puedes copiar y pegar, pues están aquí: http://hojas-de-calculo-en-excel.blogspot.com/feeds/comments/default), pero sin poner en todos ellos la dirección de tu blog. Puedes hacerlo 1 vez, pero como tu comprenderás, 1 vez en cada mensaje que postees, no es ético.

Un saludo.

excel n' cia dijo...

Está bien Javier,

No tiene sentido discutir, si es así como díces te pido disculpas por mis comentarios. No pensé que te molestase que dejase mi dirección porque había visto varias, como por ejemplo esa en la que ciertamente con buen criterio te conceden el blog de oro. De todos modos había dos aportaciónes, si ese es el caso, podías haber dejado una.

No volverá a aparecer, a decir verdad no creo que haga más comentarios.

Lo que sí mantengo es que a veces tengo la impresión que se pueden hacer cosas más rápido con las fórmulas de excel que con BV.

Como ejemplo si quieres puedes mirar en mi blog (del que no pongo la dirección ya que la tienes), sobre cómo hacer un simulador de primitiva con =Aleatorio()*48)+1 (o 8 para el complementario). Se tarda 2 minutos y sinceramente creo que el resultado es el mismo.

Saludos y disfruta de las vacaciones (porque supongo que como yo estarás de vacaciones), si no ojito que el curro está muy chungo...

El pilt®afilla - www.3piesalgato.com dijo...

Siento que te lo hayas tomado tan mal, pero te borré los mensajes por ese único motivo. Me puedes poner a parir, o puedes decir que hago las cosas mal, pero no será motivo para borrar un mensaje.

Si te fijas, incluso en la última entrada sobre el VAN y la TIR, algunos usuarios me decían que estab haciendo las cosas mal, y después de investigar un poco en la ayuda de excel, tuve que aceptar que siempre me habían engañado respecto al uso de la función VAN. En ese mismo artículo, he corregido el texto, para adapatarlo a lo sugerido por los usuarios, tal y como se puede leer en los comentarios de la entrada del tir y van

Ese enlace que comentas, lo dejé porque solo lo puso una vez, y me parecía algo inocuo.

Tú pusiste 4 comentarios con enlaces (puedes verlos aquí: http://hojas-de-calculo-en-excel.blogspot.com/feeds/comments/default). Borré todos excepto el último, y dió la casualidad que ese no tenía enlace.

Tus aportaciones me parecen muy buenas, y tienes toda la razón del mundo, hay infinidad de cosas que se pueden hacer sin necesidad de usar macros, pero el blog he intentado enfocarlo mayoritariamente a ese tipo de contenidos, aunque de vez en cuando toco algunas funciones.

Desde aquí te invito a que si lo deseas, postees de nuevo tus mensajes (se guardan en las rrs, de: http://hojas-de-calculo-en-excel.blogspot.com/feeds/comments/default). Te bastará hacer un copiar y pegar, pero por favor, pon solo una vez el enlace.

Como Blogger no me permite editar los comentarios de los usuarios (o al menos yo no sé como se hace), por see motivo me vi obligado a borrarlos.

Un saludo.

excel n' cia dijo...

OK Javier,

Ya te digo que no tengo motivos para ponerte a parir, tu blog me parece excelente. Simplemente me resultó curioso que en cuestión de minutos desaparecieran los comentarios y apareciera el voto... llevo un par de meses con el blog y su tráfico no ofrece mucho margen a la casualidad.

Ya que insistes te explico mi aportación para la primitiva:

Procedimiento:
Llamamos a la pestaña 1 de excel "Cálculos"
Celda A1, =(ALEATORIO()*48)+1. Arrastramos esta fórmula unas cuantas filas (pongamos que hasta la fila 20 aunque no hace falta tanto). Con esto generamos una serie de números aleatorios del 1 al 49.
Celda C1, =(ALEATORIO()*8)+1. Con esto generamos un número aleatorio del 1 al 9 para el reintegro.

Lamamos a la pestaña 2 "Simulador"
Grabamos aquí una macro que haga lo siguiente:
Hace doble click en A1 de Cálculos y ejecuta Enter. (con esto obtenemos nuevos números aleatorios)
Copia la columna A de Cálculos y la pegamos en valor en la columna B
Si tenemos excel 2007, seleccionamos la columna B y ejecutamos (Datos / Eliminar coincidentes)
Con esto tenemos suficientes números aleatorios no repetidos para nuestra primitiva.
Terminamos la macro.
En la pestaña Simulador insertamos un botón de comando con el nombre Generar Primitiva, al que le asignamos la macro que acabo de explicar.
Finalmente, hacemos una carátula en la pestaña Simulador en la que aparezcan los 6 números, el complementario y el reintegro, Vinculamos los 6 números y el complementario a las celdas B1, B2, B3, B4, B5, B6, B7 de la hoja Cálculos y el reintegro a la celda C1.
Fin.

Ala y dejémoslo ya, que si no acabaremos enamorándonos...

excel n' cia dijo...

Corrección =ENTERO(ALEATORIO()*49)+1. Cosas de la improvisación.
Saludos.

Anónimo dijo...

hola javier felicidades por tu blog navegando vine a parar por aqui te cuento me encanta toda la informacion que muestras este tema es excelente!!! gracias por compartir tu conocimiento


Saludos desde Guatemala
Carlos..

Anónimo dijo...

muy buen aporte!!!lo unico q no se bien como hacer es donde ingresar el ulitmo paso, es decir donde hay q introducir el codigo, en q parte de la hoja 1,descargue el fichero de exel, pero no funciona tampoco en mi pc, mi mail es alejandro1989l@hotmail.com, agradeceria su respuesta, gracias por su tiempo

El pilt®afilla - www.3piesalgato.com dijo...

Para que funcione, debes habilitar las macros. Para ello, si usas Excel 2007, verás una barra debajo de la barra de fórmulas, que te informará que el fichero ha sido bloqueado por contener macros. Verás un botón al lado para habilitar las macros.

Si usas una versión anterior (excel 2003, XP, 2000, etc), ves s Herramientas --> Opciones --> Pestaña Seguridad --> Botón Seguridad macros --> Selecciona un nivel de seguridad bajo. Cierra excel, vuelve a abrir el fichero, y comprueba si funciona (debería funcionar).

Anónimo dijo...

Me podrían explicar exactamente en donde debo pegar el código para que aparezca la foto? estoy tratando de hacer esta funcion en un formato propio pero no puedo. Veo como que en algun momento se llegó a VB, entonces debo usar los dos programas? o solo excel?

El pilt®afilla - www.3piesalgato.com dijo...

Mírate este artículo donde se explica como hacer macros. Allí verás donde se debe colocar el código (solo necesitas excel, sin ningún programa adicional).

Anónimo dijo...

Hola javier, antes que nada excelente tu pagina, saque un monton de cosas. Estoy con un laburo en el cual tengo dos matrices, una con venta de miel y la otra de azucar (los lados de las matricies son meses y paises.
Estoy con listas desplegable y indice + coincidir pero no peudo resolver como le indico de que tabla tomar los valores. Espero tu ayuda
Saludos, lucas

Unknown dijo...

Hola, una consulta, en Excel 2007 no ajusta el tamño de la imagen, pero en el 2003 si lo hace, por lo demás excelentes tus aportes

Anónimo dijo...

Buena pagina, tengo una pregunta como puedo copiar una imagen en la misma pestaña con formula o bien si se puede modificar el codigo para que aparesca la misma foto varias veces.

Gracias por las aportaciones

Dae dijo...

Muchas gracias

Pero tengo una duda, yo en lugar de lista desplegable utilizo un cuadro de control y no se como hacer para que en vez de la lista utilice el cuadro. Pense que podia utilizar la celda vinculada, pero no me funciona a menos que yo cambie manualmente el valor de la celda; Si pudieras ayudarme te lo agradeceria mucho

brandon dijo...

HICE TODO EL EJERCICO

DEL MENU E IBA TOD BIEN PERO CUANDO EMPEZO LO DEL CODIGO YA NO SUPE QUE ONDA ME PODRIAS AYUDAR PLISS

ME INTERESA MUCHO ESTE EJEMPLO COMO METO ESE CODIGO AL EXEL?

MI CORREO ES sxyyd_22@hotmail.com espero tu respuesta gracias

El pilt®afilla - www.3piesalgato.com dijo...

Mírate este artículo donde explico como se hacen las macros

Un saludo.

Unknown dijo...

Increible tu aporte, pero como hago para poner en la misma hoja varias opciones como esta, pq si copio el codigo otras veces mas(cambiando los parametros) me da error. ayuda porfiii. jejjeje
gracias ....

Unknown dijo...

FENOMENAL ESTA OPORTACION UNA PREGUNTA NADAMAS COMO HAGO PARA ANEXAR INFORMACION A LAS FOTOS EJEMPLO MODELO DEL AUTO, PRECIO, ESPECIFICACIONES, ETC, ETC.
GRACIAS Y FELICIDADES POR ESTE ARTICULO

Anónimo dijo...

hola, muy buena macro, sabes, aver si me puedes ayudar amio, quiero saber si existe una macro que haga lo siguiente:
teniendo una base de datos (en excel) de nombres, y al darle un click en cualquier nombre que automaticamente tome la fotografia de la persona seleccionada en la lista y automaticamente lo guarde en una carpeta con el nombre de la persona.
eso es lo que quiero.
gracias por su atencio prestada

Anónimo dijo...

Hola, tengo una hoja de excel con imagenes que he insertado manualmente, pero deseo una formula para que cuando haga una hoja nueva al usar por ejemplo buscarv busque la referencia y me ponga la imagen que esta en otra columna.

Te dejo mi correo para ver si me puedes ayudar: isaac.abarca@gmail.com

Unknown dijo...

Muchas gracias por el aporte, realmente me ayudo con un formulario que estoy creando pero necesito pedirte un favor, como puedo modificar la macro para buscar las imágenes en una carpeta distinta, la idea es crear una carpeta en donde este el archivo excel y dentro de esta crear otra carpeta con las imágenes.

Muchas gracias y saludos desde Chile.

El pilt®afilla - www.3piesalgato.com dijo...

Si tienes por ejemplo una carpeta para las imágenes llamada "IMG" (sin las comillas), cambia esta línea del código:

rutayarchivo = ActiveWorkbook.Path & "\" & foto

por esta otra:

rutayarchivo = ActiveWorkbook.Path & "\img\" & foto

Saludos.

Unknown dijo...

cuando utilizo tu codigo no me funciona el Application.ScreenUpdating en mis otras macros como lo corriges?

Anónimo dijo...

Pues simplemente gracias y aprovechando para preguntarte: Si en lugar de 1 foto quisiera que desplegar dos ¿cual seria el codigo?

Me puedes ayudar?

Gracias y un saludo desde Guatemala....

Anónimo dijo...

hOLA Javier quisiera saber una cosa!!...y es que quiero insertar una unas imagenes que estan en otra carpeta que parte del codigo debo cambiar para que las imagenes me cambien????? Gracias de antemano

El pilt®afilla - www.3piesalgato.com dijo...

Pues tendrás que cambiar una sola línea. Ojo, que he editado el código para ponerle un nombre correcto a la variable donde informamos de la ruta y del archivo. Hasta ahora, se llamaba "ruta", y se lo he cambiado por el de "rutayarchivo", por ser más correcto y descriptivo.

Por tanto, deberás cambiar esta línea:

rutayarchivo = ActiveWorkbook.Path & "\" & foto

Por esta otra (suponiendo que tengas las fotos en la carpeta 2, que cuelga de la carpeta 1, y que a su vez cuelga de la unidad C):

rutayarchivo = "C:\Carpeta 1\Carpeta 2\" & foto

Anónimo dijo...

Hola Javier gracias por la Info anterios pero sigue sin funcionarme!! una consulta ¿este archivo funciona en 2007????? ya que hice todo al pie de la letra , modifique el tamaño de las imagenes para que todas tubieran exactamente el mismo tamaño,tengo bien el rango de datos, etc, no se si tal vez sea que tengo que modificar algun codigo fuente, ya que mi trabajo consiste en la colocacion de logos segun la empresa y el codigo habla de vehiculos....no se si tenga algo que ver????
Gracias de antemano

El pilt®afilla - www.3piesalgato.com dijo...

Sí funciona. Fíjate en el comentario de gantonios, del 8 de enero de 2010.

Anónimo dijo...

Ok javier gracias..pero a mi ni me salen las imagenes si quiera,..lamento ser tan insistente pero de verdad necesito este archivo ...solo una ultima informacion y dejo de molestar...creo que mi problema esta en la direccion de las fotos yo las tengo en mis documentos una carpeta que se llama logos entonces la sistaxis seria asi:

rutayarchivo = "C:\Documents and Settings\jareyes\Mis documentos\LOGOS\" & foto asi?????????
Gracias y disculpa la insistencia

El pilt®afilla - www.3piesalgato.com dijo...

Prueba con los ficheros del ejemplo. Coloca las imágenes en esa carpeta de LOGOS, y el fichero donde quieras. Verás como te funciona.

Si en tu caso no te funciona con tus imágenes, es porque no has has llamado como se indica en el artículo. Las imágenes deben llamarse igual que los artículos, con la excepción de que las imágenes deben llevar un guión entre palabra y palabra, tal y como se explica en el ejemplo.

Un saludo.

Anónimo dijo...

Hola de nuevo Javier le ruego me disculpe por la insitencia..pero es primera vez que falla una macro....pues vera solamente tengo 5 logos son ELCO,IPSA,SAENS,REYS,SOEN los mismos nombres son tanto para logos como para la lista despegable!!!no utilizo guiones porque no llevan....

El pilt®afilla - www.3piesalgato.com dijo...

¿Pero probaste con el ejemplo del artículo?. Si el ejemplo del artículo te funciona, entonces es que estás poniendo mal la ruta del fichero.

Prueba a quitar la primera línea donde pone: On Error Resume Next, y de esa forma verás cual es el error que te tira el macro.

Antes comprueba que te funcione el ejemplo de este artículo, y que puedes descargar. Si funciona, es que algo de tu macro no es correcto (ruta, archivo, etc.).

¿A ver si tus logos van a ser "gif", y no lo has cambiado en el macro?. En el macro aparecen "jpg".

Más no puedo ayudarte, lo siento.

Saludos.

Anónimo dijo...

Hola Javier muchas gracias por su paciencia....en efecto me funciono en mi laptop personal que usa Excel 2007 al igual que la PC de mi trabajo...pero en la de mi trabajo NO ME FUNCIONA!! ..y si todos los logos son extension jpeg y tienen el mismo tamaño...hize lo que me dijo del error y me salio error en este linea
Me.Shapes("foto_del_coche").Delete
No se si sera que tengo cambiar el texto entre comillas???

El pilt®afilla - www.3piesalgato.com dijo...

Bueno, ese error es normal porque estamos intentando borrar algo que no está definido (el nombre d ela foto), pues este se define al final del macro (de ahí que sea imprescindible el on error resume next).

Siento no poder ayudarte más, porque evidentemente tiene que ver con la instalación de tu pc del trabajo. Quizás no sea una instalación completa, o falte alguna referencia. Comprueba desde el laptop de tu casa, entrando en modo VBA (Alt+F11), que tienes las mismas referencias cargadas. Para ello, desde la ventana VBA, ve a "Herramientas", selecciona "Referencias", y fíjate cuales tienes marcadas con una muesca. Quizás en el trabajo no tengas las mismas.

Más no te puedo ayudar, porque evidentemente es un problema que solo se resgitra en el pc de tu trabajo.

Un saludo.

Anónimo dijo...

Hola Javeier muchisimas gracias por la ayuda ya logre insertar las imagenes ya pude arreglar el problema. de nuevo muchisimas gracias por este aporte de verdad que lo necesitaba
Saludos

Unknown dijo...

Hola Javier Marco, muchas gracias por tu aporte me parece muy interesante el tema, yo nunca he realizado una macro,
Necesito ese mismo ejemplo que publicastes y lo hice paso a paso todo lo del tutorialm hice la lista desplegable, hice la macro, pero cuando selecciono el nombre de la foto que quiero que aparesca no me sale, me gustaria que me ayudaras. muchas gracias

El pilt®afilla - www.3piesalgato.com dijo...

Hola Sandra. Para saber por qué no te funciona, échale un vistazo a estas cuestiones:

1. Fíjate que tengas introducidos en la hoja 2, los nombres de las imágenes, tal y como se llaman realmente (sin la extensión gif, jpg, png, etc).

2. Fíjate que en el macro las imágenes son jpg. Si tu tienes gif, deberás cambiar esa línea en el macro.

3. Debes tener las imágenes en la misma carpeta donde tienes el archivo con el desplegable.

4. Los nombres de las imágenes deben llamarse como en el punto 1 (deben estar incluidos en la hoja 2), pero deben llevar un guión medio entre palabra y palabra, si las imágenes tienen nombres compuestos.

Ese es todo el secreto que hay, pues es bastante sencillo. Bájate el ejemplo que encontrarás al final del artículo, y cambia una foto de un coche, por una imagen de las tuyas (que sea jpg), cambiando también el nombre de la imagen en la Hoja 2. Verás como te funciona.

Unknown dijo...

hola, gracias por tus recomendaciones ya las tuve en cuenta y reemplaze las fotos de los coches por mis fotos.
ahora tengo otra pregunta ojala me pudieras ayudar, estas fotos yo necesito que aparezcan en un formulario que tengo, como hago para que salga alli?, intente copiar el formato en la hoja de tu ejemplo y no me funciono.

El pilt®afilla - www.3piesalgato.com dijo...

En un próximo artículo, explicaré como mostrar las imágenes directamente en un formulario.

Un saludo.

Unknown dijo...

Hola Javier Te felicito por tu gran conocimiento en excel, ahora me gustaria pedirte un gran favor, hice todos los pasos que mencionas y en efecto se puede hacer lo ke mencionas...ahora me gustaria pedirte tu ayuda para ke me digas como podria hacerle para hacer varios desplegables en la misma hoja de datos, osea que el mismo que hice se pegue en varias celdas y muestre las mismas imagenes del primer desplegable, practicamente un copy paste de esa lista. te agradeceria tu pronta respuesta y solucion a esto que te pido.

por tu atencion, muchas gracias

Unknown dijo...

hola javier, gracias por tu aporte. aprovecho para pedir tu ayuda, quiero hacer una aplicación para que al escribir un codigo, salga la foto de ese artículo, porfavor agregame al messenger para poder hablar, lensafer@hotmail.com

Claudia Brule dijo...

Javier:

Muchas gracias por tu blog, realmente es de utilidad, me sirvió mucho para hacer mejor mi trabajo. Cariños. Claudia

Anónimo dijo...

AMIGO muy buen aporte pero tengo una preguntica. si quisiera poner en una misma hoja que me salgan dos fotos osea digamos lo q ponga en la celda c4 me sale una foto ya pero que digamos en la celda f4 me saliera otra: como haria ?

Juan Pablo Deheza dijo...

Buenas Javier, he estado siguendo tu Blog mucho tiempo y es interesantisimo todo lo que pones y me ayudo siempre un monton. Lo que me tiene ahora sin sueño es como puedo mostrar la imagen al hacer CLICK en una palabra (por ejemplo click en MOSTRAR) y que me muestre la imagen que quiero. El problema esta en que esa imagen tiene que estar en el mismo archivo de excel (puede estar en otra hoja pero si en el mismo archivo). El problema viene porque lo que hago es para presentar en mi empresa y no puedo entregar un ZIP con el archivo excel y la carpeta con las imagenes... solo tengo que entregar un archivo excel... Muchas gracias de antemano y espero tu contestacion pronto!! SALUDOS Y MUCHAS ENERGIA PARA TI!!

Anónimo dijo...

Muchassssssssssssssssss graciaz!!!!!!!!!!!!!!!!!!! me valio de muchoooo =)

Alexis dijo...

Una consulta, como hago si las imagenes varian mucho de tamaño? el asunto es q por asunto de la finalidad del archivo no puedo cambiarles el tamaño

El pilt®afilla - www.3piesalgato.com dijo...

Pues tendrás que adaptarlas al tamaño más pequeño que tengas. En Excel 2003 la aplicación funciona correctamente, y redimensiona todas las imágenes a un tamaño predeterminado, a la hora de insertarlas. En Excel 2007 algún usuario ha comentado que no funciona este redimensionamiento, aunque no he tenido tiempo ni de mirarlo, la verdad.

Un saludo.

Daniel Escudero dijo...

Hola Javier, estoy en el trabajo y leia tu blog (jaja), lo encontre muy bueno, he apendido harto, pero tengo una duda, ¿se puede en vez de mostrar una imagen mostrar una celda especifica con un nombre en ella?

Saludos!

El pilt®afilla - www.3piesalgato.com dijo...

Si yo te contara la de gente que entra al blog en horario laboral, te sorprenderías :-)

Creo que buscas algo como esto: Validación con datos en otra hoja.

Saludos.

ANIBAL3 dijo...

Saldos. Gracias por guiarnos en este mundo del Excel. Hay alguna otra forma de mostrar imagenes asociadas a un desplegable pero sin entrar Vb; es decir solo con formulas?. Gracias

Anónimo dijo...

Funciona a la perfección, pero como se puede ver el archivo en otra maquina sin que aparezca: No se puede mostrar la imagen vinculada, puede que se haya movido, cambiado de nombre o eliminado....

El pilt®afilla - www.3piesalgato.com dijo...

Te en cuenta que el fichero de excel sin las imágenes, no funciona. Las ímágenes deben estar alojadas en la misma ruta donde guardes el fichero, así que si a un usuario le envías el fichero de excel, deberás enviarle también las imágenes, recordándole que tiene que guardar todo en la misma carpeta.

Saludos.

Mauk dijo...

Muchisimas gracias me has ayudado un monton!!

LuCa dijo...

Buan día Javier, tu archivo funciona muy bien, felicidades, ahora, si quiero por ejemplo dos listas, una de carros como la tuya y otra de motos, se puede? que debo modificar en el código?

Gracias.

El pilt®afilla - www.3piesalgato.com dijo...

Pues crea otra lista desplegable al lado, siguiendo el mismo ejemplo, y en el macro, añade otro condicional que evalúe si estamos cambiando la celda desl desplegabla de las motos. En el ejemplo hay un condicional IF que mira si estamos cambiando el modelo de coche de la celda C4. Fíjate en esta línea:

If Target.Cells = Range("C4") Then

Ese condicional acaba con el "End If" del final. Justo debajo de ese end if, añade otro con la nueva lista de motos y ves probando si te funciona todo. Lo mejor es probar, y mirar donde falla, arreglar, probar y volver a mirar.

Saludos.

LuCa dijo...

Excelente!!! al principio no me salia porque al editar la macro no se donde me ubicaba el sistema, le di click a la hoja1 y ahí modifique como me dijiste y listo!!!

Hay algun problema si quito la opcion de eliminar la foto anterior?

Veo que se van sobreponiendo las fotos, implica eso algun problema?

Un Abrazo.
LuCa.

El pilt®afilla - www.3piesalgato.com dijo...

Existe el problema de que si grabas el fichero, ocupará más, pues estarás almacenando un montón de fotos. Es más eficiente y más estético desde un punto de vista de programación, borrar la foto anterior, y presentar la nueva.

Saludos.

fernando dijo...

Hola ,no entiendo mucho. pero estoy
trabajando con marcas de celulares
y sus modelos. si busco la marca nokia ,como puede ver la imagen....
donde guardo todas las fotos de los celulares.gracias

El pilt®afilla - www.3piesalgato.com dijo...

Tienes que guardarlas en la misma carpeta donde guardes el libro de excel con el desplegable. Si te miras el artículo, verás que lo pone.

Saludos.

Anónimo dijo...

¡Excelente!, es lo que andaba buscando, lo he probado y funciona perfectamente, aunque por motivos de seguridad debo de tener la hoja protegida y las celdas bloqueadas y ocultas, y es entonces cuando me srgen el problema de que cuando pincho en la lista desplegable no aparece la foto, me gustaria que me asesoraras de que es lo que estoy haciendo malamente, y si me puedes ayudar a solventar elproblema.
Y de nuevo muchisimas gracias por el aporte.

El pilt®afilla - www.3piesalgato.com dijo...

Prueba poniendo esto en la misma hoja:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells = Range("C4") Then
ActiveSheet.Unprotect
Else
ActiveSheet.Protect
End If
End Sub

Con eso, cada vez que selecciones la celda C4 donde está el desplegable, se desprotege la hoja, para poder añadir las imágenes. Cuando te mueves a otra celda que no sea C4, se vuelve a proteger la hoja. Se protege y desprotege sin password. Si la hoja tiene password, cambia esto:

ActiveSheet.Unprotect

Por esto otro (entrecomillando tu password):

ActiveSheet.Unprotect "tu_password_aqui"

Lo mismo para Protect. Cambia:

ActiveSheet.Protect

Por esto otro:

ActiveSheet.Protect "tu_password_aqui"

Saludos.

Anónimo dijo...

¡PERFECTO!, me funciona la primera opcion, la segunda algo no va bien, pero me conformo con tu primera opción, es fantastico, lo que buscaba.
Muchas gracias por el aporte.
Gracias

El pilt®afilla - www.3piesalgato.com dijo...

La segunda opción no te funciona, porque el password que tienes en la hoja, es un simple intro. Si tuvieras un password con caracteres alfanuméricos, te funcionaría la segunda opción, y no la primera.

Saludos.

Anónimo dijo...

Hola de nuevo, algo estoy haciendo mal, pues sigo todas tus instruciones y no me funciona la segunda opcion, te copio el codigo tal y como aparece en VB¨
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells = Range("P3") Then
ActiveSheet.Unprotect "12_ae_35_io"
Else
ActiveSheet.Protect "12_ae_35_io"
End If
End Sub


y cuando pulso en lista desplegable me aparece la ventana microsoft visul basic con la siguiente indicacion:
Se ha producido el error "13" en tiempo de ejecucion:
No coinciden los tipos"
Pulso en depurar y me aparece en amarillo la linea del codigo siguiente:
If Target.Cells = Range("P3") Then.
Asi que no se lo que estoy haciendo mal, de todas formas me puedo arreglar con la 1ª opcion. Gracias de nuevo

El pilt®afilla - www.3piesalgato.com dijo...

Modifica el código fuente tal y como lo has puesto en tu comentario, y prueba a guardar y cerrar el libro. Ábrelo de nuevo, y prueba a ver si te da error, pero tal y como lo tienes debería funcionarte sin ningún tipo de problema.

Anónimo dijo...

Al final me he decantado por la 1ª opcion, de todas formas te agradezco mucho tu aportacion, con la 1ª opcion me funciona y es lo que buscaba.
Muchisimas gracias.

gero dijo...

muy buen aporte, gracias pero, que nombre tiene qe tener la carpeta? los dos archivos los tengo en el escritorio peor no me funciona, gracias

El pilt®afilla - www.3piesalgato.com dijo...

No tienes que tener 2 archivos, sino algunos más (uno de excel, y el resto fotos de coches).

Tienes que poner todo en la misma carpeta (aunque no necesariamente, si cambias una línea del código fuente), y da igual el nombre que tenga la carpeta.

Cauly dijo...

Tan bueno que más de tres años después se sigue comentando, no sé si lo preguntaron pero intenté hacer esto modificandolo para agregar dos imágenes en lugar de una y no he podido, ¡de qué manera se puede hacer?

Roma dijo...

Que le tengo que añadir al codigo si deseo que la imagen se visualice en otra hoja?
y en un numero de celdas en concreto para el tamaño?

Anónimo dijo...

no entiendo donde puedo copiar el codigo (sobre una celda?)

El pilt®afilla - www.3piesalgato.com dijo...

Pásate por este artículo: mi primer macro en Excel.

Omar Israel dijo...

Saludos seria mucha molestia si pudieras subir un video o algo asi...
De verdad seria de gran ayuda para mi....
Y estas genial muchas gracias

Omar Israel dijo...

SALUDOS NO HABRA ALGUNA MANERA DE INSERTAR EN UNA CELDA LOS COMENTARIOS DE FOTOGRAFIA...

elminerocapma dijo...

Hola javier, tengo una duda, tengo un desplegable en un userform y me muestra las imagenes, pero desearia saber, que linea tendria que agregar cuando no encuentre la imagen y desearia que me salgue en el cuadro de imagen -imagen no disponible, eso seria todo

El pilt®afilla - www.3piesalgato.com dijo...

Elminerocapma, crea una imagen llamada por ejemplo nodisponible.jpg, y coloca esta línea:

If Err = 1004 Then Set fotografia = Me.Pictures.Insert(ActiveWorkbook.Path & "\nodisponible.jpg")

Debajo de esta otra:

Set fotografia = Me.Pictures.Insert(rutayarchivo)

De esa forma, cuando la imagen no exista, te mostrará la imagen llamada nodisponible.jpg.

Saludos.

Omar Israel dijo...

Q tal me gustaria insertar mas de un desplegado pero al hacerlo me borra la imagen anterior osea solo se queda una igen como podria solucionar el problema

Anónimo dijo...

Hola! Primero que nada una felicitación por las aportaciones que haces, en verdad son excelentes. Solo tengo una duda con esta aplicación, lo he descargado y funciona correctamente, pero al querer realizar otro desde cero, copiando y pegando el código después, me marca un error que dice que no se ha definido la variable y lo marca en la parte de "foto = Range("C4").value) y no se a que se deba si en tu archivo funciona correctamente. Espero y puedas orientarme con esto. Muchas gracias!

Wiss5005 dijo...

Amigo Javier... apartir de este momento tienes un profundo admirador mas... muchas gracias por tan valiosos aportes y por tu gran capacidad de compartir, de verdad eres de admirar. Un respetuoso abrazo.

Nemesis dijo...

Hola!!

En primer lugar, muchísimas gracias por tu aporte, me ha salvado la vida y ahorrado más quebraderos de cabeza.

Y en segundo lugar... He leído por ahí arriba que alguien preguntaba si se podría realizar el mismo sistema pero sin necesidad de llevar las imagenes a cuestas (en el mismo directorio), pero no le has respondido.

En caso de que se pudiese... ¿te importaría explicarlo?

Gracias de antemano.

Anónimo dijo...

Muy buena tu ayuda!!, lo probe sin la lista sino que directamente obteniendo el valor de la celda y funciona impecable, saludos

Anónimo dijo...

Excelente el aporte, sobre todo con aquello de las validaciones de las listas dependientes, la explicación y los ejemplos muy claros. :)

Unknown dijo...

Javier muchas gracias por la informacion me salio de maravilla, quisiera saber como le hago para hacer varias listas desplegables en la misma hoja, muchas gracias por la colaboracion.

ATT. ROBERTO PEREZ

FAIBER dijo...

Hola Javier

Esta entrada ha sido genial y de mucha ayuda. Ya puedo ingresar hasta tres imágenes diferentes y estando en otro fichero el archivo. Pero con lo que no he podido es que la tercera imagen tiene que ser insertada en otra hoja diferente a la que se insertan y se ejecuta la macro. Por Favor Javier ayúdame con esta gran duda que me tiene orate. Supongo que debe ser un cambio muy sencillo en una linea del código ..pero hum!!! he intentado de todo y nada funciona. De antemano muchas gracias por crear este Blog y compartir tus experiencias "excelisticas".

Unknown dijo...

Hola Jav, para poder incluir una segunda imagen es decir para comparar dos imagenes (desplegable A vs desplegable B), agradezco tu aporte

Unknown dijo...

Javier antes que todo agredecerte por tu trabajo. respecto a esto te explico mi problema: basandome en tu ejemplo, yo necesito que aparte de que en C4 se pueda seleccionar la imagen, y esta se muestre por ejemplo en J4, poder hacerlo en C5 y C6, etc., de modo que a su vez las imagenes se muestren en J5, J6, etc. te ruego me ayudes, ya que esto me ha traido un gran y largo dolor de cabeza.

Anónimo dijo...

Muchas gracias por la información. Me ha sido muy útil.
Solo tengo una consulta:
A la hora de aparecer la foto, en el codigo selecciona el espacio B6:D21. Tal y como aparece a continuación...

'haremos que la foto ocupe desde B6 hasta D21,
'para que no salgan fotos supergrandes, o
'superpequeñas, y salgan más "normalitas"
With Range("B6:D21")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With

La consulta es sobre como ha de quedar el codigo, si queremos que las fotos aparezcan el otra hoja distinta (Hoja2)?
Muchas gracias.

Unknown dijo...

Podrias apoyarme, cuando grabo y vuelvo abrir ya no funciona, ya he puesto habilitar macros pero no funciona

Anónimo dijo...

BUENAS TARDES estoy utilizando la siguiente macro para ordenar numeros es la siguiente Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub
uf = Range("B" & Cells.Rows.Count).End(xlUp).Row
Range("B4:C20" & uf).Sort Key1:=Range("B4"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

pero tengo un problema aveces tengo que ordenar numeros que les antece una letra por ejemplo v-1, e-18, o c-45

Rafael Hernandez dijo...

Hola Javier, muchisimas gracias por publicar este tipo de materiales.

SOy un apersona sin conocimiento profundo en excel, y poco a poc eh ido tomando practica gracias a tus explicaciones.

Tengo una duda, como puedo modificar el codigo de visual, para que pueda utilizar en diferentes celdas, la misma macro y me de la misma solucion. Es decir tu ejemplo solo utilizamos una celda con lista desplegable y muestra la iamgen, pero yo quisiera utilizarla en varias celdas y me de la misma solucion.

espero haberme explicado y de nuevo muchas FELICIDADES por tu blog. Te lo agradesco infinitamente.

Si es necesario capturas de iamgen o algo para darme a entender mejor, hazmelo saber.

Gracias

Profe_luis dijo...

Excelente tu aporte, buscando insertar imágenes en formulario, me encontré con tu trabajo, buenísimo.....

Tom ( Personal Trainer ) dijo...

mil videos que vi y ninguno me ayudo . vi tu post y super sencillo . gracias

Tom ( Personal Trainer ) dijo...

a por cierto no se pueden meter multiples formatos de imagen?