Quantcast
Channel: EXCELeINFO
Viewing all 466 articles
Browse latest View live

Resaltar filas mientras se escribe usando Formato condicional, VBA y macros en Excel – PARTE 1

$
0
0

Resaltar filas mientras se escribe usando Formato condicional, VBA y macros

En nuestro proyecto anterior llamado Filtro rápido en Excel, vimos cómo filtrar filas de un rango al momento de escribir valores en un Cuadro de texto (TextBox), es decir, filtrar de manera dinámica.

Dignora, una comprometida suscriptora de nuestro canal me hizo una pregunta muy interesante. La pregunta fue:

Gracias Profesor. He aplicado este ejemplo y es fabuloso. En otra necesidad algo parecido: Si al colocar un texto en ese textbox se pinten las celdas que contienen esos valores. Tiene algo parecido que me pueda recomendar???. Agradezco su dedicación y excelentes contenidos

La idea me gustó y decidí hacer este tutorial y grabar un video sobre el tema. Al principio me pareció un tema sencillo, pero al ir grabando el video me di cuenta que se le podía sacar mucho provecho al tema y decidí grabar el video en dos partes.

Resaltar filas usando Formato condicional

Antes de meternos en macros, te diré cómo formatear filas completas de un rango siempre y cuando cumplan con un criterio: usaremos la función ENCONTRAR para validar si una cadena de texto se encuentra dentro de las celdas de la columna Cargo. Seguimos los siguientes pasos para aplicar el Formato condicional en el rango:

  • Seleccionamos el rango.
  • Nos vamos a la pestaña Inicio > Formato condicional > Nueva regla.
  • Elegimos la opción Utilice una fórmula que determine las celdas para aplicar formato.
  • Ingresamos la siguiente fórmula.

=ENCONTRAR(MAYUSC(“C”),MAYUSC($D10))

Ver Video Resaltar filas en Excel mientras se escribe

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Si el texto se encuentra en algunas de las celdas de la columna Cargo, entonces se resaltarán las filas completas.

Se resaltan las filas que en la columna Cargo contengan la letra "c".

Figura 1. Se resaltan las filas que en la columna Cargo contengan la letra “c”.

Resaltar filas mientras se escribe en un TextBox usando VBA y macros

Usando formato condicional es verdaderamente útil para colorear el fondo de las filas. Ahora lo que haremos es ingresar un Cuadro de texto (TextBox) en la hoja que nos servirá para aplicar formato condicional cada que se escribe texto en el TextBox, haciéndolo de manera dinámica, usando VBA y macros.

Usaremos un Cuadro de texto para ingresar texto y resaltar filas con formato condicional.

Figura 2. Usaremos un Cuadro de texto para ingresar texto y resaltar filas con formato condicional.

Usaremos el evento Change del TextBox para que se ejecute una macro que aplica Formato condicional en el rango cada vez que se detecte un cambio de texto. Si el Cuadro de texto queda vacío, se eliminan todas las reglas de Formato condicional.

  • Nos vamos a la pestaña Programador > Modo diseño.
  • Damos doble clic en el TextBox y se crea el evento TextBox1_Change.
  • Ingresamos la macro que aplicará una regla de Formato condicional al rango.

Se resaltan las filas completas al momento de ingresar texto en el TextBox.

Figura 3. Se resaltan las filas completas al momento de ingresar texto en el TextBox.

Código VBA de la macro

El siguiente código VBA se usará en el evento TextBox1_Change y se ejecutará cada que cambie el contenido del TextBox.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
Option Explicit

Private Sub TextBox1_Change()

Dim Valor As String
Dim strFormula As String
Dim Rango1 As Range
Dim Rango2 As Range

Valor = Hoja1.TextBox1.Value
strFormula = "=ENCONTRAR(MAYUSC(""" & UCase(Valor) & """),MAYUSC($D10))"

Set Rango1 = ThisWorkbook.Sheets("Hoja1").Range("A9").CurrentRegion
Set Rango2 = Rango1.Offset(1, 0).Resize(Rango1.Rows.Count - 1, Rango1.Columns.Count)

If Hoja1.TextBox1.Value = "" Then Cells.FormatConditions.Delete: Exit Sub

    Cells.FormatConditions.Delete
    Rango2.FormatConditions.Add Type:=xlExpression, Formula1:=strFormula

    With Rango2.FormatConditions(1).Interior
        .ColorIndex = 35
    End With

End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Resaltar filas mientras se escribe usando VBA y formato condicional – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.


Diagrama de Gantt en Excel considerando Fines de semana y días festivos

$
0
0

Diagrama de Gantt en Excel considerando Fines de semana y días festivos con Formato condicional

En un tutorial anterior vimos cómo armar un Diagrama de Gantt usando formato condicional. Recordemos que el Diagrama de Gantt es una herramienta gráfica administrativa que nos permitirá llevar el seguimiento visual de las actividades de un proyecto. Un proyecto tiene determinada cantidad de actividades y cada actividad se deberá realizar en cierta cantidad de días.

La manera habitual en la que se arma es teniendo una columna de las Actividades y otras columnas con la Fecha inicial y Fecha final, además de una fila con las fechas de todo un mes o las fechas donde inicie y termine el proyecto completo.

En un diagrama de Gantt llevamos el seguimiento de actividades de un proyecto.

Figura 1. En un diagrama de Gantt llevamos el seguimiento de actividades de un proyecto.

Usar Formato condicional para resaltar los días

La lógica que deberemos seguir para resaltar los días correspondientes a las fechas es:

  • La Fecha del calendario deber ser mayor o igual que la fecha de Inicio y menor o igual que la fecha Final.

Ver Video Diagrama de Gantt considerando Fines de semana y Días festivos

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Fines de semana

Una vez que definimos si las fechas coinciden con las fechas de Inicio y Final, toca definir si las fechas del calendario son fines de semana. Usaremos la función DIASEM para devolver el número de la semana y con eso saber si es sábado o domingo y no colorear esas celdas.

La función DIASEM nos devolverá el día de la semana.

Figura 2. La función DIASEM nos devolverá el día de la semana.

Días Festivos

Para detectar los días festivos y no colorear las celdas usaremos un rango aparte con la lista de los días festivos correspondientes a México, sin embargo, puedes adecuar la lista a los días festivos de tu país sólo asignando las fechas y la descripción.

En la fórmula que usaremos en el Formato condicional incluiremos la función BUSCARV para el tema de los días festivos.

Días festivos en México.

Figura 3. Días festivos en México.

Cómo usar Formato condicional para resaltar días

Usaremos Formato condicional para resaltar los días correspondientes a las fechas de las actividades y por supuesto omitiendo los Fines de semana y Días festivos. Seguiremos los siguientes pasos:

  • Elegimos el rango D9:AH18 (del archivo de ejemplo).
  • Nos vamos a la pestaña Inicio > Formato condicional > Nueva regla.
  • Elegimos la sección Utilice una fórmula que determine las celdas para aplicar formato.
  • E ingresamos: =SI(DIASEM(D$8,2)=6,FALSO,SI(DIASEM(D$8,2)=7,FALSO,SI(NO(SI.ND(BUSCARV(D$8,DIAS_FESTIVOS!$A$1:$B$22,2,0),FALSO)),Y(D$8>=$B9,D$8<=$C9))))
  • Definimos el formato.
  • Aceptar.

Los fines de semana y días festivos no se colorean.

Figura 4. Los fines de semana y días festivos no se colorean.

Descargar el archivo de ejemplo

Descargar el ejemplo Diagrama de Gantt en Excel considerando fines de semana y días festivos – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Buscar en base a dos columnas y listas dependientes en Excel INDICE, COINCIDIR y BUSCARV

$
0
0

Buscar en base a dos columnas y listas dependientes en Excel INDICE, COINCIDIR y BUSCARV

Regularmente las búsquedas de valores son en base a una columna y usando la función BUSCARV, o en casos más avanzados, ÍNDICE y COINCIDIR. Pero qué sucede cuando necesitamos hacer una búsqueda en base a dos columnas. Aquí es donde tenemos que usar una fórmula matricial para lograrlo. Además veremos cómo tener lista de validación dependientes.

Buscar valores en base a dos columnas

En nuestro ejemplo tenemos un rango de Equipos celulares y la búsqueda que necesitamos realizar es en base a las columnas MARCAR y MODELO, y devolver el valor del código correspondiente.

Buscamos devolver el código en base a la marca y modelo.

Figura 1. Buscamos devolver el código en base a la marca y modelo.

En la celda B2 ingresamos el valor de la marca y  en la celda B3 el modelo, y usaremos la siguiente fórmula matricial para devolver el código en base los datos elegidos.

=INDICE(G1:G15,COINCIDIR(B2&B3,E1:E15&F1:F15,0))

Nota: La fórmula anterior es matricial, por lo que deberás ingresar la combinación de teclas [Control] + [Shift] + [Enter].

Fórmula matricial para buscar valores en base a dos columnas.

Figura 2. Fórmula matricial para buscar valores en base a dos columnas.

Ver video Buscar en base a dos columnas

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Usar BUSCARV para buscar en base a dos columnas

Si no deseas utilizar la anterior fórmula matricial, siempre está la función BUSCARV para rescatarnos. Si deseas usar BUSCARV deberás insertar una columna adicional en el rango y concatenar la marca y modelo. La función BUSCAR tomará como valor buscado la unión de la marca y modelo de las celdas B2 y B3 y la matriz de búsqueda deberá comenzar en la nueva columna.

Usamos la siguiente fórmula:

=BUSCARV(B2&B3,G1:H15,2,0)

Creamos una columna adicional para concatenar las columnas de marca y modelo.

Figura 3. Creamos una columna adicional para concatenar las columnas de marca y modelo.

Listas dependientes con Validación de datos

En nuestro de Validación de datos ya hemos tocado el tema de las listas dependientes, por lo que tomaremos las fórmulas utilizadas en ese tutorial para aplicarlas en este ejemplo.

Aplicaremos Validación de datos a las celdas B2 de la marca y B3 del modelo. Al elegir una marca, se desplegarán los modelos de dicha marca. El primer paso será crear una Tabla dinámica para tener una lista única de las marcas y esa lista se usará en la Validación de datos.

  • Convertimos el rango a Tabla usando la combinación [Control] + [T].
  • Nos vamos a la pestaña Insertar > Tabla dinámica.
  • Insertamos la Tabla dinámica en la celda J1.
  • Movemos el campo MARCA a la sección Filas.

Ahora que tenemos la lista de valores únicos de marcas, toca definir las fórmulas que usaremos en las celdas de marca y modelo.

  • Elegimos la celda B2.
  • Nos vamos a la pestaña Datos > Validación de datos.
  • En Permitir elegimos Lista.
  • Ingresamos la fórmula: =DESREF(J1,1,0,CONTARA(J:J)-1)

Usamos la función DESREF para devolver los valores de las marcas.

Figura 4. Usamos la función DESREF para devolver los valores de las marcas.

Hacemos lo mismo para la celda B3 que devolverá los modelos dependiendo la marca elegida. Y usamos la siguiente fórmula:

=DESREF(E1,COINCIDIR(B2,E:E,0)-1,1,CONTAR.SI(E:E,B2),1)

Una vez que tengamos las fórmulas definidas en Validación de datos podemos probar eligiendo una marca y veremos cómo se despliegan los modelos asociados a esa marca.

Dependiendo la marca, se desplegarán los modelos correspondientes.

Figura 5. Dependiendo la marca, se desplegarán los modelos correspondientes.

Descargar el archivo de ejemplo

Descargar el ejemplo Buscar en base a dos columnas y listas dependientes INDICE, COINCIDIR y BUSCARV – EXCELeINFO.zip

 

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Usar Botones de opción en Excel para mostrar u ocultar columna: Dashboards Tips

$
0
0

Usar Botones de opción en Excel para mostrar u ocultar columna Dashboards Tips

En este tutorial veremos un ejemplo práctico, sencillo y divertido que puedes adecuar a tus Dashboards e informes en Excel. Y trata de que usaremos Controles de formulario para poder ocultar o mostrar una columna de valores. Los Controles que usaremos son Cuadros de opción.

Cómo lo hacemos

Tenemos un rango de ratos con dos columnas simplemente, las cuales son PRODUCTO y PRECIO. Añadiremos una columna adicional llamada DESCUENTO 30% las cual contendrá el precio del producto restándole un 30% de descuento. Y usaremos la siguiente fórmula para descontar ese porcentaje al precio:

Celda D14: =C14-(C14*0.3)

Agregar columna de descuento.

Figura 1. Agregar columna de descuento.

Ver Video Usar Botones de opción para mostrar u ocultar columna

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Agregando Botones de opción

Los Controles de Formulario nos permiten tener interactividad en nuestras hojas de cálculo y en especial tener un vínculo entre el Control y las celdas. A diferencia de los Controles ActiveX, donde éstos pueden tener más interactividad ya pueden contener código VBA, los Controles de Formulario no requieren código VBA para funcionar, aunque sí pueden ejecutar macros.

Para poder mostrar u ocultar la columna de DESCUENTO necesitaremos incluir dos Botones de opción, para que uno diga SÍ y otro NO, y esto es, que sí se muestre o no la columna. Seguimos los siguientes pasos:

  • Nos dirigimos la pestaña Programador > Insertar > Controles de Formulario.
  • Insertamos un Cuadro de grupo que contendrá al resto de los controles.
  • Insertamos una Etiqueta para mostrar el texto “Mostrar columna de descuento?”.
  • Finalmente dos Botones de opción.

Insertamos Controles de Formulario para tener interactividad en nuestra hoja de cálculo.

Figura 2. Insertamos Controles de Formulario para tener interactividad en nuestra hoja de cálculo.

Vincular Controles con celdas

La ventaja de los Controles de Formulario es que el valor almacenado o elegido se puede vincular a una celda. Los botones de opción tienen la particularidad de que cuando se selecciona uno, el otro o los otros se desmarcan. Cuando uno se selecciona, el valor correspondiente se guarda en una celda. En este ejemplo tenemos dos, por lo tanto el primer botón de opción será el número 1 y el segundo el número 2.

Pero debemos configurar en cada control a qué celda necesitamos que se vincule.

  • Damos clic derecho en un botón de opción.
  • Elegimos Formato de control.
  • En la pestaña Control elegimos Vincular con la celda.
  • Vincularemos el control con la celda D12.
  • Aceptar.

Vinculamos el valor de los Botones de opción a una celda.

Figura 3. Vinculamos el valor de los Botones de opción a una celda.

Ocultar los valores de la columna DESCUENTO

Ahora que ya tenemos en la celda D12 los valores vinculados a los Controles, entonces modificaremos la fórmula de la columna descuento para indicar que si el valor de la celda D12 es igual a 2, entonces no muestre ningún valor.

=SI($D$12=2,””,C14-(C14*0.3))

Formato condicional para ocultar el formato de la columna DESCUENTO

Ahora toca utilizar Formato condicional para ocultar los formatos de la columna DESCUENTO. La lógica utilizará será que si el valor de la celda D12 es igual a 2, entonces pondremos el fondo de las celdas en color blanco y quitaremos los bordes superior, derecho e inferior.

  • Elegimos las celdas.
  • Nos vamos a la pestaña Inicio > Formato condicional > Nueva regla.
  • Elegimos la opción Utilice una fórmula que determine las celdas para aplicar formato.
  • Ingresamos la formula =$D$12=2.
  • Damos clic en el botón Formato y elegimos el fondo blanco y quitamos bordes.

Al elegir el Botón de opción NO, se quitan los formatos de la celda y pareciera que se oculta.

Figura 4. Al elegir el Botón de opción NO, se quitan los formatos de la celda y pareciera que se oculta.

Descargar el archivo de ejemplo

Descargar el ejemplo Usar Botones de opción para mostrar u ocultar columna – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Insertar fórmulas en Excel desde macros VBA sin preocuparte por el separador de argumentos: coma o punto y coma

$
0
0

Insertar fórmulas en Excel con macros independientemente del idioma o separador d

En tutorial anterior vimos cómo insertar fórmulas desde Excel usando macros, las cuales dentro de la macro se podían escribir usando el idioma de tu Office o usando el nombre de las funciones en Inglés. En un video más reciente, donde veíamos cómo resaltar filas al momento de escribir valores en un TextBox, me reportaban que al ejecutar la macro les salía un error número 5, que indica que hay un error en la llamada a un procedimiento.

Error 5 al usar una fórmula que no identifica el separador de argumento.

Figura 1. Error 5 al usar una fórmula que no identifica el separador de argumento.

Hubo varios comentarios donde reportaban el mismo error. Gracias al comentario de un seguidor del canal, pudimos resolver que el tema era por el separador de argumentos en la fórmula. El tutorial de resaltar filas manda llamar al Formato condicional y configura una fórmula que determina cuáles filas se deben resaltar.

Separador de argumentos o listas: coma o punto y coma

Aquí el tema es que configuré la macro para que la fórmula se insertara usando la coma como separador de argumentos, ya que aquí en México ese es el separador. Países como España, usan punto y coma como separador de argumento. Entonces si la macro la corren en una PC que tiene punto y coma como separador, obtendrán ese error.

Ver video Insertar fórmulas con VBA independientemente del idioma o separador de argumentos

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Valida qué separador de argumentos tienes en tu computadora

La forma más sencilla de validar qué separador de argumentos tienes configurador en tu computadora, es simplemente ingresando una función en un celda y ahí verás qué carácter pide como separador.

Separarador de argumetos en Excel

Figura 2. Validar separador de argumentos en Excel.

La otra manera es por medio del Panel de Control de Windows. Ahí se puede validar incluso cambiarlo.

  • Usa la combinación de teclas Windows + R.
  • Escribes Control y das Enter.
  • Te vas a Reloj y región > Cambiar formatos de fecha, hora y número.
  • En el formulario da clic en Configuración adicional.
  • En Separador de listas verás el separador.

Ver o modificar el separador de listas y argumento en el Panel de Control de Windows.

Figura 3. Ver o modificar el separador de listas y argumento en el Panel de Control de Windows.

Insertar fórmulas desde macros que se adecúen al separador de tu PC

Bien, todo lo anterior fue informativo para ahora continuar con lo técnico. Si no deseas preocuparte sobre qué separador tienen las personas que usarán tu archivo tienes tres opciones.

Usando Application.International

Para el ejemplo de resaltar filas usaremos la propiedad Application.International y usaremos el argumento xlListSeparator para obtener el separador configurado en la PC y la fórmula lo usará.

Aquí usamos la coma como separador:

strFormula = "=ENCONTRAR(MAYUSC(""" & UCase(Valor) & """),MAYUSC($D10))"

Y aquí usamos la propiedad International para asignar el separador a la fórmula:

Separador = Application.International(xlListSeparator)
strFormula = "=ENCONTRAR(MAYUSC(""" & UCase(Valor) & """)" & Separador & "MAYUSC($D10))"

Usar Formula en lugar de FormulaLocal

Ahora bien, si gustas de insertar fórmulas en celdas, puedes usar las siguientes propiedades:

  • Formula: ingresa una fórmula en un rango y se debe escribir en Inglés dentro de la macro.
  • FormulaLocal: ingresa una fórmula en un rango y la puedes ingresar en el idioma configurado en tu PC.

La ventaja de usar Range.Formula es que usaremos la coma como separador de argumentos y funcionará incluso si tienes punto y compa como separador.

Y si usamos FormulaLocal debemos poner manual el separador de argumento o usar la propiedad Application.International para detectarlo.

Sub FormulaIngles()

Hoja1.Range("G12").Formula = "=IFNA(VLOOKUP(E12,A8:B20,2,0),""ID no existe"")"

End Sub

Sub FormulaLocal()

Separador = Application.International(xlListSeparator)

Hoja1.Range("G15").FormulaLocal = "=SI.ND(BUSCARV(E15" & Separador & "A8:B20" & _
    Separador & "2" & Separador & "0)" & Separador & """ID no existe"")"

End Sub

Tutoriales donde puedes aplicar estos Tips

Insertar Fórmulas y funciones en celdas de Excel usando VBA y macros
Resaltar filas mientras se escribe usando Formato condicional, VBA y macros en Excel – PARTE 1

 

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Agregar un buscador a un Slicer en Excel. Segmentación de datos y Tablas dinámicas: Dashboards Tips

$
0
0

Agregar-un-buscador-a-un-Slicer-en-E

Las Tablas dinámicas son una herramienta indispensable para hacer análisis de información y la Segmentación de datos se ha convertido en una herramienta indispensable para hacer esos análisis más poderosos. Sin embargo, cuando usamos segmentación de datos para mostrar los valores de un campo de una tabla o rango, no es posible aplicar filtros de texto o números, ya que están para tratarse con el mouse o en pantallas táctiles.

Continuando con los Tips sobre Dashboards en Excel, hoy te traigo un tutorial curioso sobre cómo podemos poner un buscador en segmentadores de datos o Slicers. Lo haremos duplicando una tabla dinámica y mostrando sólo la sección Filtro en la segunda Tabla dinámica. Veamos el procedimiento.

Insertando Tabla dinámica

Tenemos un rango con las columnas PRODUCTO, VENTAS y SUCURSAL. El primer paso será crear una Tabla dinámica en base a ese rango.

  • Elegimos la hoja Datos, que la hoja que tiene el rango de datos.
  • Nos vamos a la pestaña Insertar > Tabla dinámica.
  • Damos clic en Hoja de cálculo existente y elegimos donde quieras insertar la Tabla dinámica.
  • Aceptar.

image_thumb4

Figura 1. Insertamos la Tabla dinámica en a primera hoja.

Ahora definimos los campos de la Tabla dinámica en sus respectivos campos.

  • El campo Sucursal lo movemos a la sección Filas.
  • El campo Ventas lo movemos a la sección Valores.

Ver video Agregar buscador a segmentación de datos en Excel (slicer)

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Insertando Gráfico dinámico

Una ves que tenemos la Tabla dinámica, ahora insertaremos un Gráfico dinámico que mostrará la cantidad de ventas por Sucursal.

  • Elegimos la tabla dinámica.
  • Nos vamos a la pestaña Analizar > Gráfico dinámico.
  • Seleccionamos el tipo Columna y luego Columna agrupada.
  • Aceptar.

image_thumb9

Figura 2. Insertamos un Gráfico dinámico.

Insertando Segmentación de datos

Ahora insertamos una segmentación de datos (Slicer) que nos mostrará los productos del rango.

  • Seleccionamos la Tabla dinámica.
  • Nos vamos a la pestaña Analizar > Insertar segmentación de datos.
  • Seleccionamos Producto.
  • Aceptar.

image_thumb15

Figura 3. Insertamos una segmentación de datos o Slicer.

Duplicar Tabla dinámica y mostrar sección Filtro

Para tener nuestro buscador, deberemos replicar la Tabla dinámica que insertamos al principio. Sigamos los siguientes pasos:

  • Movemos el Slicer hacia la derecha.
  • Seleccionamos toda la Tabla dinámica y la pegamos en el rango E10 (archivo de ejemplo).
  • Quitamos los campos Sucursar y Ventas.
  • Movemos el campo Producto a la sección Filtros.

Ahora veremos dos Tablas dinámicas, sólo que la segunda únicamente tiene la sección Filtros.

image_thumb19

Figura 4. Replicamos la Tabla dinámica y mostramos sólo la sección Filtros.

Nota: Para que cambien de tamaño las columnas de las Tablas dinámica, damos clic derecho, elegimos Opciones de tabla dinámica > Autoajustar anchos de columnas al actualizar.

Seguimos los siguientes pasos para finalmente dar la sensación de que la segmentación de datos tiene una caja de búsqueda de valores.

  • Movemos la segmentación de datos y la dejamos sobre la sección Filtros de la segunda tabla dinámica.
  • Procuramos que el filtro quede a la derecha del Slicer.
  • Ocultamos la columna donde está el título del campo Producto.

image_thumb25

Figura 5. Con la segmentación superpuesta al filtro damos la sensación de una buscador para el Slicer.

Descarga el archivo de ejemplo

Descargar el ejemplo Agregar buscador a segmentación de datos en Excel – slicers y tablas dinámicas – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Mostrar Cuadro de mensaje MsgBox con botones Sí / No antes de ejecutar una macro en Excel VBA

$
0
0

Mostrar Cuadro de mensaje MSGBOX con botones Sí No antes de ejecutar una macro

En el lenguaje VBA y prácticamente en cualquier lenguaje de programación es necesario dominar una función que nos permite tanto mostrar mensajes informativos como mensajes donde se nos de la opción de continuar con la ejecución de algún procedimiento o realizar otra acción. En VBA existe la función MsgBox que puede ser usada sólo para mostrar un mensaje como para usarle en conjunto con una variable y pasarle a la variable el valor del botón que fue presionado.

Generalidades de la función MsgBox en VBA

El uso de la función MsgBox en VBA puede ser tan sencillo o elaborado como desees. La siguiente es la sintaxis básica del uso de MsgBox:

MsgBox [mensaje], [botones], [título], [archivo de ayuda], [contexto]

Ahora vemos el uso de MsgBox en un caso funcional:

Sub Mensaje()

    MsgBox "Mensaje de prueba", vbOKOnly + vbInformation, "EXCELeINFO"

End Sub

En la Figura 1 vemos el mensaje mostrado.

. Mensaje mostrado con MsgBox en VBA.

Figura 1. Mensaje mostrado con MsgBox en VBA.

Argumentos de la función MsgBox

A continuación enlisto cada uno de los argumentos de la función MsgBox de una manera sencilla:

  • Prompt o mensaje: Es el mensaje que se mostrará en el mensaje. El máximo de caracteres es aproximadamente 1024. Puedes mostrar un mensaje con varias líneas, y para separa las líneas puedes usar vbNewLine o Chr(13).
  • Buttons o botones: Opcionalmente puedes mostrar más de un botón, si no especificas este parámetro se mostrara el botón Aceptar. También puede mostrar un ícono junto al texto.
  • Tittle o título: Opcionalmente puedes definir un título al mensaje.
  • Help file: Es un archivo de ayuda que proporciona información sobre el cuadro de diálogo.
  • Context: Define el tema que tratará la ayuda del cuadro de diálogo.

Ver video Función MsgBox en VBA

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Valores devueltos por los botones

El cuadro de mensaje devuelto por la función MsgBox puede contener botones y esos botones tendrán asignado un valor numérico, mismo que podrá ser evaluado para tomar decisiones sobre cuál botón fue presionado. A continuación una lista de los botones que se pueden usar y los valores enteros que devuelven.

  • vbOK, Valor 1.
  • vbCancel, Valor 2.
  • vbAbort, Valor 3.
  • vbRetry, Valor 4.
  • vbIgnore, Valor 5.
  • vbYes, Valor 6.
  • vbNo, Valor 7.

Ejemplo 1. Botones Sí / No

En este ejemplo usaremos la variable Pregunta que nos guardará el valor de los botones Sí y No, dependiendo el botón que sea presionado. Posteriormente con la sentencia If evaluaremos el botón presionado y ejecutaremos un código dependiente cuál se presionó.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
Option Explicit

Sub SiNo()

Dim Pregunta As String

Pregunta = MsgBox("Deseas continuar", vbYesNo + vbQuestion, "EXCELeINFO")

    If Pregunta = vbNo Then
    
        MsgBox "Elegiste No"
        'Macros
    Else
    
        MsgBox "Elegiste Sí"

    End If

End Sub

Cuadro de mensaje con los botones Sí y No.

Figura 2. Cuadro de mensaje con los botones Sí y No.

Ejemplo 2. Botones Aceptar / Cancelar

Ahora, en lugar de los botones Sí y No, mostraremos los botones Aceptar y Cancelar, y también usando la sentencia If evaluaremos cuál fue presionado.

Sub AceptarCancelar()

Dim Pregunta As Integer

Pregunta = MsgBox("Deseas continuar?", vbOKCancel, "EXCELeINFO")

    If Pregunta = 2 Then MsgBox "Elegiste Cancelar": Exit Sub
    
    MsgBox "Elegiste Aceptar"

End Sub

Cuadro de mensaje con los botones Aceptar y Cancelar.

Figura 3. Cuadro de mensaje con los botones Aceptar y Cancelar.

Ejemplo 3. Botones Sí, No y Cancelar

Ahora mostraremos 3 botones en el MsgBox, y en lugar de usar la sentencia If usaremos Select Case para evaluar el resultado del botón elegido. Tendremos 3 posibles valores correspondientes a los 3 botones.

Sub SiNoCancelar()

Dim Pregunta As Integer

Pregunta = MsgBox("Deseas continuar?", vbYesNoCancel + vbInformation, "EXCELeINFO")

    Select Case Pregunta
        Case Is = 6
            MsgBox "Presionaste Sí"
        Case Is = 7
            MsgBox "Presionaste No"
        Case Else
            MsgBox "Presionaste Cancelar"
    End Select

End Sub

Cuadro de mensaje con los botones Sí, No y Cancelar

Figura 4. Cuadro de mensaje con los botones Sí, No y Cancelar

Descarga el archivo de ejemplo

Descargar el ejemplo Botones de Sí y No en MSGBOX – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Logramos los 20 mil suscriptores en YouTube. Gracias!

$
0
0

20 mil suscritores

Con felicidad les comparto que hemos logrados los 20 mil suscriptores en nuestro canal de Youtube. Quiero agradecer a todos los que semana con semana están aquí para ver mis tutoriales tanto de este sitio como del canal.


Botón de Switch / Toogle para mostrar u ocultar gráfico en Excel: Dashboards Tips

$
0
0

En este tutorial veremos un curioso truco en que tendremos un botón de switch o toogle, muy usado en teléfonos móviles. El Toogle button tiene la característica de dos estados, encendido o apagado, presionado o sin presionar. Simularemos un botón de switch o botón toogle con dos imágenes las cuales mandarán llamar una macro que servirá para mostrar y ocultar un gráfico. Este truco es especial para tus dashboards o informes en Excel.

Preparando el entorno

Armamos un pequeño dashboard donde tenemos un rango con el dato de ventas por sucursal, un título del dashboards, una sección donde pondremos el toogle button y una sección donde incrustaremos un gráfico.

Tenemos un pequeño dashboard en Excel.

Figura 1. Tenemos un pequeño dashboard en Excel.

Ver video Switch / Toogle button para mostrar u ocultar gráfico

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Insertar gráfico

En la sección de la derecha insertaremos un gráfico de barras que mostrará las ventas  por sucursal:

  • Elegimos el rango “C5:D12”.
  • Nos vamos la pestaña Insertar > Gráficos > Columna agrupada.
  • Elegimos el gráfico y en la cruz verde sólo dejamos marcadas las opciones Etiquetas de datos y Leyenda.
  • Elegimos el gráfico y nos vamos a la pestaña Formato > Relleno de forma > Sin relleno.
  • Con el gráfico elegido nos vamos a la pestaña Formato > Contorno de forma > Sin contorno.
  • Elegimos el gráfico y le asignamos el nombre de “gráfico” en el cuadro de nombres.

Personalizamos el gráfico para darle un estilo sencillo y elegante.

Figura 2. Personalizamos el gráfico para darle un estilo sencillo y elegante.

Insertando los botones

Realmente los botones de switch son dos imágenes que nos ayudarán a simular el encendido y apagado de un botón. El primer botón es un botón verde encendido y el otro es un botón rojo apagado.

  • Nos vamos a la pestaña Insertar > Ilustraciones > Imágenes.
  • Elegimos nuestras imágenes y presionamos el botón Insertar.
  • Cambiamos el tamaño a las imágenes para que se acoplen al dashboard.
  • Elegimos la imagen verde y le asignamos el nombre “si” en el cuadro de nombres.
  • Elegimos la imagen roja y le asignamos el nombre “no” en el cuadro de nombres.

Insertamos las imágenes de los dos botones.

Figura 3. Insertamos las imágenes de los dos botones.

Macro VBA para mostrar y ocultar el gráfico

Desarrollaremos una macro que asignaremos a ambas imágenes, para que cuando demos clic en una, se oculte la otra y el gráfico se muestre o se oculte conforme damos clic en las imágenes. A continuación la  macro.

Option Explicit
'
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'http://www.exceleinfo.com/uso-de-colores-en-excel-con-macros/
'
Sub Imagenes()

With Hoja1

    If .Range("E3").Value = 2 Then
    
        .Shapes("si").Visible = msoCTrue
        .Shapes("no").Visible = msoFalse
        .Shapes("grafico").Visible = msoCTrue
        .Range("E3").Value = 1
        
    ElseIf .Range("E3").Value = 1 Then
    
        .Shapes("si").Visible = msoFalse
        .Shapes("no").Visible = msoCTrue
        .Shapes("grafico").Visible = msoFalse
        .Range("E3").Value = 2
        
    End If

End With

End Sub

Asignando la macro a los botones

  • Elegimos el botón verde y damos clic derecho.
  • Elegimos Asignar macro.
  • Seleccionamos la macro Imágenes y damos clic en Aceptar.
  • Hacemos lo mismo con el botón rojo.
  • Posteriormente ponemos un botón sobre otro dejándolos en la misma posición.

Toogle button para mostrar gráficos en Excel.

Figura 4. Toogle button para mostrar gráficos en Excel.

Descargar el archivo de ejemplo

Descargar el ejemplo Botón de switch – toogle para mostrar u ocultar gráfico – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Mostrar 10 elementos con Barra de desplazamiento o Scroll bar en Excel: Dashboards Tips

$
0
0

Mostrar 10 elementos con Barra de desplazamiento o Scroll bar - Dashboards Tips

Siguiendo con nuestros Tips de Dashboards, en este tutorial veremos cómo implementar un control de Barra de desplazamiento o también llamado Scroll bar, el cual nos ayudará a visualizar 10 elementos o filas de un rango. El Scroll bar nos ayudará a desplazarnos hacia arriba o hacia abajo y siempre veremos 10 filas. Y para mostrar las 10 filas usaremos la función INDICE para devolver valores que están en otro rango.

Conociendo nuestros valores

Tenemos un rango con 24 filas, aunque nuestro rango puede tener el número de filas que deseemos. Tenemos las columnas ID, PRODUCTO, VTA SUC1. VTA SUC2 y VTA SU2.

Nuestro rango de datos origen.

Figura 1. Nuestro rango de datos origen.

Barra de desplazamiento o Scroll bar

Para desplazarnos entre las filas de nuestro rango de origen usaremos el Control de formulario Barra de desplazamiento.

  • Nos vamos a la pestaña Programador > Insertar > Barra de desplazamiento (control de formulario).
  • Lo dibujamos comenzando en la celda G4.

Insertamos el Control de formulario Barra de desplazamiento o Scroll bar.

Figura 2. Insertamos el Control de formulario Barra de desplazamiento o Scroll bar.

Ver Video Mostrar 10 elementos con Barra de desplazamiento o Scroll bar

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Ahora le configuraremos algunas opciones a la Barra de desplazamiento que nos servirán para controlar valores mínimos, máximo y celda vinculada.

  • Damos clic derecho en el Scroll bar > Formato de control.
  • En la pestaña Control asignamos Valor mínimo 1, Valor máximo 15, Incremento 1, Cambo de página 5.
  • En Vincular con la celda ingresamos $J$4.

Asignamos valores a la Barra de desplazamiento.

Figura 3. Asignamos valores a la Barra de desplazamiento.

Fórmula para devolver valores del rango origen

Ahora que tenemos nuestra Barra de desplazamiento y está vinculada con la celda J4, cada vez que nos desplacemos en el Scroll bar, la celda J4 recibirá un valor numérico, ese valor será nuestro número índice que usaremos en la celda B4 cuando ingresemos la función INDICE.

Celda B4: =SI(INDICE(Hoja2!A2:A$25,Hoja1!$J$4)=0,””,INDICE(Hoja2!A2:A$25,Hoja1!$J$4))

La fórmula anterior usa la función INDICE para devolver valores en base a la intersección de una fila y una columna. El parámetro Matriz de la función INDICE será la columna A de nuestro rango origen, y el parámetro NÚM_FILA será el valor de la celda J4 que está vinculado con la Barra de desplazamiento.

La fórmula de la celda B4 la arrastramos hacia la columna F y luego hacia la fila 13.

Mostrar 10 elementos con Barra de desplazamiento

Figura 4. Mostrar 10 elementos con Barra de desplazamiento.

Descarga el archivo de ejemplo

Descargar el ejemplo Mostrar 10 elementos de tabla con Barra de desplazamiento – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Mostrar hoja dependiendo del usuario y contraseña ingresados en un Formulario de Excel vba

$
0
0

Mostrar hoja dependiendo del usuario y contraseña ingresados en un Formulario de Excel vba

En un tutorial anterior vimos cómo validar los datos de usuario y contraseña en un Formulario de Excel vba. En este tutorial usaremos el mismo archivo de ejemplo, pero haciéndole algunas modificaciones para hacerlo más funcional. Una de las modificaciones es asignarle una hoja de trabajo a cada usuario, permitiendo así que dependiendo el usuario que ingreses, sea la hoja que se mostrará. Si tu usuario es de nivel Administrador, entonces podrás visualizar todas las hojas, incluso la hoja de usuarios y contraseñas.

Otra de las modificaciones que le hicimos es que cada vez que el archivo se abre, se muestra el formulario para ingresar el usuario y la contraseña. Además de que al cerrar el archivo, se ocultarán todas las hojas, excepto la principal, y se guardará el archivo automáticamente.

Tabla de usuarios y contraseñas

Tenemos una hoja llamada Usuarios donde tendremos una tabla que contendrá los datos de NOMBRE, USUARIO, CONTRASEÑA y HOJA. En la columna HOJA irá el nombre de la hoja que será mostrará a cada usuario. Si nos fijamos en la Figura 1 vemos que en la columna HOJA tenemos la palabra TODAS; esto quiere decir que el usuario ADMIN podrá visualizar todas las hojas.

Tabla de usuarios y contraseñas.

Figura 1. Tabla de usuarios y contraseñas.

Ver video Mostrar hoja dependiendo del usuario y la contraseña

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Ejecutar macros al abrir y cerrar el archivo (Eventos VBA)

Al abrir el archivo llamaremos a una macro llamada OcultarHojas que se ejecutaré en el evento Workbook_Open para ocultar todas las hojas del archivo y mostraremos el formulario para ingresar los datos de acceso. La macro la encontraremos el el objeto ThisWorkbook.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Private Sub Workbook_Open()
Call OcultarHojas
UserForm1.Show
End Sub

La macro OcultarHojas las podremos encontrar en el Módulo2.

Sub OcultarHojas()

Dim Hoja As Object

For Each Hoja In ActiveWorkbook.Sheets
    If Hoja.Name = "Principal" Then    
    Else    
        Hoja.Visible = xlVeryHidden
    End If
Next Hoja

End Sub

Al cerrar el archivo, para evitar que las hojas queden visibles, ejecutaremos el evento Workbook_BeforeClose o Antes de cerrar, para ejecutar la macro CerrarHojas y como dice el nombre, ocultaremos todas las hojas del archivo y luego guardaremos el archivo automáticamente.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call OcultarHojas
ThisWorkbook.Save

End Sub

Formulario para ingresar usuario y contraseña

El formulario de acceso pedirá el Usuario y Contraseña, y se validará primero que el usuario exista, para luego validar la contraseña. Si el usuario y la contraseña coinciden, se mostrará la hoja correspondiente al usuario. En caso de haber ingresado los datos del usuario ADMIN, entonces todas las hojas se mostrarán.

Formulario de acceso con usuario y contraseña.

Figura 2. Formulario de acceso con usuario y contraseña.

Macro VBA del formulario

Option Explicit
'
'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo
'
Private Sub UserForm_Initialize()
FormDesign.FormDesign
'Call OcultarHojas
End Sub

'Botón Cerrar
Private Sub CommandButton1_Click()
Unload Me
End Sub

'Botón Validar
Private Sub CommandButton2_Click()
Dim usuario As String
Dim Contrasenia As Variant
Dim HojaVisible As String
Dim UsuarioExistente
Dim DatoEncontrado
Dim Rango As Range

UsuarioExistente = Application.WorksheetFunction.CountIf(Sheets("Usuarios").Range("B:B"), Me.txtUsuario.Value)

Set Rango = Sheets("Usuarios").Range("B:B")

'Validamos que se hayan introducido valores.
If Me.txtUsuario.Value = "" Or Me.txtPassword.Value = "" Then
    MsgBox "Por favor introduce usuario y contraseña", vbExclamation, "EXCELeINFO"
    Me.txtUsuario.SetFocus
    
    'Se valida que el usuario exista en la tabla.
ElseIf UsuarioExistente = 0 Then
    MsgBox "El usuario '" & Me.txtUsuario & "' no existe", vbExclamation, "EXCELeINFO"
    
    'En caso de que el usuario exista, validamos su contraseña.
ElseIf UsuarioExistente = 1 Then
    DatoEncontrado = Rango.Find(What:=Me.txtUsuario.Value, MatchCase:=False, LookAt:=xlWhole).Address
    Contrasenia = CStr(Usuarios.Range(DatoEncontrado).Offset(0, 1).Value)
    
    'Si el usuario y la contraseña coinciden...
    If LCase(CStr(Usuarios.Range(DatoEncontrado).Value)) = LCase(Me.txtUsuario.Value) And Contrasenia = _
       Me.txtPassword.Value Then
        'Range("G2").Value = "Usuario: " & Usuarios.Range(DatoEncontrado).Offset(0, -1).Value
        
        '''''''''''''''''''''''''''''''''''''''''''''''
        HojaVisible = Usuarios.Range(DatoEncontrado).Offset(0, 2).Value
        
        If HojaVisible = "TODAS" Then
        
            Call MostrarHojas
        
        Else
            
            Call OcultarHojas
            ThisWorkbook.Sheets(HojaVisible).Visible = True
        
        End If
        '''''''''''''''''''''''''''''''''''''''''''''''
        'Aquí va el código para dar acceso a todo lo que el programador decida
        Unload Me
        
    Else
        
        MsgBox "La contraseña es inválida", vbExclamation, "EXCELeINFO"
    End If
End If

End Sub

La siguiente macro nos ayudará a mostrar todas las hojas en caso de que hayamos ingresado con el usuario ADMIN.

Sub MostrarHojas()

Dim Hoja As Object

Application.ScreenUpdating = False

For Each Hoja In ActiveWorkbook.Sheets
    If Hoja.Name = "Principal" Then    
    Else    
        Hoja.Visible = True
    End If
Next Hoja

Application.ScreenUpdating = True

End Sub

Diseño minimalista del formulario

Al ejecutar el formulario se ejecutará la macro FormDesign para darle un diseño minimalista al formulario. Para ver cómo funciona la macro FormDesign puedes visitar este video.

Descarga el archivo de ejemplo

Descargar el ejemplo Formulario de Usuario y contraseña para mostrar hoja por usuario – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Mostrar u ocultar mensaje de actualización de vínculos y links al abrir un archivo de Excel

$
0
0

Mostrar u ocultar mensaje de actualización de vínculos y links al abrir un archivo de Excel

En este tutorial vamos a ver dos maneras en las que podemos controlar el mensaje de Actualización de vínculos cuando abres un archivo de Excel, y además vamos a comprender el concepto de fórmulas vinculadas de un archivo a otro.

Fórmulas vinculadas

En ocasiones es necesario tener fórmulas que hacen referencia a otro archivo, por ejemplo podemos usar BUSCARV para devolver el nombre de un vendedor de un archivo que contenga el dato de vendedores. Cuando cuentas con una fórmula combinada y el archivo de destino está abierto, en la fórmula verás el nombre del archivo entre corchetes.

Fórmula vinculada a un archivo abierto.

Figura 1. Fórmula vinculada a un archivo abierto.

=[Libro1.xlsx]Hoja1!$A$1

Ahora bien, si cerramos el archivo de destino veremos la ruta completa en la fórmula.

Fórmula vinculada a archivo cerrado.

Figura 2. Fórmula vinculada a archivo cerrado.

=’C:\Users\scampos\Documents\exceleinfo_pruebas\[Libro1.xlsx]Hoja1′!$A$1

Ver video Mostrar u ocultar mensaje de actualización de vínculos al abrir un archivo de Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Mensaje de actualización de vínculos

Por seguridad, Excel mostrará de manera predeterminada un mensaje donde nos indica que el archivo tiene vínculos a fuentes externas. Al ver el mensaje tenemos la opción de Actualizar vínculos o No actualizar. Si decides no actualizar entonces verás los valores mostrados desde la última vez que actualizaste.

Mensaje de actualización de vínculos a fuentes externas.

Figura 3. Mensaje de actualización de vínculos a fuentes externas.

Este libro contiene vínculos a una o más fuentes externas que podrían no ser seguras. Si confía en los vínculos, actualícelos para obtener los datos más recientes. En caso contrario, puede seguir trabajando con los datos que tenga.

Mensaje de vínculos no válidos

Si tu archivo tiene vínculos a archivos que ya no existan o cambiaron de nombre, entonces veremos un mensaje que indica que no se pueden actualizar algunos vínculos y nos da la opción de corregirlos.

Corregir vínculos incorrecto a archivos que no existen o cambiaron de nombre.

Figura 4. Corregir vínculos incorrecto a archivos que no existen o cambiaron de nombre.

Vamos a revisar qué significa cada botón del formulario Editar vínculos.

  • Actualizar valores: Si el destino existe se devuelven los valores recientes.
  • Cambiar origen: Si el archivo destino cambió de nombre, podemos elegir el nuevo archivo.
  • Abrir origen: Abrimos el archivo de destino.
  • Romper vínculos: Si el archivo de destino no existe podemos eliminar la referencia a ese archivo.
  • Pregunta inicial: Elegimos la manera en que deseamos mostrar y actualizar los mensajes.
    • Permitir que los usuario elijan mostrar o no la alerta.
    • No mostrar la alerta ni actualizar los vínculos automáticos.
    • No mostrar la alerta y actualizar vínculos.

Deshabilitar mensaje de actualización de vínculos en las Opciones de Excel

Si deseas que no se muestren los mensajes debes elegir No mostrar la alerta y actualizar vínculos.

Otra manera que tenemos para que no se muestre el mensaje de actualización de vínculos es modificando una opción dentro de las Opciones de Excel.

  • Nos vamos a la pestaña Archivo.
  • Opciones.
  • Avanzadas.
  • Sección General > desmarcamos la opción Consultar al actualizar vínculos automáticos.

Deshabilitar mensaje de actualización de vínculos.

Figura 5. Deshabilitar mensaje de actualización de vínculos.

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Factura en Excel Parte 1 – Plantilla, Fórmulas y listas de validación de clientes y productos

$
0
0

Factura en Excel Parte 1 - Plantilla, Fórmulas y listas de validación de clientes y productos

En esta primera parte del Proyecto Factura en Excel descargaremos una plantilla de una Factura sencilla y la formularemos para traer los datos del Cliente a facturar en base a su nombre elegido en una lista de validación, así como devolver la información de las descripción de los productos en base a otra lista de validación. Tendremos la hoja Factura, Detalle de facturas, tabla de Clientes y tabla de Productos.

En la segunda parte de este tutorial usaremos macros VBA para guardar la información de cada factura en una hoja aparte e incrementar el número de factura automáticamente.

Descargando la plantilla

Excel nos provee de miles de plantillas en línea que podemos descargar y modificarlas a nuestro gusto. Para este proyecto de Factura descargaremos una Factura sencilla las cual modificaremos añadiéndole algunas fórmulas y validaciones de datos.

  • No vamos a la pestaña Archivo > Nuevo.
  • En la caja de texto Buscar plantillas en línea escribimos Factura simple.
  • Seleccionamos la plantilla Factura simple que calcula el total.

Descargamos una plantilla de Factura simple en línea.

Figura 1. Descargamos una plantilla de Factura simple en línea.

Ver Video Factura en Excel Parte 1

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Añadiendo columnas extras

La plantilla sólo cuenta con las columnas DESCRIPCIÓN e IMPORTE. Para que sea una factura algo más completa, la modificaremos para tener las columnas CÓDIGO, DESCRIPCIÓN, CANTIDAD e IMPORTE.

Modificamos la plantilla de la factura que descargamos en línea.

Figura 2. Modificamos la plantilla de la factura que descargamos en línea.

Agregar hojas nuevas

Agregaremos las siguientes 3 hojas al archivo para tener una factura más dinámica:

  • Detalle de facturas: En la parte 2 de este tutorial guardaremos en esta hoja el detalle de cada factura.
  • Clientes: En esta hoja tendremos una tabla de Clientes.
  • Productos: En esta hoja tendremos una tabla de Productos.

Hoja Clientes

En la hoja Clientes tendremos una tabla ficticia con los datos de posibles clientes a los que podemos generarles una factura, tendremos los datos de:

  • Nombre.
  • Nombre de la empresa.
  • Dirección.
  • Ciudad, estado y CP.
  • Teléfono.

Convertiremos este rango en Tabla para posteriormente usar el nombre de los Clientes en una Lista de validación.

  • Seleccionamos el rango.
  • Presionamos [Control] + [T].
  • Marcamos la opción La tabla tiene encabezados.
  • En la pestaña Herramientas de tabla le ponemos el nombre tblClientes a la tabla.

Tenemos una tabla de Clientes para nuestra factura.

Figura 3. Tenemos una tabla de Clientes para nuestra factura.

Hoja Productos

En la hoja Productos estarán los productos que podremos facturar, de los cuales tendremos la siguiente información:

  • Código.
  • Descripción.
  • Precio unitario.

Siguiendo los mismos pasos que para la hoja Clientes, convertimos el dato de los productos en tabla y a la tabla le pondremos el nombre tblProductos.

Tenemos una tabla de productos para nuestra factura.

Figura 4. Tenemos una tabla de productos para nuestra factura.

Devolver automáticamente los datos del cliente a facturar

Ahora que tenemos una tabla de Clientes, en la carátula de la Factura, en la sección Facturar a, insertaremos una lista de validación para mostrar el nombre de los clientes y en la parte inferior se muestren los datos del cliente elegido.

  • Seleccionamos la celda B7.
  • Nos dirigismos a la pestaña Datos > Validación de datos.
  • Elegimos Permitir Lista y en origen ingresamos la fórmula =INDIRECTO(“tblClientes[Nombre]”).

Obtendremos una Lista de validación con los nombres de los clientes.

Lista de validación para mostrar el nombre de los clientes.

Figura 5. Lista de validación para mostrar el nombre de los clientes.

Ahora haremos uso de la función BUSCARV para devolver los datos correspondientes al cliente elegido en la lista de validación. Ingresamos la siguiente fórmula en la celda B8 para devolver el nombre de la empresa:

=SI.ERROR(BUSCARV(B7,tblClientes[#Todo],2,0),”-“)

Para los valores posteriores sólo reemplazaremos el número 2 por el número 3 hasta llegar al número 5 que es la columna donde está el valor del teléfono.

Devolver automáticamente la descripción de los productos

Así como en los clientes, para enlistar los códigos de los productos lo haremos mediante una lista de validación.

  • Seleccionamos el rango B13:B23.
  • Nos dirigismos a la pestaña Datos > Validación de datos.
  • Elegimos Permitir Lista y en origen ingresamos la fórmula =INDIRECTO(“tblProductos[CODIGO]”).

Ahora que tenemos la lista de Códigos, en la columna C que la columna DESCRIPCIÓN usaremos la función BUSCARV para devolver la descripción de cada producto. Usaremos la formula:

=SI.ERROR(BUSCARV([@CÓDIGO],tblProductos[#Todo],2,0),””)

Con la función BUSCARV devolvemos la descripción del producto.

Figura 6. Con la función BUSCARV devolvemos la descripción del producto.

Calcular el subtotal por producto

Ya ingresamos el código, se devolvió la descripción e ingresamos la cantidad. Ahora nos falta calcular el IMPORTE de cada línea facturada. En la columna IMPORTE ingresamos una fórmula que multiplicará la cantidad de productos por el precio unitario del producto elegido. Recordemos que el precio unitario lo tenemos en la tabla Productos. Usamos la siguiente fórmula:

=SI.ERROR([@CANTIDAD]*BUSCARV([@CÓDIGO],tblProductos[#Todo],3,0),””)

Con la función BUSARV devolvemos el precio unitario de cada producto y lo multiplicamos por la cantidad.

Figura 7. Con la función BUSARV devolvemos el precio unitario de cada producto y lo multiplicamos por la cantidad.

Descarga el archivo de ejemplo

Descargar el ejemplo Factura simple que calcula el total – Parte 1 – EXCELeINFO.xlsx

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

 

FACTURA EN EXCEL PARTE 2

Factura en Excel Parte 2 – Macro VBA para guardar detalle de facturas y consecutivo

$
0
0

Factura en Excel Parte 2 - Macro VBA para guardar detalle de facturas y consecutivo

PREVIO: FACTURA EN EXCEL PARTE 1

En esta segunda entrega de nuestro Proyecto de Factura en Excel haremos uso de una macro VBA que nos servirá para guardar los datos de la factura en la hoja llamada Detalle de facturas. Asimismo tendremos una fórmula que nos devolverá el último número de factura registrado el cual nos servirá para tener un consecutivo de facturas.

Hoja Detalle de facturas

En la hoja llamada Detalle de facturas vamos a guardar los datos de cada factura, los cuales se guardará con la macro que desarrollamos. Los datos que se guardarán son:

  • Fecha. Fecha de la factura.
  • Consecutivo. El número de la factura.
  • Factura a. El cliente al cual se generará la factura.
  • Código. Código del producto.
  • Descripción. La descripción del producto.
  • Cantidad. El número de unidades vendidas.
  • Importe. La multiplicación de la cantidad de unidades vendidas por el precio unitario del producto.

Usando una macro VBA guardamos el detalle de cada factura en otra hoja.

Figura 1. Usando una macro VBA guardamos el detalle de cada factura en otra hoja.

Es importante considerar que en la hoja Detalle de facturas guardaremos tantas líneas como productos facturados. Por ejemplo, si de la factura 2 se vendieron dos productos, entonces se guardarán dos líneas con la misma factura, pero cada línea será un producto. De esa manera será más fácil realizar Reportes y Tablas dinámicas donde analicemos ventas por Fecha, Cliente, Producto, etc..

Ver video Factura en Excel Parte 2

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Consecutivo

Al momento de guardar los datos de una factura, en la hoja Detalle de facturas, en la celda I1 tendremos una fórmula que nos detecta la última factura guardada en la columna CONSECUTIVO. La fórmula es:

=DESREF(B1,CONTARA(A:A)-1,0,CONTARA(A:A),1)

La fórmula anterior es matricial por lo que debes usar la combinación de teclas [Control] + [Shift] + [Enter].

. Fórmula matricial para detectar la última celda con valores que es la última factura guardada.

Figura 2. Fórmula matricial para detectar la última celda con valores que es la última factura guardada.

En la hoja Factura, en la celda E4 tendremos una fórmula que simplemente realiza una suma de la última factura guardada más 1, y así siempre tendremos un consecutivo de factura automático.

Tenemos el consecutivo de la factura siempre actualizado.

Figura 3. Tenemos el consecutivo de la factura siempre actualizado.

Botón Guardar

Para mandar llamar a la macro insertaremos un objeto de tipo rectángulo que tendrá la etiqueta Guardar:

  • Nos dirigimos a la pestaña Insertar > Ilustraciones > Formas > Rectángulo.
  • Damos clic derecho al rectángulo y elegimos Modificar texto. Ingresamos Guardar.
  • Damos clic derecho y elegimos Asignar macro.
  • Elegimos la macro GuardarFactura.
  • Aceptar.

Insertamos un rectángulo y le asignamos la macro GuardarFactura.

Figura 4. Insertamos un rectángulo y le asignamos la macro GuardarFactura.

Código VBA de la macro

La macro se llamará GuardarFactura y debe estar almacenada en un Módulo normal.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub GuardarFactura()
Dim NombreHoja As String
Dim HojaDestino As Range
Dim NuevaFila As Integer
Dim FilasFactura As Integer
Dim i As Integer
Dim j As Integer
Dim NumFactura As Integer

NombreHoja = "Detalle de facturas"
FilasFactura = Application.WorksheetFunction.CountA(Range("Factura[CÓDIGO]"))
NumFactura = ThisWorkbook.Sheets("Factura").Range("E4").Value

With ThisWorkbook.Sheets(NombreHoja)

    For i = 1 To FilasFactura
        Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
        NuevaFila = HojaDestino.Rows.Count + 1
        .Cells(NuevaFila, 1).Value = Date
        .Cells(NuevaFila, 2).Value = NumFactura
        .Cells(NuevaFila, 3).Value = Range("valCliente").Value
            
            For j = 1 To 4
                .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("Factura").Cells(12 + i, 1 + j)
            Next j
    Next i

End With

MsgBox "Alta exitosa", vbInformation, "EXCELeINFO"

End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Factura en Excel Parte 2 – Guardar detalle de facturas – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

FACTURA EN EXCEL PARTE 3

Factura en Excel Parte 3 – Imprimir factura y guardarla como PDF

$
0
0

Factura en Excel Parte 3 - Imprimir factura y guardar como PDF

PREVIO: FACTURA EN EXCEL PARTE 2

En esta tercera entrega de nuestro Proyecto Factura en Excel, modificaremos la macro VBA que realizamos en el video 2 donde le diremos a la macro que al momento de guardar la información de la factura en la hoja Detalle de facturas, mandaremos imprimir la factura, además de poder guardar la misma factura en formato PDF. Al finalizar lo anterior se nos preguntará si deseamos borrar los datos de la factura para comenzar con otra desde cero.

Imprimir factura

La factura ya está diseñada para imprimirse en una sola hoja. Es importante considerar que si mandamos imprimir la factura, ésta se imprimirá en la Impresora predeterminada que tengamos en nuestra PC. Para elegir la Impresora:

  • Nos vamos a la pestaña Archivo > Imprimir.
  • En la sección Impresora desplegamos las impresoras configuradas en nuestra PC.

Eligiendo la impresora predeterminada para imprimir la factura.

Figura 1. Eligiendo la impresora predeterminada para imprimir la factura.

Ver Video Factura en Excel Parte 3

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Añadiremos el siguiente código VBA para imprimir la factura

ThisWorkbook.ActiveSheet.PrintOut Copies:=1

Al momento de elegir el botón Guardar e Imprimir se imprimirá la factura y posteriormente se guardará la información de la misma en la hoja Detalle de facturas.

Imprimiendo la factura y guardando los datos en el histórico.

Figura 2. Imprimiendo la factura y guardando los datos en el histórico.

Guardando factura como PDF

En este tutorial también incluiremos un código VBA para guardar la factura en formato PDF. Los pasos que se seguirán para guardar la factura en PDF son:

  • Se elige la captura donde deseamos que se guarde el archivo PDF.
  • Se convierte el archivo y posteriormente se abre el archivo PDF.

Guardamos la factura en formato PDF.

Figura 3. Guardamos la factura en formato PDF.

Código VBA de la macro

Para guardar la factura en formato PDF nos guiamos en este Tutorial donde ya había mostrado un ejemplo similar.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub GuardarFactura()
Dim NombreHoja As String
Dim HojaDestino As Range
Dim NuevaFila As Integer
Dim FilasFactura As Integer
Dim i As Integer
Dim j As Integer
Dim NumFactura As Integer
Dim Ruta As String
Dim Respuesta As Integer

NombreHoja = "Detalle de facturas"
FilasFactura = Application.WorksheetFunction.CountA(Range("Factura[CÓDIGO]"))
NumFactura = ThisWorkbook.Sheets("Factura").Range("E4").Value
'''''''''''''''''''''''''''''''''''''
If FilasFactura = 0 Or Range("valCliente").Value = "" Then _
MsgBox "Debes elegir un ciente e ingresar un código", vbExclamation, "EXCELeINFO": Exit Sub

ThisWorkbook.ActiveSheet.PrintOut Copies:=1

 'Propiedad FileDialog
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = Application.DefaultFilePath & " \ "
            .Title = "EXCELeINFO - Seleccionar carpeta"
            .Show
            If .SelectedItems.Count = 0 Then
            Else
                Ruta = .SelectedItems(1)

                    MsgBox "Guardando en PDF Factura '" & NumFactura & "'. Presione Aceptar para continuar...", _
                    vbInformation, "EXCELeINFO"
                    
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                    Ruta & "\" & "Factura-" & NumFactura & ".pdf", Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
            End If
        End With

'''''''''''''''''''''''''''''''''''''
With ThisWorkbook.Sheets(NombreHoja)

    For i = 1 To FilasFactura
        Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
        NuevaFila = HojaDestino.Rows.Count + 1
        .Cells(NuevaFila, 1).Value = Date
        .Cells(NuevaFila, 2).Value = NumFactura
        .Cells(NuevaFila, 3).Value = Range("valCliente").Value
            
            For j = 1 To 4
                .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("Factura").Cells(12 + i, 1 + j)
            Next j
    Next i

End With

MsgBox "Alta exitosa", vbInformation, "EXCELeINFO"

'''''''''''''''''''''''''''''''''''''
Respuesta = MsgBox("Deseas borrar los datos?", vbYesNo + vbQuestion, "EXCELeINFO")

    If Respuesta = vbYes Then
        With ThisWorkbook.Sheets("Factura")
            .Range("valCliente").ClearContents
            .Range("B13:B23").ClearContents
            .Range("d13:d23").ClearContents
    End With
    Else
    End If

'''''''''''''''''''''''''''''''''''''
End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Factura en Excel Parte 3 – Imprimir factura y guardar como PDF – EXCELeINFO.xlsm

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

SIGUIENTE: FACTURA EN EXCEL PARTE 4


Factura en Excel Parte 4.1 – Consultar factura histórica usando Tablas dinámicas

$
0
0

 Factura en Excel Parte 4.1 - Consultar factura histórica

PREVIO: FACTURA EN EXCEL PARTE 3

Esta cuarta parte de nuestro Proyecto Factura en Excel estará dividida en dos partes, ya que fue tan extenso el video que creí que ameritaba dejarla en dos partes. En esta primera parte veremos cómo hacer la consulta de facturas ya guardadas y reimprimirlas o simplemente consultar el detalle de los productos facturados. Para devolver el detalle de códigos facturados de la factura elegida lo haremos mediante fórmulas que consulten a una Tabla dinámica, y esas fórmulas estarán en una hoja que será réplica de la hoja donde capturamos los datos de la factura, sin embargo esta réplica nos servirá para consultar facturas. En el siguiente video desarrollaremos una macro VBA para que la consulta de facturas sea automatizada.

Convertir el detalle de facturas a Tabla

Como comenté al principio, para consultar el detalle de códigos de una factura lo haremos mediante una Tabla dinámica y aplicando filtros en esta Tabla dinámica de la factura elegida. Vamos a necesitar convertir nuestro rango de Detalle de facturas a Tabla.

  • Elegimos la hoja Detalle de facturas.
  • Seleccionamos el rango y presionamos [Control] + [T].
  • Le ponemos como nombre a la Tabla tblDetalle.

Convertimos el Detalle de facturas a Tabla.

Figura 1. Convertimos el Detalle de facturas a Tabla.

Creando Tabla dinámica en base al Detalle de facturas

Ahora crearemos una Tabla dinámica la cual contendrá el dato de FACTURA, CÓDIGO y CANTIDAD. Armaremos la Tabla dinámica en Formato Tabular para posteriormente aplicar filtros por Número de factura y tomar de ahí los códigos y cantidades. Seguimos los siguientes pasos para armar la Tabla dinámica.

  • Seleccionamos la Tabla recién creada, tblDetalle.
  • Nos vamos a la pestaña Insertar > Tabla dinámica.
  • Elegimos que se inserte en una Nueva hoja de cálculo.
  • Ya en la Tabla dinámica movemos los campos de CONSECUTIVO, CODIGO y CANTIDAD a la sección Filas.
  • Elegimos la Tabla dinámica y nos vamos a la pestaña Diseño > Diseño de informe > Mostrar en formato tabular.
  • Ahora de nuevo en la pestaña Diseño > Subtotales > No mostrar subtotales.
  • Pestaña Diseño > Totales generales > Desactivado para filas y columnas.
  • Pestaña Diseño > Diseño de informe > Repetir todas las etiquetas de elementos.
  • Le cambiamos el nombre a la hoja a TD-Consulta-Factura.

Ver Video Factura en Excel Parte 4.1

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Haciendo los pasos anteriores tenemos la siguiente Tabla dinámica como resultado.

Tabla dinámica en Formato tabular.

Figura 2. Tabla dinámica en Formato tabular.

Replicando la hoja Factura y creando la hoja Consulta factura

La hoja Factura nos sirve para dar de alta códigos. Vamos a copiar esta hoja para crear otra carátula, pero ahora para consultar facturas.

  • Damos clic derecho en la hoja Factura y elegimos Mover o copiar.
  • Marcamos la opción Crear una copia.
  • Le cambiamos de nombre a Consulta-Factura.

En la nueva hoja, en la celda A8 ingresamos la función BUSCARV para buscar el cliente al cual pertenece la factura a consultar. Usamos la siguiente fórmula:

=BUSCARV(E4,tblDetalle[[#Todo],[CONSECUTIVO]:[IMPORTE]],2,0)

En la celda B13, de la columna CÓDIGO ingresamos una fórmula que buscará el número de factura que ingresemos en la celda E4 en la hoja TD-Consulta-Factura en la celda A4. Si el número de factura se encuentra en la columna A de la Tabla dinámica, entonces traeremos el valor del código. Usamos la siguiente fórmula:

=SI($E$4=’TD-Consulta-Factura’!A4,’TD-Consulta-Factura’!B4,”-“)

En la celda D13 de la columna CANTIDAD usamos la siguiente fórmula que hará lo mismo que la anterior, pero ahora devolveremos la cantidad:

=SI($E$4=’TD-Consulta-Factura’!A4,’TD-Consulta-Factura’!C4,”-“)

Actualizando la Tabla dinámica al momento de capturar una nueva Factura

Cuando registramos una nueva Factura es importante que luego de grabar el detalle de la factura en la hoja Detalle de facturas, se actualice la Tabla dinámica para que automáticamente tome los datos de la nueva factura y no tener que hacer la actualización de manera manual. Para ello usaremos la siguiente línea en la macro GuardarFactura:

ThisWorkbook.Sheets(“TD-Consulta-Factura”).PivotTables(“tdDetalle”).PivotCache.Refresh

Haciendo pruebas de Consulta de factura de manera manual

Para realizar la consulta de facturas históricas seguimos los siguientes pasos:

  • En la hoja Consulta-Factura ingresamos una factura válida en la celda E4.
  • En la hoja TD-Consulta-Factura aplicamos un Filtro en la Tabla dinámica mostrando sólo el Consecutivo correspondiente a la factura ingresada en el paso anterior.
  • Vemos ahora en la hoja Consulta-Factura que se devuelven los valores del cliente factura y todos los Códigos y cantidades correspondientes a la factura elegida.

Aplicamos el filtro para mostrar una factura.

Figura 3. Aplicamos el filtro para mostrar una factura.

 Ingresamos la factura 6 y vemos el detalla de Códigos y cantidades.

Figura 4. Ingresamos la factura 6 y vemos el detalla de Códigos y cantidades.

Nota: En el siguiente tutorial desarrollaremos una macro VBA para que el proceso de Consulta de facturas, actualización y filtrado de la Tabla dinámica sea automatizado sin intervención del usuario.

Código VBA de la macro

La siguiente macro es la macro que nos guarda los datos de la Factura en la hoja Detalle de facturas.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub GuardarFactura()
Dim NombreHoja As String
Dim HojaDestino As Range
Dim NuevaFila As Integer
Dim FilasFactura As Integer
Dim i As Integer
Dim j As Integer
Dim NumFactura As Integer
Dim Ruta As String
Dim Respuesta As Integer

NombreHoja = "Detalle de facturas"
FilasFactura = Application.WorksheetFunction.CountA(Range("Factura[CÓDIGO]"))
NumFactura = ThisWorkbook.Sheets("Factura").Range("E4").Value
'''''''''''''''''''''''''''''''''''''
If FilasFactura = 0 Or Range("valCliente").Value = "" Then _
MsgBox "Debes elegir un ciente e ingresar un código", vbExclamation, "EXCELeINFO": Exit Sub

ThisWorkbook.ActiveSheet.PrintOut Copies:=1

 'Propiedad FileDialog
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = Application.DefaultFilePath & " \ "
            .Title = "EXCELeINFO - Seleccionar carpeta"
            .Show
            If .SelectedItems.Count = 0 Then
            Else
                Ruta = .SelectedItems(1)

                    MsgBox "Guardando en PDF Factura '" & NumFactura & "'. Presione Aceptar para continuar...", _
                    vbInformation, "EXCELeINFO"
                    
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                    Ruta & "\" & "Factura-" & NumFactura & ".pdf", Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
            End If
        End With

'''''''''''''''''''''''''''''''''''''
With ThisWorkbook.Sheets(NombreHoja)

    For i = 1 To FilasFactura
        Set HojaDestino = ThisWorkbook.Sheets(NombreHoja).Range("A1").CurrentRegion
        NuevaFila = HojaDestino.Rows.Count + 1
        .Cells(NuevaFila, 1).Value = Date
        .Cells(NuevaFila, 2).Value = NumFactura
        .Cells(NuevaFila, 3).Value = Range("valCliente").Value
            
            For j = 1 To 4
                .Cells(NuevaFila, j + 3).Value = ThisWorkbook.Sheets("Factura").Cells(12 + i, 1 + j)
            Next j
    Next i

End With

MsgBox "Alta exitosa", vbInformation, "EXCELeINFO"

ThisWorkbook.Sheets("TD-Consulta-Factura").PivotTables("tdDetalle").PivotCache.Refresh

'''''''''''''''''''''''''''''''''''''
Respuesta = MsgBox("Deseas borrar los datos?", vbYesNo + vbQuestion, "EXCELeINFO")

    If Respuesta = vbYes Then
        With ThisWorkbook.Sheets("Factura")
            .Range("valCliente").ClearContents
            .Range("B13:B23").ClearContents
            .Range("d13:d23").ClearContents
    End With
    Else
    End If

'''''''''''''''''''''''''''''''''''''
End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Factura en Excel Parte 4.1 – Consultar factura histórica usando Tablas dinámicas.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Nota: En el siguiente tutorial desarrollaremos una macro VBA para que el proceso de Consulta de facturas, actualización y filtrado de la Tabla dinámica sea automatizado sin intervención del usuario.

SIGUIENTE: FACTURA EN EXCEL PARTE 4.2

Factura en Excel Parte 4.2 – Macro VBA para consultar factura histórica y reimprimirla

$
0
0

Factura en Excel Parte 4.2 - Macro VBA para consultar factura histórica y reimprimirla

PREVIO: FACTURA EN EXCEL PARTE 4.1

Recordemos que la parte 4 de nuestro Proyecto Factura en Excel estará dividido en dos partes. Esta es la segunda parte y veremos cómo desarrollar una macro VBA paso a paso para poder consultar una factura histórica y tener la opción de reimprimirla. Con esta macro automatizaremos el proceso de consulta de facturas sin necesidad de filtrar de manera manual el número de factura en la Tabla dinámica (Parte 4.1), sino que se hará automáticamente y así podremos obtener los datos de los productos de la factura consultada. Cabe señalar que esta macro fue en base a otra macro que se desarrolló en el canal Wise Owl Tutorials, el cual un repertorio fantástico de macros VBA en Excel y otros temas.

Botón Consultar factura

Con la macro desarrollada en este tutorial tendremos un botón cuyo título dice Consultar factura, y dicho botón nos pedirá la factura de la cual deseamos hacer la consulta y devolver los datos hacia nuestra plantilla para posteriormente reimprimirla.

Ingresar número de factura para consultarla e imprimir.

Figura 1. Ingresar número de factura para consultarla e imprimir.

Ver Video Factura en Excel Parte 4.2

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Una vez que ingresamos el número de factura a consultar, la macro filtrará en la Tabla dinámica el número de factura en el campo CONSECUTIVO y así las fórmulas que tenemos en la hoja Consulta-Factura podrán revolver los datos de la factura.

La macro VBA filtra el número de factura en la columna CONSECUTIVO.

Figura 2. La macro VBA filtra el número de factura en la columna CONSECUTIVO.

Reimprimir factura

Al mostrar los datos de la factura, la macro nos preguntará si deseamos imprimirla, mostrando un mensaje con las opciones Sí o No.

Al consultar la factura tenemos la opción de volver a imprimirla.

Figura 3. Al consultar la factura tenemos la opción de volver a imprimirla.

Código VBA de la macro

La siguiente macro es la macro que está vinculada al botón Consultar factura.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub ConsultarFactura()

Dim Factura
Dim Imprimir As Integer

Factura = InputBox("Ingresa la factura a consultar.", "EXCELeINFO")
Range("E4").Value = Factura

Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem

On Error GoTo ManejadorErrores

Set pt = ThisWorkbook.Sheets("TD-Consulta-Factura").PivotTables("tdDetalle")
Set pf = pt.PivotFields("CONSECUTIVO")

pf.ClearAllFilters

For Each pi In pf.PivotItems
    If pi.Name = Factura Then
        pi.Visible = True
    Else
        pi.Visible = False
    End If
Next pi

Imprimir = MsgBox("Deseas imprimir la factura?", vbYesNo + vbQuestion, "EXCELeINFO")

If Imprimir = vbYes Then
    ActiveSheet.PrintOut Copies:=1
Else
End If

Exit Sub
ManejadorErrores:
MsgBox "La factura " & Factura & " puede que no exista", vbExclamation, "EXCELeINFO"
Range("E4").ClearContents

End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Factura en Excel Parte 4.2 – Macro VBA para consultar factura histórica y reimprimirla – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

SIGUIENTE: FACTURA EN EXCEL PARTE 5

Factura en Excel Parte 5 – Macro VBA para enviar PDF de la factura por email

$
0
0

Factura en Excel Parte 5 - Macro VBA para enviar PDF de la factura por email

PREVIO: FACTURA EN EXCEL PARTE 4.2

En esta quinta y última de nuestro Proyecto Factura en Excel vamos a desarrollar una macro VBA paso a paso la cual nos servirá para enviar el PDF de la factura por correo electrónico. Pero antes modificaremos la macro que genera facturas nueva y vamos a indicarle que al momento de guardar los datos de la factura en la hoja Detalle de facturas, también guarde la ruta completa del archivo PDF generado y así la macro Enviar mail tomará esa dirección y el nombre de los archivos PDF para adjuntarlos en un email. Debes tener instalado Outlook de Office en tu PC para que la macro funcione.

La ventaja de esta macro es que si tienes varias cuentas configuradas en Outlook, podrás elegir por cuál se hará el envío del archivo PDF de la factura.

Nueva columna para la ruta de las facturas en PDF

En la hoja Detalle de facturas tenemos una tabla que hasta este momento sólo guarda datos propios de la factura. Vamos a añadirle una nueva columna que llamaremos NOMBRE_ARCHIVO la cual nos guardará la ruta completa y el nombre de los archivos PDF.

Agregamos una nueva columna para guardar la ruta completa donde están los archivos PDF.

Figura 1. Agregamos una nueva columna para guardar la ruta completa donde están los archivos PDF.

En la carpeta donde guardamos los archivos PDF ya contamos con algunos archivos de las pruebas que realizamos en los otros videos.

Carpeta donde guardamos nuestras facturas en PDF.

Figura 2. Carpeta donde guardamos nuestras facturas en PDF.

Ver video Factura en Excel Parte 5

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Modificar macro para guardar la ruta del archivo PDF

Modificamos la macro que Guarda e imprime la macro y añadiremos una nueva línea para guardar la ruta completa y el nombre del archivo PDF.

.Cells(NuevaFila, 8).Value = Ruta & “\” & “Factura-” & NumFactura & “.pdf”

La línea anterior se añade en el procedimiento GuardarFactura que puedes consultar completo en el archivo a descargar. Lo encuentras al final de este tutorial.

Imprimir o guardar factura en PDF sin mostrar los botones

En los comentarios de Youtube me han preguntado cómo podemos imprimir las facturas sin que se muestren los botones de Guardar e imprimir o el de Consultar factura. Lo que debemos hacer es asignarle la propiedad de No imprimir a cada uno de los botones:

  • Damos clic derecho en un botón.
  • Elegimos Tamaño y propiedades.
  • En Propiedades desmarcamos la opción Imprimir objeto.

Imprimimos la factura sin mostrar los botones.

Figura 3. Imprimimos la factura sin mostrar los botones.

Macro VBA para enviar el archivo de la factura PDF por email

Debo hacerte algunas aclaraciones que debes tomar en cuenta para usar la macro para enviar Emails.

  • Usaremos Outlook de Office para enviar los emails.
  • Debemos activar una referencia al mismo Outlook.
  • Podemos adjuntar cualquier archivo en el correo.
  • Si tienes varias cuentas configuradas en tu Outlook, puedes decidir por cuál se enviará la factura.

Activar referencia

Para que la macro funcione es necesario activar una Referencia a Outlook de Office, ya que será el programa por el cual se enviarán los correos.

  • Entramos al IDE de Visual Basic para Aplicaciones con [Alt] + [F11].
  • Entramos al menú Herramientas > Referencias.
  • Activamos Microsoft Outlook 16.0 Object Library.

Activamos la Referencia a Outlook de Office 365.

Figura 4. Activamos la Referencia a Outlook de Office 365.

Como lo comenté, es necesario contar con Outlook de Office 2010, 2013, 2016 o 365.

Usamos Outlook de Office para enviar las facturas por email.

Figura 5. Usamos Outlook de Office para enviar las facturas por email.

Botón para enviar factura PDF por email

En la hoja Consulta-Factura donde devolvemos los valores de determinada factura consultada añadiremos un botón que diga Enviar pdf por email el cual ejecutará la macro EnviarEmail que enviará el archivo PDF asociado a la factura consultada por email.

Botón para enviar el archivo PDF de la factura consultada por email.

Figura 6. Botón para enviar el archivo PDF de la factura consultada por email.

Macro VBA para enviar PDF de la factura por email

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub EnviarEmail()

Dim OutlookApp As Outlook.Application
Dim MItem As Outlook.MailItem
Dim Asunto As String
Dim Correo As String
Dim Msg As String
Dim n_factura As String

'Asignar valores a variables
n_factura = Sheets("Consulta-Factura").Range("E6").Value
Asunto = "Envío de la factura " & n_factura
Correo = "sergioacamposh@hotmail.com"
Msg = "Se envía la factura " & n_factura

Set OutlookApp = New Outlook.Application
Set MItem = OutlookApp.CreateItem(olMailItem)

With MItem
    .To = Correo
    .Subject = Asunto
    .Body = Msg
    .Attachments.Add n_factura
    .SentOnBehalfOfName = "tu cuenta de correo origen"
    '.SendUsingAccount = OutlookApp.Session.Accounts.Item(1)
    '.Display
    .Send
End With

Set MItem = Nothing
Set OutlookApp = Nothing
    
End Sub

Descargar el archivo de ejemplo

Descargar el ejemplo Factura en Excel Parte 5 – Enviar factura PDF por email – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

PROYECTO COMPLETO FACTURA EN EXCEL

Crear hoja de índice con hipervínculos a hojas de un archivo de Excel

$
0
0

Crear hoja de índice con hipervínculos a hojas de un archivo de Excel

En este tutorial te mostraré una macro VBA en Excel para crear una hoja de cálculo donde insertaremos un Índice de las hojas que tengamos en un archivo de Excel para navegar sobre ellas. La macro mandará llamar a la opción de Excel Insertar Vínculo.

Vínculos en Excel

En Excel podemos insertar hipervínculos a los siguientes elementos. Se insertar links parecidos a los que vemos en páginas Web.

  • Archivo o página Web.
  • Celda u hoja del archivo.
  • Crear nuevo archivo.
  • Correo electrónico.

De manera manual podemos insertar vínculos hacia otra hoja que tengamos en nuestro archivo. En una celda ingresamos un texto y damos clic derecho sobre esa celda y elegimos Vínculo. Veremos el formulario Insertar hipervínculo. Seleccionamos Lugar de este documento y luego Hoja2.

Insertar hipervínculo en celda en celda de Excel.

Figura 1. Insertar hipervínculo en celda en celda de Excel.

Ver video Crear hoja de índice con hipervínculos

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Crear hoja de índice usando macros VBA

Hemos desarrollado una macro VBA que inserta una nueva hoja de cálculo y enlista el nombre de todas las hojas que tengamos en nuestro archivo. Al crear la hoja nos pedirá si le deseamos ingresar un nombre. Recomiendo que le ingresemos ÍNDICE.

Crear índice con links a hojas en Excel

Figura 2. Crear índice con links a hojas en Excel.

Código VBA de la macro

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub CrearIndice()
    
Dim i As Integer
Dim Dato As Integer
Dim RangoA1 As Range
Dim NuevoNombre, Resp

On Error GoTo Errores

ActiveWorkbook.Sheets.Add Before:=Sheets(1)
Set RangoA1 = Sheets(1).Range("a1")
Sheets(1).Range("a1").Value = "ÍNDICE"
Dato = ActiveWorkbook.Sheets.Count

For i = 1 To Dato
    With Sheets(1)
        .Hyperlinks.Add Anchor:=RangoA1.Offset(i, 0), Address:="", SubAddress:="'" & Sheets(i).Name & "'" & "!A1", _
        TextToDisplay:=Sheets(i).Name, ScreenTip:="Ir a hoja " & Sheets(i).Name
    End With
Next i

ActiveSheet.Range("A2").EntireRow.Delete
Resp = MsgBox("Desea asignarle un nombre la hoja de índice creada?", vbYesNoCancel + vbQuestion, "EXCELeINFO")

If Resp = vbYes Then
    Application.Dialogs(xlDialogWorkbookName).Show
Else
'
End If

Exit Sub

Errores:
MsgBox "Ha ocurrido un error: " & vbNewLine & vbNewLine & Err.Description, vbExclamation, "EXCELeINFO"

End Sub

Descargar el archivo de Excel

Descargar el ejemplo Crear hoja de índice con hipervínculos a hojas de un archivo de Excel – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Inventarios en Excel Parte 1.1 – Modificación de productos y aumentar el stock o existencias

$
0
0

Inventarios en Excel Parte 1.1 - Formulario de Modificación de productos y aumentar el stock

En este tutorial veremos un nuevo proyecto llamado Inventarios en Excel. Veremos un formulario que nos permitirá modificar las cantidades en existencia de los productos registrados. Si el producto existe vamos a aumentarle la existencia. De manera opcional vamos a poder modificar la descripción de los productos y el precio unitario a cada producto.

Tabla de productos

Tenemos una tabla donde tendremos los datos de CÓDIGO, DESCRIPCIÓN, PRECIO UNITARIO Y CANTIDAD o EXISTENCIA.

Tabla de productos en nuestro inventario.

Figura 1. Tabla de productos en nuestro inventario.

Ver video Inventarios en Excel Parte 1.1

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Formulario para modificar la existencia de los productos

Tenemos un formulario desarrollado en Excel VBA donde tendremos un cuadro de texto donde ingresaremos el código a buscar. En caso de que el código exista, se mostrarán los datos de DESCRIPCIÓN y PRECIO UNITARIO. En el cuadro de texto CANTIDAD el número que ingresemos se sumará a la cantidad que haya en existencia.

Aumentamos el stock de los productos del inventario.

Figura 2. Aumentamos el stock de los productos del inventario.

Código VBA de formulario (macros)

El siguiente código VBA son las instrucciones VBA que van en el formulario.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Public DatoEncontrado
Public varOpcion '1 para modificar, 2 para alta

'AL INICIAR EL FORMULARIO
Private Sub UserForm_Initialize()
    
Call DeshabilitarCajasTexto
Me.lblAviso.Font.Size = 11
    
End Sub

'BUSCAR CÓDIGOS
Private Sub CommandButton2_Click()
    
On Error GoTo ManejadorErrores

If Me.txtCodigo.Value = "" Then MsgBox "Ingrese un código", vbExclamation, "EXCELeINFO": Exit Sub

Set Rango = Sheets("Inventario").Range("A1").CurrentRegion

FilasRango = Rango.Rows.Count
Set ColumnaBusqueda = Sheets("Inventario").Range("A2:A" & FilasRango)

DatoEncontrado = ColumnaBusqueda.Find(What:=Me.txtCodigo.Value, MatchCase:=False, LookAt:=xlWhole).Address

Call HabilitarCajasTexto

Me.txtDescripcion.Value = Sheets("Inventario").Range(DatoEncontrado).Offset(0, 1).Value
Me.txtPrecio.Value = Sheets("Inventario").Range(DatoEncontrado).Offset(0, 2).Value
Me.txtCantidad.SetFocus
Me.lblAviso.Caption = "Modificar código " & Me.txtCodigo

varOpcion = 1

Exit Sub
ManejadorErrores:

If Err.Number = 91 Then
    MensajeAlta = MsgBox("El código " & Me.txtCodigo.Value & " no se encuentra. Desea darlo de alta?", vbYesNo + vbQuestion, "EXCELeINFO")
    If MensajeAlta = vbYes Then
        Call HabilitarCajasTexto
        Me.txtDescripcion.SetFocus
        Me.lblAviso.Caption = "Alta de código " & Me.txtCodigo
        varOpcion = 2
    Else
        Me.txtCodigo.SetFocus
    End If
Else
    
    MsgBox "Otro error"
    
End If
    
End Sub

'MODIFICAR O GUARDAR
Private Sub btnAceptar_Click()
    
If varOpcion = 1 Then
    
    With Sheets("Inventario")
        .Range(DatoEncontrado).Offset(0, 1).Value = Me.txtDescripcion.Value
        .Range(DatoEncontrado).Offset(0, 2).Value = Me.txtPrecio.Value
        .Range(DatoEncontrado).Offset(0, 3).Value = _
        Val(.Range(DatoEncontrado).Offset(0, 3).Value) + Val(Me.txtCantidad.Value)
    End With
    
ElseIf varOpcion = 2 Then
    
    Set Rango = Sheets("Inventario").Range("A1").CurrentRegion
    NuevaFila = Rango.Rows.Count + 1
    
    With Sheets("Inventario")
        .Cells(NuevaFila, 1).Value = Val(Me.txtCodigo)
        .Cells(NuevaFila, 2).Value = Me.txtDescripcion
        .Cells(NuevaFila, 3).Value = Val(Me.txtPrecio)
        .Cells(NuevaFila, 4).Value = Val(Me.txtCantidad)
    End With
    
End If

Unload Me
    
End Sub

Y el siguiente código VBA va en un Módulo normal y servirá para habilitar o deshabilitar los cuadros de texto para actualizar los datos de cada producto.

Sub HabilitarCajasTexto()

Set FormActivo = UserForms(0)

With FormActivo

    .txtDescripcion.Enabled = True
    .txtDescripcion.BackStyle = fmBackStyleOpaque
    .txtPrecio.Enabled = True
    .txtPrecio.BackStyle = fmBackStyleOpaque
    .txtCantidad.Enabled = True
    .txtCantidad.BackStyle = fmBackStyleOpaque

End With

End Sub

Sub DeshabilitarCajasTexto()

Set FormActivo = UserForms(0)

With FormActivo

    .txtDescripcion.Enabled = False
    .txtDescripcion.BackStyle = fmBackStyleTransparent
    .txtPrecio.Enabled = False
    .txtPrecio.BackStyle = fmBackStyleTransparent
    .txtCantidad.Enabled = False
    .txtCantidad.BackStyle = fmBackStyleTransparent

End With

End Sub

Descarga el archivo de ejemplo

Descargar el ejemplo Inventarios en Excel Parte 1 – Formulario de alta y modificación de productos – EXCELeINFO.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

SIGUIENTE: INVENTARIOS EN EXCEL PARTE 1.2

Viewing all 466 articles
Browse latest View live