Buscar un registro que cumpla una condición y si no se cumple buscar el siguiente hasta que esa condición se cumpla

13/06/2007 - 23:33 por Insumos | Informe spam
Hola Gente del Foro:

Tengo la siguiente cuestión, supongamos que un UserForm tengo un ComboBox2
que por ejemplo tiene estas opciones:
G1
S1
S3
S8

Luego, tengo una base de datos en una hoja, como por ejemplo la siguiente:

Código Papeleria Fecha Vto. Primer Número Lote Ultimo Número
Lote Stock
G1 12/12/09 1
500 15
S1 10/12/07 1
250 0
S1 12/12/09 251
500 4
S1 10/12/10 501
750 5
S3 12/06/08 1
250 3
S3 10/12/10 251
501 15
S8 12/12/09 1
250 5

Los registros de esta base se ordenan automáticamente primero por el
criterio Código Papeleria y luego por Fecha Vto. (como se ve en el ejemplo).

Necesito un código que haga lo siguiente:
Primero, que busque en esa hoja (llamada Compras) el código en la primera
columna o campo (Código Papeleria). Una vez que lo encuentre, que se fije en
el campo Stock si este es distinto de 0, y en ese caso que muestre en un
Label el campo Fecha de Vto. y en otro Label la numeración que se compone
por los dos campos Primer y Ultimo Número Lote. Ahora, si el campo Stock es
igual a 0, el código debe buscar el siguiente (o el siguiente, hasta que
encuentre uno en el que el Stock no sea 0) y realizar el procedimiento antes
mencionado (modifique los Label).

Ejemplos:

En el ComboBox2 yo selecciono S1. Resultado: el Label7 muestra "251 a 500" y
el Label8 "12/12/09"
En el ComboBox2 yo selecciono S3. Resultado: el Label7 muestra "1 a 251" y
el Label8 "12/06/08"

El código que fui armando hasta ahora es:

Private Sub ComboBox2_Change()

Dim celda As Range
Dim primero As String

With Worksheets("Compras")
Set celda = [A:A].Find(ComboBox2, , xlValues, xlWhole)
If Not celda Is Nothing Then
primero = celda.Address
Do
If celda.Offset(0, 4) = 0 Then Set celda = [A:A].FindNext(celda)
Loop While Not celda Is Nothing And celda.Address <> primero
Label8.Caption = Format(celda.Offset(0, 1), "dd/mm/yyyy")
Label7.Caption = "Entre " & celda.Offset(0, 2) & " y " &
celda.Offset(0, 3)
Set celda = Nothing
End If
End With

End Sub

El código funciona bien en todo, excepto que cuando el campo Stock es 0 no
busca el siguiente registro que tenga el mismo código pero que no tenga
Stock 0. No se como solucionarlo!
Bueno, espero me haya explicado bien!
Desde ya muchisimas gracias!

Mariano

CONTADURIA

Preguntas similare

Leer las respuestas

#1 Ivan
14/06/2007 - 01:19 | Informe spam
hola de nuevo Mariano,

asi de pronto y sin hacer pruebas se me ocurre que pruebes a añadir un
Exit Do en el bucle si no se cumple el condicional(si offset(0,4)<>
0). ms o menos asi:

If celda.Offset(0, 4) = 0 Then Set celda = [A:A].FindNext(celda) else
Exit do

no me hagas mucho caso, pero quizas ande por ahi el problema ( sin
mirar el resto del codigo)

a ver si hay suerte

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Insumos
14/06/2007 - 01:33 | Informe spam
Hola Ivan:

Probé tu idea y adivina que: funciona a la perfección! Lo que sucedía era
que quedaba el bucle andando hasta que lo cortaba con Ctr + Pausa. Mañana lo
probaré seguramente más a fondo, pero parece que así anda de maravillas.
Así que muchísimas gracias una vez más por tu valiosa ayuda!! Seguramente
será hasta pronto!
Saludos!

Mariano

"Ivan" escribió en el mensaje
news:

hola de nuevo Mariano,

asi de pronto y sin hacer pruebas se me ocurre que pruebes a añadir un
Exit Do en el bucle si no se cumple el condicional(si offset(0,4)<>
0). ms o menos asi:

If celda.Offset(0, 4) = 0 Then Set celda = [A:A].FindNext(celda) else
Exit do

no me hagas mucho caso, pero quizas ande por ahi el problema ( sin
mirar el resto del codigo)

a ver si hay suerte

un saludo
Ivan
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida