Como optimizar la entrada de datos del userForm a la hoja de calculo.

y feliz año;

-Mi pregunta es la siguiente

Tengo un formulario "form_Recuento" donde voy añadiendo artículos recontados y estos los voy pasando a las hojas "Recuento" y "Existencias". A medida que el número de registros aumenta tarda mas en registrarlos en dichas hojas.

Este es el código que tengo para el registro.

Saludos y lo dicho feliz año a todos.

Private Sub Registro_Click()
Dim fila As Integer
Dim Final As Integer
Dim ExistenciaRE As Integer
Dim TotalRE As Integer
Dim Comprb As Long
txt_Zona.Enabled = False
Hoja7.Range("A2").Value = Hoja7.Range("A2").Value + 1
Comprb = Hoja7.Range("A2").Value
    For fila = 2 To 9000
        If Hoja14.Cells(fila, 1) = "" Then
            Final = fila
            Exit For
        End If
    Next
        Hoja14.Cells(Final, 1) = "RcE-" & Comprb
        Hoja14.Cells(Final, 2) = Me.txt_FechaIng
        Hoja14.Cells(Final, 3) = Me.txt_Hora
        Hoja14.Cells(Final, 4) = Val(Me.ComboBox1)
        Hoja14.Cells(Final, 5) = Me.txt_Codigo
        Hoja14.Cells(Final, 6) = Me.txt_Nombre
        Hoja14.Cells(Final, 7) = Me.txt_Color
        Hoja14.Cells(Final, 8) = Val(Me.txt_Cantidad)
        Hoja14.Cells(Final, 9) = Hoja8.Range("G1") 'usuario
        Hoja14.Cells(Final, 10) = Me.txt_Zona
        Hoja14.Cells(Final, 11) = Hoja12.Range("C8") 'Delegaci?n
    For fila = 2 To 9000
        If Hoja16.Cells(fila, 1) = Hoja14.Cells(Final, 4) Then
            ExistenciaRE = Hoja16.Cells(fila, 7)
            TotalRE = Me.txt_Cantidad + ExistenciaRE
            Hoja16.Cells(fila, 7) = TotalRE
            Exit For
        End If
    Next
        Me.ComboBox1 = ""
        Me.txt_Nombre = ""
        Me.txt_FechaIng = ""
        Me.txt_Hora = ""
        Me.txt_Cantidad = ""
ComboBox1.SetFocus
End Sub

1 respuesta

Respuesta
1

[Hola 

prueba así

Private Sub Registro_Click()
    Application.ScreenUpdating = False
    '
    Dim fila As Integer
    Dim Final As Integer
    Dim ExistenciaRE As Integer
    Dim TotalRE As Integer
    Dim Comprb As Long
    txt_Zona.Enabled = False
    Hoja7.Range("A2").Value = Hoja7.Range("A2").Value + 1
    Comprb = Hoja7.Range("A2").Value
    '
    Final = Hoja14.Range("A" & Rows.Count).End(xlUp).Row + 1
            Hoja14.Cells(Final, 1) = "RcE-" & Comprb
            Hoja14.Cells(Final, 2) = Me.txt_FechaIng
            Hoja14.Cells(Final, 3) = Me.txt_Hora
            Hoja14.Cells(Final, 4) = Val(Me.ComboBox1)
            Hoja14.Cells(Final, 5) = Me.txt_Codigo
            Hoja14.Cells(Final, 6) = Me.txt_Nombre
            Hoja14.Cells(Final, 7) = Me.txt_Color
            Hoja14.Cells(Final, 8) = Val(Me.txt_Cantidad)
            Hoja14.Cells(Final, 9) = Hoja8.Range("G1") 'usuario
            Hoja14.Cells(Final, 10) = Me.txt_Zona
            Hoja14.Cells(Final, 11) = Hoja12.Range("C8") 'Delegaci?n
        Set r = Hoja16.Range("A:A")
        For i = 1 To Hoja16.Range("G" & Rows.Count).End(xlUp).Row
            Set b = r.Find(Me.ComboBox1)
            If Not b Is Nothing Then
                Hoja16.Cells(i, 7) = Hoja16.Cells(i, 7) + Me.txt_Cantidad
            End If
        Next
            Me.ComboBox1 = ""
            Me.txt_Nombre = ""
            Me.txt_FechaIng = ""
            Me.txt_Hora = ""
            Me.txt_Cantidad = ""
            ComboBox1.SetFocus
    Application.ScreenUpdating = True
    MsgBox "fin"
End Sub

¡Gracias! , He probado y no me funcionaba, me dada error con el Set, deshabilite Opción explicit y después iba, pero no hace bien las operaciones ya que al dar de alta un código en el formulario de entradas le pone esa cantidad a toda la fila de existencias "Hoja16" y si vuelvo hacer otra entrada suma otra vez la cantidad anterior con la última registrada. 

En el código anterior que envíe, al registrar una entrada envía a la "Hoja14" y al final, pero en la "Hoja16" que es la de existencias actualiza la cantidad en la fila. 

Te explico mejor, las entradas son siempre registros nuevos pero la hoja de existencias ya está creada. Puedo tener varias entradas de un artículo.

Gracias y feliz año.

[hola 

cambia esta línea 

 Hoja16.Cells(i, 7) = Hoja16.Cells(i, 7) + Me.txt_Cantidad

por esto

Hoja16.Cells(b.Row, 7) = Hoja16.Cells(b.Row, 7) + Me.txt_Cantidad

Buenas tardes; 

-He probado la corrección segunda y la cantidad la pone bien en la "Hoja16" existencias pero el calculo me lo da mal. Al anotar 1 en cantidad me da como resultado 8436 y si anoto por ejemplo 2 me da 16872. También me aparece una línea discontinua ente la columna E y F.

Adjunto foto a ver si te da alguna pista.

Por cierto en el primer código que me has enviado ¿has puesto las variables con un apostrofe ' ?

Yo las he quitado.

Gracias y disculpa por el trabajo que te estoy dando.

Enviame tu archivo [email protected] y revisarlo

Hola, he enviado el archivo, si no llegó avisa y lo reenvío.

Saludos.

Macro actualizado

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim fila As Integer
Dim Final As Integer
Dim ExistenciaRE As Integer
Dim TotalRE As Integer
Dim Comprb As Long
Hoja7.Range("A2").Value = Hoja7.Range("A2").Value + 1
Comprb = Hoja7.Range("A2").Value
Final = Hoja14.Range("A" & Rows.Count).End(xlUp).Row + 1
        Hoja14.Cells(Final, 1) = "RcE-" & Comprb
        Hoja14.Cells(Final, 2) = Me.txt_FechaIng
        Hoja14.Cells(Final, 3) = Me.txt_Hora
        Hoja14.Cells(Final, 4) = Val(Me.ComboBox1)
        Hoja14.Cells(Final, 5) = Me.txt_Codigo
        Hoja14.Cells(Final, 6) = Me.txt_Nombre
        Hoja14.Cells(Final, 7) = Me.txt_Color
        Hoja14.Cells(Final, 8) = Val(Me.txt_Cantidad)
        Hoja14.Cells(Final, 9) = Hoja8.Range("G1") 'usuario
        Hoja14.Cells(Final, 10) = Me.txt_Zona
        Hoja14.Cells(Final, 11) = Hoja12.Range("C8") 'Delegación
        '
        Set r = Hoja16.Range("A:A")
        Set b = r.Find(Me.ComboBox1)
        If Not b Is Nothing Then
            Hoja16.Cells(b.Row, 7) = Hoja16.Cells(b.Row, 7) + Me.txt_Cantidad
        End If
        Me.ComboBox1 = ""
        Me.txt_Nombre = ""
        Me.txt_FechaIng = ""
        Me.txt_Hora = ""
        Me.txt_Cantidad = ""
ComboBox1.SetFocus
Application.ScreenUpdating = True
MsgBox "fin"
End Sub

Hola Adriel;

-Una duda, ¿cuando empezaste generando entradas, te guardó dicho registro en la Hoja14 "ERcuento" en la primera línea "A5"?. 

Te digo esto porque la tabla tiene formato y se llama "tbl_EntradasRecuento".

-Yo he eliminado los registros tuyos y al generar uno nuevo me lo genera a partir de la línea "A6" .

Muchas gracias y perdona por darte de nuevo la lata.

Ya eliminaste los datos también elimina las filas ..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas