jueves, 26 de mayo de 2016

Apilar y Ajustar la Escala en una serie de datos de un gráfico de Excel.

Hoy avanzaremos un paso más hacia la personalización de nuestras series de datos en los gráficos de Excel, aprenderemos a Apilar y Ajustar la Escala de una serie, hasta conseguir un aspecto como el de la imagen:

Apilar y Ajustar la Escala en una serie de datos de un gráfico de Excel.



Todo nace a partir de lo expuesto en este post de hace algún tiempo... pero necesario para llegar a nuestra personalización.

Seguidos los pasos descritos tendríamos este aspecto en nuestro gráfico:

Apilar y Ajustar la Escala en una serie de datos de un gráfico de Excel.


Se observa el efecto de la imagen 'estirada' en cada punto/columna de la serie de datos.

Para conseguir el aspecto deseado, un efecto de bloques constantes apilados con la imagen insertada, deberemos seleccionar la Serie en el gráfico, ir al Formato de Serie de datos > Opciones de Serie > Relleno > opciones de Apilar y Ajustar la escala con

Apilar y Ajustar la Escala en una serie de datos de un gráfico de Excel.



Con la opción marcada, solo nos queda dar tamaño al efecto del bloque, es decir, dar la escala a la imagen en el campo de Units/Picture...
En el ejemplo he marcado el tamaño a 500.

hemos acabado, obteniendo el gráfico del principio del post...

martes, 24 de mayo de 2016

Gráfica de un polígono de hasta 20 lados.

Aprenderemos hoy a construir un gráfico de un polígono de hasta 20 lados, empleando el tipo de gráfico Radial.
En primer lugar, a modo didáctico, recordaremos los nombres de los diferentes polígonos... (leer algo más en wikipedia):

Clasificación de polígonos 
Nombren.º lados
trígono o triángulo3
tetrágono, cuadrángulo o cuadrilátero4
pentágono5
hexágono6
heptágono7
octógono u octágono8
eneágono o nonágono9
decágono10
endecágono o undecágono11
dodecágono12
tridecágono13
tetradecágono14
pentadecágono o pentedecágono15
hexadecágono16
heptadecágono17
octodecágono u octadecágono18
eneadecágono o nonadecágono19
isodecágono o icoságono20



El objetivo es lograr lo siguiente:

Gráfica de un polígono de hasta 20 lados.



Para la construcción en primer lugar dispondremos en un rango de una fila un mismo valor repetido, en mi caso en el rango T1:AM1 dispuse el valor 2 repetido veinte veces....

En segundo lugar seleccionando ese rango insertamos un gráfico tipo Radial.

Gráfica de un polígono de hasta 20 lados.



A continuación eliminamos la etiqueta del eje radial y las líneas de división principal.

Un paso después crearemos el siguiente Nombre Definido:
lados =DESREF(Radial!$T$1;;;1;Radial!$O$1)
que tomará un número determinado de valores según se indique en la celda O1 (que más adelante indentificaremos).

En un paso posterior seleccionamos accedemos a la opción Selección de datos, y Editamos la Serie representada.
Incluimos en esta serie el Nombre definido anterior:



Añadimos ahora una Barra de desplazamiento (control de formulario) al lado de nuestro gráfico... incorporándole las siguientes propiedades:
Valor mínimo: 3
Valor máximo: 20
Vincular con Celda: $O$1

jueves, 19 de mayo de 2016

VBA: Una función personalizada para construir un Balance de Situación.

Hoy veremos una UDF (función personalizada en VBA) muy sencilla como respuesta a la cuestión planteada de un usuario, quien solicitaba una fórmula para construir fácilmente un Balance de Situación a partir de un Suma y Saldos (o balance de comprobación).

Para los no entendidos resumiré la idea. Vamos a generar una UDF (función personalizada con VBA) para poder sumar en un informe un determinado número de cuentas, tomadas del balance de sumas y saldos, agrupadas por epígrafes y dividido en distintas masas patrimoniales.
Partiremos del siguiente Balance de sumas y saldos ficticio, para construir un Balance de Situación 'abreviado'... sirva como ejemplo:



Observamos en el rango A1:B23 una Tabla con el balance de sumas y saldos...
y cómo tenemos construido un Balance de Situación en el rango E2:G20.
Lo importante aparece en la columna D donde hemos desplegado las cuentas asociadas a cada epígrafe de nuestro Balance inventado.


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:

Function SumaBlce(ByVal Buscados As String, RngCuentas As Range, Saldos As Range)
'www.excelforo.com

'primer argumento: indicamos qué cuentas queremos acumular
'segundo argumento: en qué rango se encuentran las cuentas con que comparar
'tercer argumento: en qué rango se sitúan los importes coincidentes a sumar.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'con la Array Cuentas determinamos qué cuentas queremos acumular...
'generadas a aprtir de lo indicado en el primer argumento de nuestra función
Dim Cuentas() As String: Cuentas = Split(Buscados, ",")
'definimos el número de cuentas a sumar
Dim NumCuentas As Integer: NumCuentas = UBound(Cuentas)

Dim fila As Integer, filas As Integer
Dim Elto As Integer, coincidente As Boolean

'partimos de un Resultado igual a 0
Dim Resultado As Double: Resultado = 0
'controlamos que la longitud del rango en Cuentas y Saldos sea el mismo
If (RngCuentas.Count <> Saldos.Count) Or (RngCuentas.Columns.Count <> 1 Or Saldos.Columns.Count <> 1) Then
    SumaBlce = "error en rangos"
    Exit Function
End If

'recorremos toda las Cuentas del RngCuentas
x = 1
For Each cta In RngCuentas
    coincidente = False
    For Elto = 0 To NumCuentas
        If cta.Value = Cuentas(Elto) Then
            coincidente = True
            Exit For
        End If
    Next Elto
    'si existe la cuenta entonces acumulamos...
    If coincidente = True Then
        Resultado = Resultado + CDbl(Saldos.Item(x))
    End If
    x = x + 1
Next cta

'devolvemos el resultado final a la celda.
SumaBlce = Resultado

End Function



Como podemos comprobar en la imagen de más arriba, por ejemplo en la celda G4, nuestra fórmula se compone de tres argumentos:
=SumaBlce(D4;TblDatos[Cuenta];TblDatos[Importe])

1er argumento: indicamos qué cuentas queremos acumular. En este caso tomamos la lista de cuentas de la celda D4
2do argumento: en qué rango se encuentran las cuentas con que comparar. En el ejemplo trabajamos sobre el campo [Cuenta] de la Tabla 'TblDatos
3er argumento: en qué rango se sitúan los importes coincidentes a sumar. En el ejemplo trabajamos sobre el campo [Importe] de la Tabla 'TblDatos.

VBA: Una función personalizada para construir un Balance de Situación y Cuenta de Pérdidas y Ganancias.

martes, 17 de mayo de 2016

VBA: Cómo crear nuestro propio Complemento en Excel.

Hace algún tiempo publiqué cómo conseguir personalizar nuestra Cinta de Opciones sin macros (ver), pero, sin duda este es un tema muy recurrente en las búsquedas por Internet, que aunque a priori parezca algo avanzado, veremos en el post de hoy, que con pocos conocimientos es posible conseguirlo...
Cómo generar nuestro propio complemento en Excel.

En realidad en cuatro pasos:
1-crear macros en nuestro libro de Excel
2-guardar el libro como .xlam (Complemento de Excel)
3-abrir y generar el código dentro del 'Custom UI Editor'
4-cargar nuestro complemento.


Lo primero que necesitaremos será una macro.. valdrá el código de cualquiera de las mostradas en este blog (o la que necesites o tengas).
Por simplificar, y no despistar de nuestro objetivo: Crear un Complemento en Excel, utilizaré un par de macros para abrir una web.
Incluimos nuestras macros en un módulo estándar del editor de VB (Alt+F11):

Sub AbrirWeb1(control As IRibbonControl)
'Abrir URL con Internet Explorer
Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "http://www.excelforo.com/"
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub AbrirWeb2(control As IRibbonControl)
'Abrir URL con nuestro Navegador por Defecto....
ActiveWorkbook.FollowHyperlink _
    Address:="http://www.excelforo.com/", NewWindow:=True
End Sub



MUY importante el parámetro de los procedimientos 'control As IRibbonControl' que servirán para emplearlos como Botones/Controles en la Cinta de Opciones o Ribbon

En el siguiente paso guardaremos nuestro Libro de trabajo como Complemento de Excel (.xlam).
Al presionar Guardar como veremos que la ruta donde el complemento se va a guardar es:
C:\Users\[Nombre Usuario]\AppData\Roaming\Microsoft\Complementos

VBA: Cómo crear nuestro propio Complemento en Excel.



Si deseamos tener oculto el código es recomendable proteger el Proyecto VBA con contraseña...

Nos descargamos e instalamos el Custom UI Editor, puedes hacerlo desde aquí.
En esa web encontrarás un archivo llamado OfficeCustomUIEditorSetup.zip.
En esencia es una aplicación, tipo editor de 'texto', específico para trabajar con lenguaje XML.


Una vez finalizada la instalación, accedemos al programa y lo abrimos...
Se abrirá una sencilla ventana de programa, desde donde en primer lugar presionaremos la opción de abrir, buscando la ruta de nuestro complemento creado (recuerda, en la ruta: C:\Users\[Nombre Usuario]\AppData\Roaming\Microsoft\Complementos):

VBA: Cómo crear nuestro propio Complemento en Excel.



Con nuestro complemento cargado, y aún en la Ventana del 'Custom UI Editor', seleccionaremos el menú Insertar > Office 2010 Custom Part
lo cual generará un fichero CustomUI14.xml únicamente válido para versiones de Excel 2010 y superiores.
O también podemos elegir el menú Insertar > Office 2007 Custom Part
que generará un fichero CustomUI.xml válido para versiones de Excel 2007 y superiores...!!!
Todo dependerá de tu caso.
Yo elegiré la última, es decir, Insertar > Office 2007 Custom Part


En la ventana derecha del editor incluiremos el siguiente código XML (basado en etiquetas):


<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab idMso="TabHome" >
<group id="customGroup1" label="Abriendo URL" insertAfterMso="GroupEditingExcel">
<button id="customButton1" label="Abre IE" size="large" supertip="Abre el navegador de Internet Explorer" onAction="AbrirWeb1" imageMso="SlideShowFromCurrent" />
<button id="customButton2" label="Abre Navegador" size="large" supertip="Abre el navegador por defecto" onAction="AbrirWeb2" imageMso="SourceControlShowDifferences" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>



Antes de guardar es importante presionar el botón de Validate, y confirmar que el código es correcto.
Guardamos nuestros cambios y cerramos el 'Custom UI Editor'.


Abrimos un nuevo Libro de trabajo.
Accedemos a la Ficha Desarrollador > grupo de Complementos > botón Complementos.
En la ventana que se abra buscaremos nuestro complemento (recuerda cómo le llamaste: 'MiComplemento'):

VBA: Cómo crear nuestro propio Complemento en Excel.



Tras Aceptar podremos buscar nuestros botones en la Ficha de Inicio, donde habíamos indicado que queríamos incluir nuestras macros:
<tab idMso="TabHome" >

VBA: Cómo crear nuestro propio Complemento en Excel.



Por supuesto las macros asociadas están 100% operativas... y bastará presionar dichos botones para ejecutarlas.

jueves, 12 de mayo de 2016

VBA: El método Shapes.AddPicture para incorporar imágenes en Excel.

Con frecuencia se me ha planteado, al respecto de este post (ver), cuál era la forma de insertar imágenes en Excel de manera automática, desde una ruta concreta, pero rompiendo cualquier vínculo con el fichero origen de la imagen.
[...] Mi problema es el mismo que exponían mis compañeros en los comienzos de este foro (hace mil años): necesitaría que las imágenes estuvieran incrustadas y no vinculadas [...]


El objetivo es claro, insertar imágenes desde una ruta, pero perder cualquier vínculo existente para evitar que si el fichero de la imagen desaparece, nuestro Excel pierda la imagen:

VBA: El método .AddPicture para incorporar imágenes en Excel.



Fijémonos en el mensaje del cuadro de imagen: No se puede mostrar la imagen vinculada. Puede que se haya movido, cambiado de nombre o eliminado el archivo. Compruebe que el vínculo señala al archivo y ubicación correcta.

Muy aclaratorio mensaje, y muy real, ya que es muy frecuente que ocurran estos casos al trabajar en Red y compartir ficheros...


La solución es emplear el método Shapes.AddPicture, a partir del cual crearemos una imagen a partir de un archivo existente, en una ruta concreta, obteniendo un objeto Shape que muestre la imagen...
La ventaja de este método es que podemos configurar si deseamos la imagen con o SIN vínculo!!

La sintaxis del método:
Shapes.AddPicture(Filename,LinkToFile, SaveWithDocument, Left, Top, Width, Height)
y los parámetros a definir podrían ser:
Filename
Requiere una cadena tipo String, con la ruta del fichero a importar, esto es, el fichero/imagen a partir de la cual se crearña el objeto Shape.

LinkToFile
Requiere una contante tipo 'MsoTriState'. Controla cómo será el vínculo, o si queremos exista éste.
Las constante puede ser:
1-msoFalse (hará independiente la imagen importada)
2-msoTrue (se creará un vínculo hacia la ruta o ubicación de la imagen indicada)

SaveWithDocument
Requiere una contante tipo 'MsoTriState', y controla la acción para conservar o guardar la imagen dentro del libro.

Left, Top, Width, Height
estas son propiedades de ubicación en la hoja de cálculo y dimensiones (Alto y Ancho), medidos en Points!!.


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB.:

Sub FicherosCarpeta()
'www.excelforo.com
'Añadir Imagenes a Excel

'Crea una Imagen desde un fichero y
'devuelve un objeto NO vinculado a el fichero origen

Dim Ruta As String
Dim Fotos As Object
Dim rng As Range, celda As Range

'Saltamos posibles errores
On Error Resume Next
Application.ScreenUpdating = False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim img As Shape
'si existe alguna foto, la borro:
On Error Resume Next
For Each img In ActiveSheet.Shapes
If img.Type = 11 Then img.Delete
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Creamos el objeto FileSystemObject que
'proporciona acceso al sistema de archivos de un equipo
Set fso = CreateObject("Scripting.FileSystemObject")
'Indicamos la ruta de donde vamos a obtener
'los ficheros, en este caso E:\excelforo\Fotos\
Ruta = "E:\excelforo\Fotos\"
'definimos dos variables que necesitaremos,
'para recuperar el nombre de la carpeta, y los ficheros que haya dentro
Set Carpeta = fso.GetFolder(Ruta)
Set ficheros = Carpeta.Files
'damos un título en negrita para la celda A1
With Range("A1")
.Value = "Ficheros de la carpeta " & Ruta
.Font.Bold = True
End With
'escribimos los ficheros, a partir de A2
Range("A2").Select
For Each archivo In ficheros
'escribimos el nombre del fichero
ActiveCell = archivo.Name
'bajamos una fila
ActiveCell.Offset(1, 0).Select
Next archivo
ActiveCell.EntireColumn.AutoFit
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set rng = Worksheets("Hoja2").Range("A2:A15")
For Each celda In rng
If Len(Trim(celda)) > 0 Then
'defino la celda equivalente de la columna A y la selecciono
Set r1 = Cells(celda.Row, "B")
r1.Select
'se inserta la imagen de la ruta definida
'Set Fotos = ActiveSheet.Pictures.Insert(Ruta & celda.Value)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'VARIANTE PARA AÑADIR IMAGEN NO VINCULADA AL FICHERO Y RUTA!!
Set Fotos = ActiveSheet.Shapes.AddPicture(Filename:=Ruta & celda.Value, _
linktofile:=msoFalse, savewithdocument:=msoCTrue, _
Left:=0, Top:=0, Width:=-1, Height:=-1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'con la posición definida respecto a la celda de la columna B seleccionada
With Fotos
.Top = r1.Top
.Width = .Width / 1.5
.Height = .Height / 1.5
.Left = r1.Left + (r1.Width - Fotos.Width) / 2
.ShapeRange.LockAspectRatio = msoFalse
r1.EntireRow.RowHeight = .Height
.Placement = xlMoveAndSize
End With
r1.Select
End If
Next celda
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Limpiamos los objetos y variables definidas
Set fso = Nothing
Set Carpeta = Nothing
Set ficheros = Nothing
Set rng = Nothing
Set r1 = Nothing
Set Fotos = Nothing

Application.ScreenUpdating = True
End Sub



La parte diferente del código responde por tanto a la línea:

Set Fotos = ActiveSheet.Shapes.AddPicture(Filename:=Ruta & celda.Value, _
            linktofile:=msoFalse, savewithdocument:=msoCTrue, _
            Left:=0, Top:=0, Width:=-1, Height:=-1)
       
 


donde vemos configurados los tres parámetros importantes:
Filename:=Ruta & celda.Value: donde indicamos la ubicación de la imagen a importar.
linktofile:=msoFalse: donde decimos que NO deseamos exista un vínculo con la ubicación del fichero
y
savewithdocument:=msoCTrue: donde controlamos y exigimos la imagen quede guardad con el Libro de trabajo.

En definitiva conseguimos la acción buscada, hemos importado la imagen sin vínculo!!; y por tanto no se perderá aunque la ubicación, ruta o fichero desaparezca o cambie...

VBA: El método .AddPicture para incorporar imágenes en Excel.

martes, 10 de mayo de 2016

VBA: Listar valores repetidos en diferentes columnas.

Contestando la cuestión planteada por un lector respecto a la búsqueda de elementos repetidos dentro de un rango de celdas, distribuidos en varias columnas...
Tengo 4 columnas con nombres de personas y quiero extraer los nombres que se repiten 3 o más veces en todas las columnas…[]

Mi primera idea fue plantear la solución con funciones, pero la descarte por la complejidad de la fórmula. Por ese motivo emplee el siguiente código.


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:

Sub Comparacion()
Dim Matriz() As String
Dim num As Long
'Creamos una colección con los elementos únicos
'para después proceder a su conteo y poder desestimar aquellos que no verifiquen
'las condiciones deseadas...
'(en nuestro caso, que se repitan más de tres veces)

Set Rng = Range("A1:D6")
'Generamos la colección
Set unicos = New Collection
'loop en todas las celdas y agregarlas a la coleccion
For Each celda In Rng
    'cuando encuentre un item repetido, daría un error
    'que salvamos con la instrucción On Error Resume Next
    On Error Resume Next
    'por tanto, nuestra coleccion solo agrega elementos no repetidos
    unicos.Add celda.Value, CStr(celda.Value)
    On Error GoTo 0
Next celda

'Preparamos una última matriz con los elementos repetidos
num = Int(unicos.Count)
ReDim Matriz(1 To num) As String
'y procedemos a la carga de la matriz
'de aquellos elementos repetidos más de tres veces
x = 1
For m = 1 To unicos.Count
    If WorksheetFunction.CountIf(Rng, unicos(m)) >= 3 Then
        Matriz(x) = unicos(m)
        x = x + 1
    End If
Next m

'Retornamos los elementos repetidos a la Hoja de cálculo
Range("F1:F" & num).Value = Application.Transpose(Matriz)
End Sub



La idea de la macro de Excel es sencilla, y ya empleada en alguna otra ocasión.
Identificamos una Collection con los nombres únicos de todo el rango, para a continuación ir realizando un conteo con la función COUNTIF (CONTAR.SI), y condicionar su aparición en nuestro listado final al número de veces que se repita.
Aquellos nombres repetidos más de tres veces los cargamos en una Array, desde donde finalmente lo llevamos a la hoja de cálculo.


En la imagen siguiente se ve el efecto final:

VBA: Listar valores repetidos en diferentes columnas.


jueves, 5 de mayo de 2016

Método Rápido para Pegar como Valores en Excel.

En una reciente formación un alumno me preguntaba por el método abreviado de la opción de Pegado Especial Como Valores, y mi respuesta fue contundente NO EXISTE...
al menos no como método abreviado al uso, sin embargo hay una posibilidad muy ágil, rápida y simple que vamos a ver hoy.


Recuerda que, estrictamente hablando, un método abreviado es una combinación de teclas que ejecutan una acción, habilitan una herramienta, etc.
Lo que voy a explicar no es un método abreviado pero sí un método rápido para Pegar Como Valores, y lo haremos empleando una tecla casi desconocida: La Tecla de Menú Contextual.

Probablemente te estés pregunta qué tecla es esa... y qué hace o para qué sirve.

la tecla en cuestión suele estar a la derecha de la Tecla ALT GR (alternativa gráfica), dependiendo de los teclados:

Método Rápido para Pegar como Valores en Excel.


Una vista ampliada de la Tecla de Menú Contextual:

Método Rápido para Pegar como Valores en Excel.



Para qué sirve/qué hace este Tecla... pues con ese nombre parece claro, despliega el Menú Contextual sobre lo que tengamos activo, esto es, hace lo mismo que presionar el botón derecho del ratón.

Y la última cuestión del post: Cómo la voy a utilizar.
Tras realizar un copiado de un rango de celdas (con Ctrl+C, por ejemplo), podemos pegar como valores de manera muy sencilla, presionando la Tecla de Menú Contextual y a continuación la letra V, es decir:
Tecla menú + V
y este es nuestro método rápido para pegar como valores.

Método Rápido para Pegar como Valores en Excel.

martes, 3 de mayo de 2016

Curso Avanzado Excel Presencial Madrid 20 horas

¿Vives en Madrid?, ¿Te interesa la mejor formación en Excel presencial?.
Curso Presencial Excel Avanzado en Madrid con una duración de 20 horas...

INICIO: lunes 23 de Mayo de 2016
PRECIO: 249,00 euros
FECHAS: Lunes 23 Mayo 2016 a Viernes 3 Junio 2016.
HORARIO: 19:00 - 21:00 (de lunes a viernes)
PROFESOR: Ismael Romero (Experto en Excel y Microsoft MVP Excel 2014,2015 y 2016)
LUGAR: C/ Marqués de Ahumada, 7 28.028 Madrid
-----------------------PLAZAS LIMITADAS!!!---------------------------------
MATRÍCULA: Hasta el viernes 13 de mayo de 2016.

OBJETIVOS: Dominar las herramientas y utilidades avanzadas de Excel, tales como insertar y trabajar con diferentes tipos de datos, crear fórmulas y funciones, matriciales, trabajar con rangos, nombres definidos, insertar tablas, trabajar con bases de datos, tablas dinámicas..

¡¡¡Plazas limitadas a 10 alumnos!!!

Infórmate en
cursos@excelforo.com o aquí
Excel Avanzado Presencial Madrid.


... y por supuesto la mejor formación elearning(online).
Haz de Excel tu mejor aliado!
Aprende con los mejores y adquiere una buena base: Edición de Cursos de Excel y Macros online con tutor personal de Mayo de 2015.
Nunca estudiar fue tan fácil.


Los cursos de Excel y Macros abiertos para este mes de Mayo son:

Curso Excel Avanzado

(ver más)

Curso Macros Medio

(ver más)



Curso Macros Iniciación

(ver más)

Curso Excel Nivel Medio

(ver más)


Curso Tablas dinámicas en Excel

(ver más)

Curso preparación MOS Excel 2010 (Examen 77-882)

(ver más)


Curso Excel Financiero

(ver más)



Esta nueva edición de Cursos de Excel y macros en modalidad elearning (online) comienzan el día 1 de Mayo de 2016; y la matrícula estará abierta hasta el día 10.

Excelforo: con la confianza de siempre....estás a tiempo!!

También formación Excel a empresas. Explota los recursos a tu alcance (ver más).


Informarte sin compromiso en cursos@excelforo.com o directamente en www.excelforo.com.