Buscar datos en varias hojas UserForm

Tengo un pequeño problema con la opción realizar la búsqueda en distintas hojas..
que en mi caso son años:(Hoja1=2008, Hoja2=2009, Hoja3=2010, Hoja4=2011)
Estoy utilizando este codigo pero solo me busca en una sola hoja.
Private Sub Button_Buscar_Click()
Dim id_documento, idBusca As String
Dim fila As Integer
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"
          Exit Do
     End If
Loop
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
End Sub
Como hago para buscar en varias hojas... Me pueden ayudar por favor, pero que me digan en que parte de este código tengo que anexar o como quedaría.
Si me pueden enviar un ejemplo con las mismas cualidades seria estupendo.
email: (xxxxxx)

1 respuesta

Respuesta
2
Te agrego el bucle que necesitas para recorrer todas las hojas, pero te comento:
-Siempres estás buscando solo en celda E6
-Una vez que encontró el dato ya no sigue buscando, no te informa en qué hoja lo encontró
Si esta fue tu idea, la rutina así ajustada te servirá. Las lineas agregadas están en negrita.
Sino finalizá la consulta e ingresá una nueva explicando cuál es la idea con un ejemplo concreto.
Private Sub Button_Buscar_Click()
Dim id_documento, idBusca As String
Dim fila As Integer
marca = 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
    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
    Exit Sub
End If
marca = 0
Next sh

End Sub
Gracias Elsa por tomarte el tiempo en responder.
Chevre, si funciono la búsqueda por las hojas y sí siempre busco el No. de Contrato desde la celda E6 hasta abajo osea toda la Columna E. y todas las hojas tienen el mismo formato.
Mi idea es la siguiente: Pero tengo dos Preguntas:
La primera pregunta es como se haría para que no me envíe el MsgBox "No se encuentra este No. de Documento", una vez realice la búsqueda por todas las hojas, me explico: que haga el Recorrido como lo viene haciendo y me arroje los datos en los Textbox como lo viene haciendo, SIN necesidad que me indique que no "se encuentra" hoja por hoja, en otras palabras para que me logres entender lo que necesito es que si busco un No. de Contrato que se que esta en el año 2011, el arranca diciendo desde la hoja1=2008 que nos se encuentra, luego dice no se encuentra en la hoja2=2009 y así sucesivamente hasta llegar al 2011, la idea es que me muestre automáticamente los resultados en los TextBox del form del año 2011 si llegara a existir dicho contrato de lo contrario que me diga que no se encuentre ese no. de Documento como lo viene haciendo.
Con respecto a lo anterior me surge mi Segunda pregunta: Que la verdad me coloco muy pensativo y es que dicho No. de Contrato que busca posiblemente puede estar en diferentes años; Me explico se busca por No. de Contrato ejemplo: 01-100 (Pero éste puede estar tanto en el 2008, 2009, 2010 o 2011, por el tema de que cada año el No. vuelve a radicar inicialmente desde 01-01. ¿Me puedes ayudar para saber como me puede arrojar un MsgBox o que otra opción, una vez encuentre un No. de Contrato en el año 2011 y me diga que en el 2010 también existe otro con ese mismo numero o que pueda ser que también exista en el año 2009?.
Que código se podría hacer para que reúna esta dos peticiones porque considero que la primera pregunta depende de la segunda.
Te Agradecería mucho Elsa si me puedes ayudar con estas dos peticiones.
Muchas Gracias, Sdos. Andres
Para quitar el mensaje al pasar por una hoja sin encontrar el dato, solo quitá el msgbox
If idBusca = Empty Then
               'MsgBox "No se encuentra ese No. de Documento"   'QUITAR
               marca = 1
Podés utilizar otra variable, por ej: ind = 0 antes del For Each .... y debajo de la línea Textbox8 = ..... agregar:
ind = 1
Y antes del End Sub, controlar si esa variable es 0 lo que significa que no encontró el dato en ninguna hoja:
If ind = 0 then Msgbox "No se encontró el doc en ninguna hoja"
End Sub
Ahora, con respecto a la 2da parte, el bucle recorre las hojas desde la primera en adelante. Es decir que seguramente encontrará 1ro el dato en la hoja 2009 y lo mostrará . Por eso te mencioné que tu rutina no indicaba en qué hoja lo encontró, tampoco sabrás si existe el mismo dato en hojas sgtes.
Lo que se me ocurre es que la macro te informe de la hoja encontrada y te consulte si querés buscar en hojas sgtes ... confírmame si esto puede ser factible.
Hola Elsa, Buenos días
Perfecto me funciono a las mil maravillas, pero lo que tu decías tenia razón con respecto a la segunda pregunta si me gustaría que me ayudaras diciendo como hacer para que me informe de la hoja encontrada y me consulte si quiero buscar en hojas siguientes., Te agradecería que me indicaras en que parte del código lo coloco y que tengo que borrar o anexar.
Este es el código que tengo en el momento y me esta arrojando los datos perfectamente:
Private Sub Button_Buscar_Click()
Dim id_documento, idBusca 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
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
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
Quedo muy pendiente de tu respuesta.
Gracias Elsa.
Pruébala de esta manera:
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
Sdos
Elsa
PD) En manual 400Macros encontrarás un cap dedicado exclusivamente a los bucles.
Elsa., buenas noches, 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 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.
Espero que no sea una molestia, pedirte tanto esta ayuda debido a que he sido muy insistente, pero Elsa te agradecería realmente mucho si me puedas ayudar con estas soluciones.
Quedo muy pendiente de su respuesta, para hacer las respectivas pruebas. GRACIAS !
Con la primer respuesta ya respondí a tu consulta.
Ahora cada vez le vas agregando alguna opción más, lo que hace que ya vayas por la 3er consulta... o finalizas esta y dejas la nueva en el tablón o me esperas que atienda a otros usuarios que también esperan sus respuestas y luego sigo con la tuya.
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas