Introducir datos con Lector de Códigos de Barras en Excel

Utilizo un lector de códigos de barras para hacer inventario sobre una hoja dispuesta de la siguiente forma:

Referencia en la columna A

Alternativa en la columna B

Cantidad en la columna C

Utilizo una macro sacada de este foro la cual así una celda al lector, busca el dato en la columna A y si lo encuentra suma 1 en la columna C. El problema es que en mi caso, hay artículos que son iguales pero tienen distintos códigos, por ejem., un rodamiento puede tener las siguientes referencias 420W10540 ó 420W10890. En la hoja se vería asi:

Referencia Alternativa Cantidad CELDA LECTOR

420W10540 420W10890 1 420W10540

El problema es que la macro unicamente busca en la columna A con lo cual, si leo con el lector la Alternativa, me dice que no existe, necesitaría que el lector pueda ver los datos de las columnas A y B y si encuentra en alguna de ellas sume 1 en la columna C.

La macro es la siguiente:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lector As String
lector = "e3" 'cambia esta celda por la celda en la que esta la lectora
If Not Application.Intersect(Target, Range(lector)) Is Nothing Then
buscar (Range(lector).Value)
Range(lector).Select
End If
End Sub
Private Sub buscar(dato As String)
Dim código As String, gasto As String
Dim n As Long
Dim fc As Long
Dim cc As Long
Dim fg As Long
Dim cg As Long
Dim encontrado As Boolean
Código = "g18" 'cambia esta celda por la celda en la que esta el emcabezado de código
gasto = "h18" 'cambia esta celda por la celda en la que esta el emcabezado de gasto
Range(código).Select
n = Range(código).CurrentRegion.Rows.Count + (Range(código).Row - 1)
fc = Range(código).Row + 1
cc = Range(código).Column
encontrado = False
fg = fc
cg = Range(gasto).Column
While fc <= n
If (Cells(fc, cc).Value = dato) Then
Cells(fc, cg).Value = Cells(fc, cg).Value + 1
encontrado = True
End If
fc = fc + 1
Wend
If encontrado = False Then
MsgBox ("código inexistente")
End If
End Sub

1 Respuesta

Respuesta
1

Pero esta macro hace la búsqueda en la columna G, tendrás la macro en la que dices qeu busca en la columna A.

Saludos. Dam

Hola:

Efectivamente, en la macro tengo modificadas las celdas. La macro ya modificada en mi hoja es esta:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lector As String
lector = "i1" 'cambia esta celda por la celda en la que esta la lectora
If Not Application.Intersect(Target, Range(lector)) Is Nothing Then
buscar (Range(lector).Value)
Range(lector).Select
End If
End Sub
Private Sub buscar(dato As String)
Dim Referencia As String, Físico As String
Dim n As Long
Dim fc As Long
Dim cc As Long
Dim fg As Long
Dim cg As Long
Dim encontrado As Boolean
Referencia = "a1" 'cambia esta celda por la celda en la que esta el emcabezado de Referencia
Físico = "c1" 'cambia esta celda por la celda en la que esta el emcabezado de Cantidad
Range(Referencia).Select
n = Range(Referencia).CurrentRegion.Rows.Count + (Range(Referencia).Row - 1)
fc = Range(Referencia).Row + 1
cc = Range(Referencia).Column
encontrado = False
fg = fc
cg = Range(Físico).Column
While fc <= n
If (Cells(fc, cc).Value = dato) Then
Cells(fc, cg).Value = Cells(fc, cg).Value + 1
encontrado = True
End If
fc = fc + 1
Wend
If encontrado = False Then
MsgBox ("Referencia inexistente")
End If
End Sub

Gracias

Así es más fácil trabajar.

Te regreso la macro completa con el código para buscar en la columna B

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lector As String
lector = "i1" 'cambia esta celda por la celda en la que esta la lectora
If Not Application.Intersect(Target, Range(lector)) Is Nothing Then
buscar (Range(lector).Value)
Range(lector).Select
End If
End Sub
Private Sub buscar(dato As String)
Dim Referencia As String, Físico As String
Dim n As Long
Dim fc As Long
Dim cc As Long
Dim fg As Long
Dim cg As Long
Dim encontrado As Boolean
Referencia = "a1" 'cambia esta celda por la celda en la que esta el emcabezado de Referencia
Físico = "c1" 'cambia esta celda por la celda en la que esta el emcabezado de Cantidad
Range(Referencia).Select
n = Range(Referencia).CurrentRegion.Rows.Count + (Range(Referencia).Row - 1)
fc = Range(Referencia).Row + 1
cc = Range(Referencia).Column
encontrado = False
fg = fc
cg = Range(Físico).Column
While fc <= n
If (Cells(fc, cc).Value = dato) Then
Cells(fc, cg).Value = Cells(fc, cg).Value + 1
encontrado = True
End If
fc = fc + 1
Wend
‘Código para buscar en la columna B
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
    If Cells(i, 2) = dato Then
        Cells(i, 3) = Cells(i, 3) + 1
        encontrado = True
    End If
Next
‘Fin código para buscar en la columna B
If encontrado = False Then
MsgBox ("Referencia inexistente")
End If
End Sub

Saludos.Dam
Si es lo que necesitas.

Hola Dam,

Acabo de probar la nueva macro y me da el siguiente error de compilacíon: "No se ha definido la variable" y se detiene en esta linea:

For i = 1 To Range("B" & Rows.Count).End(xlUp).Row

Gracias de nuevo, estaré atento

Saludos. Tomi

En la parte inicial de esa macro tienes esto

Private Sub buscar(dato As String)
Dim Referencia As String, Físico As String
Dim n As Long
Dim fc As Long
Dim cc As Long
Dim fg As Long
Dim cg As Long
Dim encontrado As Boolean

Agrega esta línea

Dim i as integer

Prueba y me dices.

Saludos. Dam

Si te funciona, podrías finalizar la pregunta.

Hola Dam:

Lo acabo de probar y... va perfecto, es justo lo que necesito. Eres un genio y te estoy super agradecido por tu interés, la rapidez de tu respuesta y en definitiva la solución que me has aportado.

Muchas gracias.

Saludos

Tomi

Hola Dam,

Te agradezco muchísimo la atención y el tiempo que me has dedicado, la solución es sencillamente perfecta y se ajusta al cien por cien a las necesidades que tenía.

Muchísimas gracias

Saludos

Tomi

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas