6 febrero, 2025

CREAR UN GENERADOR DE PROCESOS CON SMART ART Y VBA

Una de las tareas más comunes en cualquier organización o institución, sea pública o privada, es detectar y definir cada uno de los procesos que suceden en su seno.

No es una tarea sencilla, de hecho suele ser muy compleja y laboriosa. El objetivo de este post no es explicar cómo se hace esta tarea (que es inevitablemente un proceso teórico y manual), una labor de investigación.

Sin embargo, una vez detectadas las etapas de un proceso debemos detallarlas y pasarlas a un documento, esto lo podemos hacer o bien escribiendo un texto o bien incluir la información en un gráfico o una forma. Lo más habitual es abrir un PowerPoint y comenzar a escribir e insertar gráficos e ir rellenándolos.

Y para esa parte de la presentación de los datos es para la que este post resultará de interés y utilidad 🙂

Voy a utilizar un ejemplo para ilustrar el ejercicio (que no será un proceso organizacional), y he elegido las fases con las que cuenta el proceso de compra de una vivienda, la información la he obtenido de está web: El proceso de compra de una vivienda. Estas son las fases:

crear-generador-de-procesos

Ahora que tenemos cada una de las fases de compra ya podemos trabajar en nuestro código para generar nuestro gráfico de procesos.

Antes de mostrar el resultado, os dejo el código:

Sub GENERA_PROCESO()
Dim Diseño As SmartArtLayout
Dim Shape As Excel.Shape
Dim oNodos As SmartArtNodes
Dim i As Integer, Fin As Integer
Dim Cuenta As Integer
With Sheets("PROCESO1")
.Select
For Each Shape In .Shapes
Shape.Delete
Next
'Insertamos gráfico smartart
Set Diseño = Application.SmartArtLayouts("urn:microsoft.com/office/officeart/2005/8/layout/bProcess3")
Set inserta = .Shapes.AddSmartArt(Diseño)
Set oNodos = inserta.SmartArt.AllNodes
Fin = Application.CountA(Sheets(1).Range("A:A"))
'Generamos los nodos necesarios para mostrar la información
Do While oNodos.Count < Fin
oNodos.Add.AddNode
Loop
'Incluimos la informacion de la hoja1 en cada uno de los nodos
For i = 2 To Fin
With oNodos(i)
.TextFrame2.TextRange.Text = Sheets(1).Range("A" & i) & " " & Sheets(1).Range("B" & i)
.Shapes.Item(1).TextEffect.FontBold = msoTrue
End With
Next
'Aplicamos un color definido
For Each Shape In .Shapes
Shape.SmartArt.Color = Application.SmartArtColors("urn:microsoft.com/office/officeart/2005/8/colors/accent1_1")
'eliminamos el Nodo 1, que se corresponde con la información del cabecero de la hoja1
oNodos(1).Delete
Next
'Ajustamos y eliminamos nodos vacíos
Cuenta = oNodos.Count
If Fin <= Cuenta Then
For i = Cuenta To Fin Step -1
oNodos(i).Delete
Next
End If
'Dimensionamos el gráfico
With .Shapes(1)
.Height = 270 'Alto
.Width = 620 'Ancho
End With
End With
End Sub

Una vez que hemos ejecutado el código, este es el resultado:

crear-generador-de-procesos1

Para dar estilos rápidos y colores, os dejo el siguiente post donde explico la forma de obtener los nombres e ID’s de los estilos: OBTENER NOMBRE E ID DE LOS DISEÑOS, COLORES Y ESTILOS RÁPIDOS DE SMARTART PARA VBA

De esta forma tendremos una herramienta muy útil para generar gráficos (y podemos configurarla según nuestras preferencias).

* Válido para excel 2010, 2013 y 2016 (no funciona en versiones anteriores, dado que Smart Art todavía no se había implementado).

Descarga el archivo de ejemplo pulsando en: CREAR UN GENERADOR DE PROCESOS CON SMART ART Y VBA

 

Comparte este post

Un comentario en «CREAR UN GENERADOR DE PROCESOS CON SMART ART Y VBA»

  1. Muy útil e interesante, tengo una consulta : Como se podría agregar un proceso de decisión , en el cual se tenga dos caminos a seguir dependiendo si la decisión es una u otra. Quedo atento a su respuesta deseándole el mayor de los éxitos.

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies