Hace un rato, una seguidora de esta web me preguntaba si podía ayudarle con urgencia a crear una macro para copiar datos de un archivo a otro en Excel pero con una particularidad, que se creen automáticamente al camiar una celda en Excel. Vamos a por ello!
Organización del trabajo
Para crear una macro para copiar datos de un archivo a otro en Excel tenemos que ser muy cuidadosos y meticulosos si no queremos gastar medio día investigando todas las posiblidades. En este caso nos hemos organizado la información de la siguiente manera.
Tenemos la tabla que queremos copiar con los datos que se muestran en la siguiente imagen:
En la tabla queremos copiar lo que está dentro del recuadro en negro oscuro y para eso necesitamos que se haga automáticamente al cambiar el valor de la celda en negro.
Esta celda contiene un desplegable como el de la siguiente imagen que hace que los valores del recuadro en gris cambien. En este ejemplo sólo son números que cambian:
Este desplegable desencadena un evento (ver más sobre eventos en Excel) y este evento llama a la macro para copiar el rango recuadrado a otro libro nuevo de Excel.
Evento en Excel: ejecutar una macro cuando cambia una celda
El evento en cuestión debemos de escribirlo en la hoja de VBA en el editor de macros. Ojo, tiene que ser en la hoja en la que se encuentre la celda que al cambiar queremos que ejecute la macro para copiar datos de un archivo a otro en Excel.
El evento que necesitamos es el siguiente:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C5")) Is Nothing Then Exit Sub Call Copiar_en_otro_libro End Sub
En este evento se evalúa si la celda en cuestión cambia. En caso afirmativo, se llama a la macro Copiar_en_otro_libro mediante el método Call, en caso negativo se termina la macro. Para esta evaluación usaremos el método INTERSECT en VBA que comprueba si dos rangos tienen alguna celda en común.
Macro para copiar datos
La macro que vamos a crear es una macro muy sencilla que realiza los siguientes pasos:
- Dimensionar variables tipo libro
- Crear las variables
- Crear un nuevo libro de Excel
- Copiar el valor de los datos que queremos de un libro de Excel a otro.
La macro que vamos a usar es la siguiente:
Sub Copiar_en_otro_libro() Dim Libro_inicial, Libro_copia As Workbook Set Libro_inicial = ThisWorkbook Workbooks.Add Set Libro_copia = ActiveWorkbook Libro_copia.Sheets(1).Range("A1:L18") = _ Libro_inicial.Sheets(1).Range("B3:M21").Value End Sub
Un regalo
Estas explicaciones no son siempre fáciles de entender (ni de explicar!!) por eso os dejo en el siguiente enlace un archivo que podáis descargar para ver el código y sus funcionalidades: Ejemplo de cómo cambiar una hoja al cambiar una celda