Volcado de información de formularios en distintas hojas excel según una condición. [Macro] [Código]

Tengo un excel con distintas pestañas. En una de ellas, he creado un formulario en el cuál yo relleno información, una vez rellenos los campos le doy a un botón de Guardar y la información ingresada se almacena en una serie de pestañas. (Esto es lo que necesito que haga, todavía no lo he conseguido)

Es un típico formulario que almacena información básicamente.

Me surgen una duda que debido a mi nivel de principiante no consigo resolver:

1) El problema me surge cuando, la información que vuelca el formulario una vez que doy al botón de aceptar debe volcarse en distintas hojas del libro excel en función de una condición:

Si el primer campo que relleno del formulario, coincide con el nombre de la pestaña, quiero que automáticamente vuelque esa información en dicha pestaña.

Ejemplo:

El primer campo de mi formulario es "Zona", si yo elijo "España", relleno los demás campos y al darle al botón Guardar, que es la que ejecuta la futura macro, esa información quiero que se vuelque en la hoja "España" y no en ninguna otra.

Tengo 6 zonas distintas.

Respuesta
2

Entiendo que todo lo que tengas en una hoja formulario lo deseas pasar a otras dependiendo del valor que tenga cierta celda. No indicas dónde tendrás el campo ZONA, imaginaré que es C1

Entonces, el botón Guardar debe establecer primero la hoja destino y luego se hará el pase (algo como en las líneas de ejemplo). Allí se antepone la hoja que declaré como 'hox'.

Sub Guardar()
'x Elsamatilde
'se asigna hoja destino
Set hox = Sheets([C1])
'1° fila destino según col A
x = hox.Range("A" & Rows.Count).End(xlUp).Row
'x ej, se pasa el contenido de B3 en col A de hoja destino
hox.Range("A" & x) = [B3]
'x ej, se pasa un rango solo como valores
Range("R2:R" & Range("R" & Rows.Count).End(xlUp).Row).Copy
hox.Range("B" & x).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'todas las instrucciones de pase
End Sub

Las líneas de pase son solo a modo de ejemplo. Si necesitas más ayuda en esta parte debes dejar imagen de tu hoja formulario e indicar en cuál columna de hoja destino se volcará cada campo.

Buenas tardes Elsa,

A ver si me explico mejor, perdóname. 

Tengo una hoja, en la cual se encuentra el formulario que yo quiero rellenar, dichos campos están delimitados por una validación de datos. 

Uno de esos campos es "Zona" en la cual el formulario elige entre: 

RCIS, Europa Latam, Oriente Medio, Norte Africa y Africa Subsahariana

Este es el formulario:

Una vez que yo lo tenga rellenado y le dé a guardar. 

La información tiene que guardarse en una serie de pestañas, las cuales, cada una tiene el nombre del parámetro del formulario "Zona"

Estas son las pestañas:

Cada pestaña que se refiere a una de las 5 zonas tiene la misma estructura:

Y coincide con los parámetros a rellenar del formulario.

Entonces lo que quiero es que, una vez relleno el formulario, se almacene en la pestaña que coincida con la zona que he marcado en el formulario y no en las otras.

Un saludo y muchas gracias por tu tiempo, la ayuda es increíble.

Reitero la macro enviada.. por favor lee las líneas de comentarios para poder ajustar a tu modelo de hoja.

Aquí ajusto algunas según tu muestra:

Sub Guardar()
'x Elsamatilde
'se asigna hoja destino
Set hox = Sheets([C2])        'esta si el valor seleccionado en C2 coincide con el nombre de hoja, sino comenta.

Luego el pase irá a cada columna, aquí solo de ejemplo las 2 primeras:

'x ej, se pasa el contenido de C2 y C4 en col A y B de hoja destino
hox.Range("A" & x) = [C2]
hox.Range("B" & x) = [C4]
'y así con cada col destino

Sdos!

1 respuesta más de otro experto

Respuesta
2

Puedes poner las celdas de cada campo de tu "formulario"

Y también me dices cuál celda va en cuál columna de la hoja destino.

Por ejemplo:

Hoja formulario celda B4 (campo zona) hoja destino columna A

Hoja formulario celda B5 (campo Región) hoja destino columna B

Hoja formulario celda C7 (campo Fecha) hoja destino columna C

Y así con todos los campos que tengas.


Si el dato que pusiste en el campo Zona no tiene hoja, ¿qué debe hacer la macro?

Hola Dante,

Gracias por tu interés y rapidez, sucede lo siguiente:

Tengo una serie de campos en el formulario

Zona, País, Ciudad, Teléfono....etc 

Cada campo del formulario está delimitado por el formulario, son contestaciones fijas, no puedes escribir lo que quieras.

Entonces, cada formulario que rellene va a tener una zona distinta. Y lo que quiero es que si pongo:

Europa, España, Madrid,...etc 

Al darle al boton de guardar y ejecutar la macro, esa fila se me rellene en la Hoja que se llama "Europa"

Espero haberme explicado bien.

Un saludo,

Puedes explicarlo con imágenes, procura que en las imágenes se vean las filas y las columnas de excel

Hola Dante,

te Adjunto el formulario, y las hojas: 

1) En C2 se rellena con la Zona

2) Zona puede ser: RCIS, Europa Latam, Oriente Medio, Norte Africa y Africa Subsahariana

Cada zona tiene una hoja dentro del libro.

Entonces lo que necesito es como puedo codificar la macro para que, si en C2 pongo RCIS, directamente ese formulario vuelque la información en la pestaña "RCIS" y no en las demás.

Necesito hacer que la macro consiga distinguir donde almacenar la información dependiendo de la zona que elija.

Así es de simple la explicación que se necesita:

Hoja formulario celda C2 (campo zona) hoja destino columna A

Hoja formulario celda C3 (campo Country) hoja destino columna Q

Hoja formulario celda C4 (campo Call Center) hoja destino columna B

Hoja formulario celda etc (campo etc) hoja destino columna etc

Según tus imágenes el campo Country que capturas en la celda C3 va en la columna Q, ¿es correcto?

Revisa bien cuál celda del formulario, va en cuál columna de la hoja destino y me comentas si hay cambios.


Y esta es la macro:

Sub Guardar_Datos()
'Por Dante Amor
    '
    'VALIDACIONES
    Set h1 = ActiveSheet
    zona = h1.Range("C2").Value
    If zona = "" Then
        MsgBox "Falta completar el campo zona"
        Exit Sub
    End If
    existe = False
    For Each h In Sheets
        If LCase(h.Name) = LCase(zona) Then
            existe = True
            Exit For
        End If
    Next
    If existe = False Then
        MsgBox "El nombre de la zona no tiene una hoja con el mismo nombre"
        Exit Sub
    End If
    '
    Set h2 = Sheets(zona)
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    h2.Cells(u2, "A").Value = h1.Range("C2")    'zona
    h2.Cells(u2, "B").Value = h1.Range("C4")    'call center
    h2.Cells(u2, "C").Value = h1.Range("C5")    'phone
    h2.Cells(u2, "D").Value = h1.Range("C6")    'no. attempt
    h2.Cells(u2, "E").Value = h1.Range("C8")    'date
    h2.Cells(u2, "F").Value = h1.Range("C9")    'local time
    h2.Cells(u2, "G").Value = h1.Range("C10")   'spanish time
    h2.Cells(u2, "H").Value = h1.Range("C11")   'waiting
    h2.Cells(u2, "I").Value = h1.Range("C12")   'calling time
    h2.Cells(u2, "Q").Value = h1.Range("C3")    'country
    '
    MsgBox "Datos guardados", vbInformation, "FORMULARIO"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas