Buscar datos en hojas (Datos que se repiten)

Buen día nefese, tengo un problemita ayúdenme por favor, poco manejo de Excel; Estoy utilizando el siguiente código para para buscar datos en varias hojas:
Private Sub Button_Buscar_Click()
Dim id_documento, idBusca As String, sino As String
Dim fila As Integer
marca = 0
ind = 0
For Each sh In Sheets
sh.Select
fila = 5
id_documento = TextBox8
Do While idBusca <> id_documento
fila = fila + 1
idBusca = Range("E" & fila).Value
If idBusca = Empty Then
'MsgBox "No se encuentra ese No. De Documento"
marca = 1
Exit Do
End If
Loop
If marca = 0 Then
sino = MsgBox("El dato fue encontrado en hoja " & sh.Name & Chr(10) & _
"¿Deseas aceptar? Por Si se muestra el registro, por NO se busca en otra hoja", vbYesNo, "CONFIRMAR")
If sino = vbYes Then
TextBox1 = Range("B" & fila).Value
TextBox2 = Range("C" & fila).Value
TextBox3 = Range("D" & fila).Value
TextBox4 = Range("F" & fila).Value
TextBox5 = Range("H" & fila).Value
TextBox6 = Range("L" & fila).Value
TextBox7 = Range("J" & fila).Value
TextBox8.SetFocus
ind = 1
Exit Sub
End If
End If
marca = 0
Next sh
If ind = Empty Then
MsgBox "No Existe este Número de Orden"
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
marca = 1
End If
End Sub
La verdad si funciono pero tiene algunas inconsitencias al momento de ejecutarlo, son las siguientes:
Hago una prueba: Yo se que existe el No. Documento (10-100) tanto en la Hoja1=2008 como en la Hoja4=2011.
1). Con respecto a lo anterior, el comienza a buscar inicialmente desde la primera hoja en este caso es la hoja1=2008, si la encuentra le digo que SI y el me arroja el registro perfectamente, osea me arroja los datos que se encuentran en las celdas y me las manda al textbox, pero como estoy haciendo una prueba se que existe otro y le digo que NO... Pero me comienza a buscar en la hoja2=2009, luego se va a la hoja3=2010 diciéndome en cada una de ellas "Que el dato fue encontrado..."¿Deseas aceptar? Por Si se muestra el registro, por NO se busca en otra hoja", vbYesNo..", ¿?... Luego cuando llega a la Hoja4=2011 le digo que (SI) que me muestre el registro pero lo que hace es enviarme los mismo datos del Textbox más no los datos que están en las celdas, osea no hace la operación como la hace en la primera encontrada.
2). Existe alguna forma de que el código automáticamente identifique si existe iguales números de contratos o documentos a buscar, con el fin de que no me pregunte cuando Yo se que ese Numero de documento solo esta 1vez y solo me haga la pregunta cuando el se de cuenta por medio de un código que existe dos o más Numero iguales en diferentes hojas.
Quedo pendiente de la respuesta.. MUCHAS GRACIAS!

1 Respuesta

Respuesta
1
Estuve revisando tu código, pero es poco lo que puedo sacar sin tener los datos y los recursos con los que trabajas, si puedes enviame ([email protected]) el archivo con el cual trabajas, o un abstracto con el cual pueda obtener la situación que te da problema. Eso me ahorraría tiempo al trabajar sobre la situación real en vez de construir una situación similar desde cero. Quedo pendiente. Saludos
PD: Según entiendo lo que requieres es que te muestre todos los registros existentes para un numero (de contrato) en especifico, sin importar la hoja de su ubicación, y por elección propia que te los inserte en la hoja actual.
He revisado tu archivo y te dejo el código modificado para que evite los casos redundantes, por el momento te puedo indicar que el código viejo seguía revisando por que tenia la instrucción FOR EACH SH IN SHEETS, lo cual indica que tiene que revisar cada hoja, sin importar si cumplían la condición :S, igualmente te envío a tu correo el archivo funcionando, quedo pendiente de tu éxito. Saludos
*******************************************************
Private Sub Button_Buscar_Click()
Dim id_documento, idBusca As String, sino As String
Dim fila As Integer
ind = 0
sh = 1
id_documento = TextBox8
While sh <= ActiveWorkbook.Sheets.Count
Sheets(sh).Activate
fila = 5
a = Application.WorksheetFunction.CountIf(ActiveSheet.Range("F:F"), id_documento)
If a <> 0 Then
ActiveSheet.Cells(ActiveSheet.Rows.Count, 6).Activate
ultimacelda = Selection.End(xlUp).Row
Cells(6, 2).Activate
While fila <= ultimacelda
If Cells(fila, 6) = id_documento Then
sino = MsgBox("El Documento fue encontrado en el año: " & Sheets(sh).Name & Chr(10) & _
"" & Chr(10) & _
"¿Deseas Aceptar?" & Chr(10) & _
"" & Chr(10) & _
"Presiona < SI > para mostrar datos" & Chr(10) & _
"Presiona < NO > para buscar en otra hoja del libro", vbYesNo, "CONFIRMAR DATOS")
If sino = vbYes Then
TextBox1 = Range("B" & fila).Value
TextBox2 = Range("C" & fila).Value
TextBox3 = Range("D" & fila).Value
TextBox4 = Range("G" & fila).Value
TextBox5 = Range("I" & fila).Value
TextBox6 = Range("M" & fila).Value
TextBox7 = Range("K" & fila).Value
TextBox9 = Range("E" & fila).Value
TextBox8.SetFocus
ind = 0
Exit Sub
Else
fila = fila + 1
End If
Else
fila = fila + 1
End If
Wend
End If
sh = sh + 1
Wend
If ind = Empty Then
MsgBox "No Existe este No. de Orden en ningun año"
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
TextBox9 = ""
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas