VBA MACROS - Excel insertar fila con más de una condición

Tengo una hoja de formulario y en otra hoja donde se rellena con los datos de este formulario, para ello requiero que los datos de la hoja formulario se inserte una nueva fila hacia abajo en la otra hoja(ingreso datos) desde la columna A, fila 5 hasta la fila infinito (ir rellenando) hasta la columna H, cumpliendo con la condición que el dato inscrito del formulario como recursos y gerencia sea igual que el de la columna DE ej: recursos = recursos y gerencia = gerencia, además que la fila nueva inscrita se inserte en la penúltima fila ya creada con el valor recursos o gerencia.

1 respuesta

Respuesta
2

Recibida la muestra. Veré si puedo ocuparme.

Sdos!

¡Muchas Gracias Elsa! 

Adjunto macro que responde al ejemplo enviado. Observo que el contenido de celda D12 no se condice con lo que presenta la col H en los registros ya guardados... revisa esa línea.

Sub INGRESAR()
'x Elsamatilde
'
'hoja destino
Set hod = Sheets("GGEC-R-001 E200")
'hoja con el formulario (si el botón está en esa hoja no hace falta seleccionarla)
Sheets("Ingreso Nuevo Contrato").Select
sino = MsgBox("¿Confirmas guardar este registro?", vbQuestion + vbYesNo, "CONFIRMAR")
If sino <> vbYes Then MsgBox "Proceso cancelado.": Exit Sub
'se guarda la última fila ocupada en hoja destino
x = hod.Range("A" & Rows.Count).End(xlUp).Row + 1
'se busca el 1er registro de = gerencia
Set busco = hod.Range("D:D").Find([D8], LookIn:=xlValues, lookat:=xlWhole)
'si no encuentra el registro se agrega al final
If busco Is Nothing Then
    'se agrega fila al final
    hod.Range("A" & x).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Else
    'a partir del registro encontrado se busca la última entrada
    y = busco.Row + 1
    While hod.Range("D" & y) = [D8]
        y = y + 1
    Wend
    'aquí debe ser insertada la fila
    hod.Range("A" & y).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    x = y 'para utilizar la misma variable en instrucciones de pase
End If
'se pasan los datos... observar que no es necesario seleccionar para pasar
hod.Range("A" & x) = [D5]
hod.Range("B" & x) = [D6]
hod.Range("C" & x) = [D7]
hod.Range("D" & x) = [D8]
hod.Range("E" & x) = [D9]
hod.Range("F" & x) = [D10]
hod.Range("G" & x) = [D11]
hod.Range("H" & x) = [D12]
'opcional: borrar el formulario para un nuevo pase o enviar un mensaje
'[D5:D12].ClearContents
[D5].Select
MsgBox "Datos guardados."
End Sub

Siempre es conveniente agregar un mensaje de confirmación antes de pasar datos que necesitan insertar filas.

PD) Te estoy devolviendo el libro para que observes cómo debes dejar la fila de totales.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas