Quisiera saber como realizar un Macro para un Inventario

Tengo un inventario en la Hoja 1 y quiero que cuando en la columna "i" se escriba VCont la fila completa se pegue en la hoja Ventas de Contado, cuando en la columna "i" se escriba VCred la fila completa se pegue en la hoja Ventas a Credito y estos desaparezcan de la hoja 1. Quiero que estos datos se peguen debajo de los datos que ya se encuentren en dicha hoja.

3 Respuestas

Respuesta
1

[Hola 

Envíame tu archivo [email protected] y me explicas con tus datos y en otra hoja el resultado esperado

Respuesta
1

Pon la siguiente macro en los eventos de tu hoja

Private Sub Worksheet_Change(ByVal Target As Range)
'Copiar el registro
    If Not Intersect(Target, Columns("I")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        '
        Select Case LCase(Target.Value)
            Case LCase("VCont"): Set h2 = Sheets("Ventas de Contado")
            Case LCase("VCred"): Set h2 = Sheets("Ventas a Credito")
            Case Else
                MsgBox "Valor incorrecto"
                Target.Select
                Exit Sub
        End Select
        Application.ScreenUpdating = False
        u = h2.Range("I" & Rows.Count).End(xlUp).Row + 1
        Rows(Target.Row).Copy
        h2.Rows(u).PasteSpecial xlValues
        Rows(Target.Row).ClearContents
        Application.CutCopyMode = False
        MsgBox "Registro copiado"
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro


.

.

Buenas tardes,  

Que pena molestar tanto será posible enviarte mi archivo? 

Mi caso es muy similar a este Pasar Filas de una Hoja a Otra Quiero pasar las filas que tenga dichas condiciones con fórmulas y demás.

¿Qué problema tiene la macro?

O qué necesitas, podrías explicarlo con tus palabras y con ejemplos.

Me sale error 424. Quiero que las filas donde en la Columna H aparezca Vcont se transfieran a la hoja Ventas de Contado. Estas filas deben transferirse con la fórmula que aparece en la columna G y que se borren de la hoja 1, es como cortar y pegar la fila en la hoja indicada. Quiero que las filas donde en la Columna H aparezca Vcred se transfieran a la hoja Ventas a Crédito Quiero que las filas donde en la Columna H aparezca en blanco se conserven en la página Inventario. Disculpe mi poco entendimiento pero hasta ahora aprendo a usar macros y no soy muy buena en ello. De antemano mil gracias por su colaboración y su tiempo

Este es mi caso

En tu pregunta original pusiste esto:

Y quiero que cuando en la columna "i"

Pero en la imagen veo que los datos están en la columna "H"

No es necesario que sepas de macros, yo te ayudo con esa parte, lo que sí sabes es en dónde están tus datos y qué necesitas.


Quita la primera macro que te envié.

Ejecuta la siguiente macro

Sub Copiar_Registros()
'Copiar el registro
    Application.ScreenUpdating = False
    Set h1 = ActiveSheet
    col = "H"
    u1 = h1.Range(col & Rows.Count).End(xlUp).Row
    For i = u1 To 1 Step -1
        existe = True
        valor = h1.Cells(i, col).Value
        Select Case LCase(valor)
            Case LCase("VCont"): Set h2 = Sheets("Ventas de Contado")
            Case LCase("VCred"): Set h2 = Sheets("Ventas a Credito")
            Case Else: existe = False
        End Select
        If existe Then
            u2 = h2.Range(col & Rows.Count).End(xlUp).Row + 1
            h1.Rows(i).Copy h2.Rows(u2)
            h1.Rows(i).Delete
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Copiar_Registros
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

sal u dos

¡Gracias! Muchas gracias, de verdad. Un saludo enorme desde Colombia

Señor Dante que pena molestarlo de nuevo, el macro corre perfecto solo que deseo que los datos de las fila solo se pasen de A4 A H4 a la hoja correspondiente, si ejecuto el macro me copia toda la fila y me borra las celdas adyacentes que se encuentran en la otra hoja. No se si me haga entender. De antemanos, nuevamente muchas gracias por compartir su conocimiento

No te preocupes no es molestia.

Pero esto es lo que escribiste:

La fila completa se pegue en la hoja

Y estos desaparezcan de la hoja 1

Entonces ya no sé qué necesitas :(


Lo intento nuevamente.

Prueba con lo siguiente:

Sub Copiar_Registros()
'Copiar el registro
    Application.ScreenUpdating = False
    Set h1 = ActiveSheet
    col = "H"
    u1 = h1.Range(col & Rows.Count).End(xlUp).Row
    For i = u1 To 4 Step -1
        existe = True
        valor = h1.Cells(i, col).Value
        Select Case LCase(valor)
            Case LCase("VCont"): Set h2 = Sheets("Ventas de Contado")
            Case LCase("VCred"): Set h2 = Sheets("Ventas a Credito")
            Case Else: existe = False
        End Select
        If existe Then
            u2 = h2.Range(col & Rows.Count).End(xlUp).Row + 1
            h1.Range("A" & i & ":H" & i).Copy h2.Range("A" & u2)
            h1.Range("A" & i & ":H" & i).ClearContents
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Pero supongo que tienes fórmulas en la fila y no quieres borrar las fórmulas, entonces solamente quieres borrar algunas celdas. Pero estoy tratando de adivinar.

Mejor explica paso a paso qué quieres hacer, qué quieres copiar en dónde lo quieres pegar y luego exactamente qué quieres borrar.

Discúlpeme por no hacerme entender desde un principio, el ultimo código hace justamente lo que necesito. Nuevamente, muchas gracias. 

No te preocupes, me da gusto que ya funciona tal y como lo necesitabas.

Buenos días Sr Dante, disculpe por molestarlo nuevamente, el macro me ha funcionado, pero quisiera agregarle algo más ya qué el archivo que tenemos del inventario no solo lo manejo yo, en que parte del código puedo agregar un mensaje de verificación para que no se vaya a enviar la fila incorrecta. Que aparezca algo como esta seguro de qué desea enviar la fila seleccionada SI NO Y CANCELAR y según la respuesta se haga la corrección o se ejecute la acción 

Así quedaría

Sub Copiar_Registros()
'Copiar el registro
    Application.ScreenUpdating = False
    Set h1 = ActiveSheet
    col = "H"
    u1 = h1.Range(col & Rows.Count).End(xlUp).Row
    For i = u1 To 4 Step -1
        existe = True
        valor = h1.Cells(i, col).Value
        Select Case LCase(valor)
            Case LCase("VCont"): Set h2 = Sheets("Ventas de Contado")
            Case LCase("VCred"): Set h2 = Sheets("Ventas a Credito")
            Case Else: existe = False
        End Select
        If existe Then
            res = MsgBox("Está seguro de enviar la fila : " & i, vbYesNo, "COPIAR FILA")
            If res = vbYes Then
                u2 = h2.Range(col & Rows.Count).End(xlUp).Row + 1
                h1.Range("A" & i & ":H" & i).Copy h2.Range("A" & u2)
                h1.Range("A" & i & ":H" & i).ClearContents
            End If
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

sal u dos

¡Gracias! Muchas gracias. 

Sr. Dante vuelvo a molestarlo, hice una modificación del código para poder usarlo en otra hoja de mi excel para hacer retornos de los registros pero  tengo un problema, se devuelve a la primera fila de la otra hoja y no debajo de los otros registros, sabe que parte puedo modificar. Muchas gracias.

Sub Retorno_Registros()
'Copiar el registro
    Application.ScreenUpdating = False
    Set h1 = ActiveSheet
    col = "R"
    u1 = h1.Range(col & Rows.Count).End(xlUp).Row
    For i = u1 To 4 Step -1
        existe = True
        valor = h1.Cells(i, col).Value
        Select Case LCase(valor)
            Case LCase("R"): Set h2 = Sheets("Fernando Andrade")
            Case Else: existe = False
        End Select
        If existe Then
            res = MsgBox("Está seguro de enviar la fila : " & i, vbYesNo, "COPIAR FILA")
            If res = vbYes Then
                u2 = h2.Range(col & Rows.Count).End(xlUp).Row + 1
                h1.Range("A" & i & ":R" & i).Copy h2.Range("A" & u2)
                h1.Range("A" & i & ":R" & i).Delete
            End If
        End If
    Next
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

En la macro anterior se validaba el dato "Vcont" en la columna "H"

¿Ahora qué dato quieres validar y en cuál columna se encuentra?

No es ninguna molestia, pero podrías abrir una nueva pregunta, en el desarrollo de la pregunta escribe: "Para Dante Amor" y la reviso.

Respuesta
1

Esto te puede dar una idea y saques alguna utilidad

https://youtu.be/gqZzSfikEYY

https://youtu.be/smL4A-aRjCM

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas