Insertar dato al ejecutar código y se respete en todas las hojas

Tengo un código el cual necesito modificar

se trata del sig.

Sub ent_pro()

Application.ScreenUpdating = False
ActiveSheet.Unprotect
fec$ = Range("B5").Value
pro$ = Range("C5").Value
cant = Range("D5").Value
x = 0
Sheets("STOCK").Unprotect
Sheets("STOCK").Select
Range("B7").Select
While ActiveCell.Value <> ""
If ActiveCell.Value = pro$ Then
ActiveCell.Offset(0, 2).Select
ActiveCell.Value = ActiveCell.Value + cant
ActiveCell.Offset(0, 2).Select
ActiveCell.Value = fec$
x = 1
ActiveCell.Offset(0, -4).Select
End If
ActiveCell.Offset(1, 0).Select
Wend
ActiveSheet.Protect
Sheets("ENTRADAS").Select
If x = 0 Then MsgBox prompt:="Este producto no existe. Debe darlo de alta antes de poder anotar compras o bien se le ha olvidado actualizar el stock después de anotarlo. También es posible que lo haya escrito de forma incorrecta. Elíjalo de la lista para evitar errores.", Buttons:=vbOKOnly, Title:="ERROR": End
Range("B5:G5").Select
Selection.Copy
Range("B509").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B5:D5,F5:G5").ClearContents
ActiveSheet.Protect
Range("B5").Select
Application.ScreenUpdating = True
MsgBox prompt:="Entrada anotada", Buttons:=vbOKOnly, Title:="INFORMACIÓN"
End Sub

En el cual quisiera que en vez de agregar datos a partir de B inserte a partir de la COL "A" respetando el orden...

1 respuesta

Respuesta
2

H o l a:

Hay que cambiar prácticamente todo el código.

Por ejemplo, en esta parte del código:

Sheets("STOCK"). Unprotect
Sheets("STOCK").Select
Range("B7").Select
While ActiveCell.Value <> ""
  If ActiveCell.Value = pro$ Then
    ActiveCell.Offset(0, 2).Select
    ActiveCell.Value = ActiveCell.Value + cant
    ActiveCell.Offset(0, 2).Select
    ActiveCell.Value = fec$
    x = 1
    ActiveCell.Offset(0, -4).Select
  End If
  ActiveCell.Offset(1, 0).Select
Wend

- Le dices que seleccione la celda B7

- Si la celda B7 es igual a lo que tienes en la variable pro$ entonces:

- ActiveCell.Offset(0, 2). Select, Eso significa que seleccione la celda de 2 columnas a la derecha y se desplace 0 filas, es decir, sobre la misma fila, en este ejemplo, tiene que seleccionar la celda D7.

- ActiveCell.Value = ActiveCell.Value + cant, Esa celda que seleccionaste le sumas lo que tiene la celda mas lo que tienes en la variable cant.

- ActiveCell.Offset(0, 2). Select, nuevamente le dices que selecciona la celda 2 columnas a la derecha, entonces, selecciona la celda F7.

- ActiveCell.Value = fec$, En esa celda F7 pones la fecha

- ActiveCell.Offset(0, -4). Select, le dices que se regrese 4 columnas, entonces selecciona la celda B7

- ActiveCell.Offset(1, 0). Select, selecciona la celda una fila abajo sobre la misma columna, es decir, ahora selecciona la celda B8.

'

Te explico lo anterior, porque, cada vez que realices un cambio, hay que tratar de entender, en dónde está el cursor de excel, y cómo podrás ver, es muy complicado darle seguimiento de esa forma.


Ahora regresando a tu pregunta, qué es lo que necesitas.

En dónde quieres el cambio en la hoja stock o en la hoja entradas.

Para hacer más entendible el código pudo cambiarlo todo por otro código que utilice los objetos de una forma más eficiente y comprensible, bueno, por lo menos es más más fácil de entender para mi.


E spero tus comentarios.

Sal u dos

Ok lo que pasa es si me funciona per como dices es un poco lento.

Lo que necesito es que en todo los datos que agregare quisiera poner un dato más osea la col. A (código) que al momento de insertar también se inserte el código junto a la fecha y cantidad

¿Pero se inserte dónde?

Puedes explicarlo con ejemplos.

Mira así esta la hoja ENTRADAS

ENTONCES anoto los datos que necesito entre ellos el código

pongo todos los datos tambien codigo del producto

Aquí es donde necesitaría ayuda ya que el código inserta los datos que están actualmente en el código visual que te puse.

Que al ejecutarse quisiera que también se insertara el código del producto

Aquí se aprecia los datos insertados menos el código del producto que es a lo que me refiero

Te anexo el código actualizado:

Sub ent_pro()
'Por.Dante Amor
    Set h3 = Sheets("ENTRADAS")
    Set h5 = Sheets("STOCK")
    Set b = h5.Columns("B").Find(h3.[C5], lookat:=xlWhole)
    If Not b Is Nothing Then
        h5.Cells(b.Row, "D") = h5.Cells(b.Row, "D") + h3.[D5]
        h5.Cells(b.Row, "F") = h3.[B5]
    Else
        MsgBox "Este producto no existe. Debe darlo de alta antes de poder anotar compras." & vbCr & _
               "Elíjalo de la lista para evitar errores.", vbOKOnly, "ERROR"
        Exit Sub
    End If
    '
    u = h3.Range("B" & Rows.Count).End(xlUp).Row + 1
    h3.Range("A5:G5").Copy
    h3.Cells(u, "A").PasteSpecial Paste:=xlPasteValues
    h3.Range("A5:D5,F5:G5").ClearContents
    MsgBox "Entrada anotada", vbOKOnly, "INFORMACIÓN"
End Sub

También te recomiendo que no protejas la hoja, hasta que termines el desarrollo, es más práctico.


Ahora revisa lo siguiente:

Tenías todo este código para buscar el producto:

    x = 0
    Range("B7").Select
    While ActiveCell.Value <> ""
    If ActiveCell.Value = pro$ Then
    x = 1
    End If
    ActiveCell.Offset(1, 0).Select
    Wend
    If x = 0 Then

Con estas 2 líneas resuelves la búsqueda:

    Set b = h5.Columns("B").Find(h3.[C5], lookat:=xlWhole)
    If Not b Is Nothing Then

En la variable b tienes el objeto del producto encontrado. Con ese objeto, que es como una celda, puedes saber, la hoja, la dirección, la fila, la columna, el valor, el color, etc.


Sal u dos

Funciona rápido... gracias dan...

Pero no entiendo eso de FIND y esto

lookat:=xlWhole)

pero gracias

La función FIND es para buscar, es como la función Buscar de excel cuando presionas Control + B:

Y lookat:=xlwhole, siginfica: "Coincidir con el contenido de toda la celda".


Si quires saber más sobre FIND, Crea una pregunta. Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas