Copiar datos a hojas según criterios Excel

Nuevamente solicitando su ayuda para la elaboración de un KARDEX que es para hacer las entradas como las salidas según los productos que estén en esta base de datos

Esta es la base de datos de todo un mes en la columna "C" están los productos, en la columna "D" tipo de movimiento si es entrada y salida, en la columna "E" la cantidad, en la columna "H" la fecha, en la columna "K", en la columna "F" tipo y "G" el tipo de documento

Este el formato de KARDEX para que sirva de modelo para crear las hojas de cada producto .

Por ejemplo en la lista hay un producto llamado ARROZ y que según este producto se cree una hoja con el nombre de este producto a partir del modelo y que se llenen los datos en nombre en la celda nombre de producto que seria la celda "B10" y que después los datos de los movimientos se carguen en la plantilla la fecha en la columna "A", la serie en la columna "B", numero de factura en la columna "D" y si el producto es una entrada en la columna "F" y si el producto es una salida en la columna "G" el detalle de que si el producto es una entrada o una salida esta en la hoja de la base de datos en la columna

Adicional a este las hojas tienen como numero máximo 40 celdas si los registros superan este numero que se cree una nueva hoja es posible esto?

Gracias por la atención prestada

Slds

Robert

1 Respuesta

Respuesta
2

H o l a:

Justamente tu ejemplo "Arroz" es un producto que no aparece en tu imagen. Podrías poner un ejemplo que si exista.

Y en la segunda imagen deberás poner ese ejemplo tal y como quieres que aparezca.

Hola Dante

adjunto la imagen para tener una mayor referencia

por ejemplo tengo una base de datos que puede tener hasta 5000 registros de varios productos de la cuales tengo el producto arroz  (en la base de datos hay mas 500 productos - solo he tomado como ejemplo el arroz) la consulta seria que busque el producto arroz y que se cree una hoja con el nombre del producto y que luego los datos que pertenecen a este producto se peguen en el siguiente orden en la hoja nueva creada  el nombre de producto en la celda "B10" y que después los datos de los movimientos se carguen en la plantilla la fecha en la columna "A", la serie en la columna "B", numero de factura en la columna "D" y si el producto es una entrada en la columna "F" y si el producto es una salida en la columna "G" el detalle de que si el producto es una entrada o una salida esta en la hoja de la base de datos en la columna

Adicional a este las hojas tienen como numero máximo 40 celdas si los registros superan este numero que se cree una nueva hoja es posible esto?

este es la forma como he estado trabajando con una macro que tengo pero el problema es que el producto puede tener mas de 40 registros y no me genera una nueva hoja este el ejemplo que he estado utilizando hasta ahora pero solicito de su ayuda para hacerlo mas rápido y practico

como puede ver hay una celda de color verde hay pego el código del producto de hay un botón que ejecuta la macro en la cual todos estos datos los pega en una hoja creada con el nombre del producto acá las entradas y las salidas están separadas en columnas diferentes es como lo estoy trabajando actualmente

este es el código que utilizo para ejecutar

 On Error Resume Next
    Dim dato As String
    dato = Range("C2").Value
    Range("a6:z" & Range("b65000").End(xlUp).Row).AutoFilter field:=6, Criteria1:=dato, Operator:=xlFilterValues
    'para mover la ficha al final
    Sheets("PRIN").Select
    Sheets("PRIN").Copy Before:=Sheets(1)
    Sheets("PRIN (2)").Move After:=Sheets(Sheets.Count)
'para copiar los datos filtrados
    Sheets("datos").Select
    Range("E7:E7273").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("PRIN (2)").Select
    Range("A17").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("datos").Select
    Range("B7:B7273").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("PRIN (2)").Select
    Range("B17").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'copiar el nombre del producto
    Sheets("datos").Select
    Range("C2").Select
    Selection.Copy
    Sheets("PRIN (2)").Select
    Range("C8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'para cambiar el nombre del producto con la variable de la celda
    Sheets("PRIN (2)").Select
    Dim oldname As String
    oldname = "PRIN (2)"
    Dim newname As String
    newname = Range("b10").Value
    Dim name As Worksheet
    Set sheet = Application.ActiveWorkbook.Worksheets(oldname)
    sheet.name = newname

gracias por la atención prestada

slds

Robert

Disculpa, pero sigo sin entender qué necesitas.

Tu ejemplo no está completo. Otra vez pusiste la hoja en blanco:

Me puedes explicar paso a paso.

1. A cuál hoja voy primero.

2. Qué hago en esa hoja.

3. Luego a cuál hoja voy...

Y así paso por paso me explicas, pero con un ejemplo.


También envíame tu archivo y en el archivo me explicas con comentarios y con colores lo que quieres hacer.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Robert Cordova” y el título de esta pregunta.

hola Dante ya le envié el archivo

Slds

Robert

H o l a:

Te anexo la macro.

Sub CrearHojas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    Set h2 = Sheets("PRIN")
    '
    h1.Columns("AA:AN").Clear
    u = h1.Range("B" & Rows.Count).End(xlUp).Row
    h1.Range("A3:N" & u).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=h1.Range("C1:C2"), CopyToRange:=h1.Range("AA3"), Unique:=False
    '
    u2 = h1.Range("AB" & Rows.Count).End(xlUp).Row
    If u2 = 3 Then
        MsgBox "No existen registros con esa referencia"
        Exit Sub
    End If
    '
    nombre = h1.Range("AC4")
    h2.Copy after:=Sheets(Sheets.Count)
    Set h3 = ActiveSheet
    h3.Name = nombre
    n = 2
    j = 0
    k = 16
    For i = 4 To u2
        If j = 40 Then
            h2.Copy after:=Sheets(Sheets.Count)
            Set h3 = ActiveSheet
            h3.Name = nombre & " " & n
            n = n + 1
            j = 1
            k = 16
        End If
        h3.Cells(k, "A") = h1.Cells(i, "AJ")
        h3.Cells(k, "B") = h1.Cells(i, "AF")
        h3.Cells(k, "C") = h1.Cells(i, "AG")
        h3.Cells(k, "D") = h1.Cells(i, "AH")
        'h3.Cells(k, "E") = h1.Cells(i, "AD")
        If h1.Cells(i, "AD") = "ENTRADAS" Then
            h3.Cells(k, "F") = h1.Cells(i, "AE")
        Else
            h3.Cells(k, "G") = h1.Cells(i, "AE")
        End If
        k = k + 1
        j = j + 1
    Next
    h1.Columns("AA:AN").Clear
    Application.ScreenUpdating = True
    MsgBox "Hojas Creadas"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas