Visual Basic para Aplicaciones - Búsqueda en varias hojas de varios libros

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Nanoterremoto (4 intervenciones) el 26/04/2021 11:37:33
Buenos días,

Adjunto pantallazo del documento para indicar que es lo que queremos hacer. Yo tengo en nuestro ERP un lote de una bobina que en ejemplo del pantallazo sería 21a13 y que nos aparece en la trazabilidad del producto final.

Lo que se quiere es crear un fichero que poniendo 21a13 se busque en los diferentes Excel, como el del pantallazo, ese lote, teniendo en cuenta que en los Excel no va a aparecer 21a13 sino como aparece en lo marcado en verde, 2113xxxA. Una vez que encuentre ese lote, aparte de traerme el lote al fichero que se quiere crear, debería traer también la información que te marco en rojo, el producto que es y los materiales utilizados junto con sus respectivos lotes de cada una de las bobinas que encuentre. No sé si me explico.

Todos los ficheros donde habría que buscar están en una misma carpeta aunque separado por subcarpetas según el mes y cada fichero de cada mes tiene varias hojas, en concreto 2 hojas por día trabajado para turno de mañana y de tarde.

Básicamente es crear un fichero donde yo ponga 21a13 y me traiga el lote de cada hoja de cada libro como el que adjunto, el nombre del producto y los materiales utilizados con sus lotes. El resto de datos que hay en el Excel, o los demás que son iguales con la misma estructura, es irrelevante, solo queremos obtener esa info, producto, lote y materiales utilizados con su lote.

Un saludo y gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Antoni Masana (498 intervenciones) el 26/04/2021 16:33:45
Lo que necesitas es una macro que recorra el árbol de directorios y busque un texto a partir de otro texto que tienen similitudes pero no son iguales en todos los ficheros Excel.

1º seria necesario saber la estructura de directorios, es decir si la estructura es

1
2
3
4
HOME\Dir1
HOME\Dir2
HOME\Dir3
etc
o
1
2
3
4
5
6
HOME\Dir1
HOME\Dir1\Dir10
HOME\Dir1\Dir10\100
HOME\Dir2
HOME\Dir2\Dir20
HOME\Dir2\Dir20\\Dir200

2º El diseño de los libros, donde están los datos a buscar y capturar.

3º la conversión de un texto a otro es la misma, ¿No hay excepciones?

Origen: Número1 + Número2 + Letra + Número3 + Número4
Buscar: Número1 + Número2 + Número3 + Número4 + Carácter + Carácter + Carácter + A mayúscula.

Sube varios ficheros de muestra con sus respectivos directorios y le doy un vistazo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Nanoterremoto (4 intervenciones) el 27/04/2021 09:28:06
Buenos días,

Lo primero gracias por la respuesta.

1º La organización del directorio sería la siguiente:

\\servidor\producción\for 02\2021\nº.- Mes. Dentro de cada uno estaría el excel correspondiente a cada mes.

2º En cuanto al diseño del excel donde buscar, adjunto uno con datos rellenos y con varias hojas.

3º En cuanto a los formatos serían así: 2 dígitos para el año + letra (a o b) + 2 dígitos para la semana de fabricación: 21a13
Para lo que se registra en los excel como el que adjunto: 2 dígitos para el año + 2 dígitos para la semana + 1 dígito para el día de la semana (1 lunes, 2 martes,.....) + 2 dígitos para el turno (01 mañana y 02 tarde) + letra (A o B): 2113301A.

Espero sirva de ayuda.

En el caso del fichero que te adjunto, la ruta del directorio donde está ubicado sería esta: \\seirfs01\PRODUCCION\FOR 02. CENTRO PARAFINADO\2021 FOR 02\3.- MARZO y el fichero se llama 2103.xlsx.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Antoni Masana (498 intervenciones) el 27/04/2021 15:37:43
Veamos a ver si lo entiendo: En algún sitio, no especificado, se introduce un texto tal que por ejemplo esto: 21a13

Debe buscar un libro que se encuentra el la siguiente ruta a partir del texto anterior:

1
\\seirfs01\PRODUCCION\FOR 02. CENTRO PARAFINADO\2021 FOR 02\

Donde el 21 se deduce del texto anterior. Y a partir de aquí buscar en todas las carpetas los ficheros Excel

Abrir cada uno de los ficheros y buscar: 2113abbC

donde a es un numero del 1 al 7
donde bb es 01 o 02
donde C es una letra mayúscula A o B

En se sabe donde y copiar no se sabe el que a no se sabe donde.


A esta macro se le pasa el primer texto busca los diferentes ficheros Excel y llama a la proceso Tratar_Excel con la ruta y el nombre del fichero, el proceso debe abrir tratar la información y cerrarlo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub Buscar_Excel(Texto)
    Dim Ruta as String, Direc(12) as String, Archi as String, Ruta as String, Pnt as Byte, a as Byte
 
    Ruta=\\seirfs01\PRODUCCION\FOR 02. CENTRO PARAFINADO\20" + Left(Texto, 2) + " FOR 02\""
 
    Direc(1) = Dir("\\seirfs01\PRODUCCION\FOR 02. CENTRO PARAFINADO\2021 FOR 02\*", vbDirectory)
    Punt=1
    While Direc <> ""
          Punt = Punt +
          Direc(Punt) = Dir()
    Wend
 
    For a=1 to Punt
        Archi = Dir(Ruta + Direc(a) + "\*")
        While Archi <> ""
            Call Tratar_Excel(Ruta + Direc(a) + "\" + Archi)
            Archi = Dir()
        Wend
    Next
End Sub

El resto lo dejo en tus manos.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Nanoterremoto (4 intervenciones) el 28/04/2021 08:55:37
Perfecto, haré alguna prueba a ver que tal.

Básicamente lo que se quiere crear es lo que dices, un fichero donde yo indique 21a13, busque en el campo marcado en verde en el primer archivo adjuntado en este tema 2113xxxA y me devuelva los valores de los campos marcados en rojo en el primer archivo adjuntado a este tema.

Esos valores que devuelve pues se tendrían que mostrar en el mismo fichero donde yo introduzco 21a13 a modo de listado de valores o algo así, donde se viera el producto que es, los materiales que se han usado para su fabricación y los lotes de cada material usado, en este caso serían papel vegetal, cera mineral y tinta.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Antoni Masana (498 intervenciones) el 28/04/2021 21:12:15
No se si esperas que alguien te realice la macro de leer los libros que básicamente sería la rutina Tratar_Excel pero hay un problema, bueno uno no, varios problemas.

Si leo tu comentario deduzco:

Básicamente lo que se quiere crear es lo que dices, un fichero donde yo indique 21a13 ¿En que celda?, busque en el campo marcado (Celda Y8) en verde en el primer archivo adjuntado en este tema 2113xxxA ¿La A mayúscula de este código es porque en el primero hay una a minúscula? y me devuelva los valores de los campos marcados en rojo Las celdas J4, H6, I8, J8, J9, I10 y J10 en el primer archivo adjuntado a este tema.

- ¿Que formato tiene la hoja destino?
- ¿Es el mismo que las que lee?
- ¿Las celdas de destino son las mismas que las de origen?
- ¿Debe buscar en el libro donde se ejecuta la macro?
- ¿Puede haber varias coincidencias?
- ¿Paro en la primera coincidencia?
- ¿Donde ubico las demás coincidencias?

- [b]Según la explicación del significado de las xxx puede haber hasta 14 ( 7 días * 2 turnos )


Puedes subir el libro de Enero y Febrero para tener varios libros donde buscar

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Nanoterremoto (4 intervenciones) el 29/04/2021 12:29:19
Como comentas te subo fichero de enero y febrero.

Respecto a lo de hacerlo, básicamente lo que quería saber primero es si era posible y luego obviamente obtener ayuda o al menos una guía de como hacerlo porque yo de VBA estoy bastante cortito, por lo que toda ayuda es poca y además muy bienvenida.

Respecto a tus preguntas:
La celda donde se pondría 21a13 sería la celda A1 o A2 de un documento nuevo que sería el fichero que habría que generar, donde yo indico ese lote y donde se mostrarían todos los datos que se quieren rescatar de los otros documentos de cada mes. La información que devuelvan los diferentes ficheros donde se encuentre eso de 2113xxxA se tendría que devolver en el mismo fichero donde se introduce 21a13 en las celdas contiguas, no sé cual sería el máximo de datos que traerá la búsqueda, pero sería reservar un espacio de celdas amplio para mostrar la información que se trae de los otros libros.

- ¿Que formato tiene la hoja destino?
Actualmente no hay formato de hoja destino por lo que se puede adaptar a lo que requiera el código.
- ¿Es el mismo que las que lee?
Si, el documento donde se mete el lote a buscar sería el mismo que recogería la información que se obtenga de la búsqueda.
- ¿Las celdas de destino son las mismas que las de origen?
Se podrían usar las mismas celdas, pero al poder obtener varios lotes de varios productos, quizás sería mejor organizarlo de otra manera.
- ¿Debe buscar en el libro donde se ejecuta la macro?
La búsqueda la haría en el libro donde meta el lote a buscar, que entiendo que sería la que tiene la macro para buscar en los diferentes documentos de la carpeta indicada en el mensaje anterior.
- ¿Puede haber varias coincidencias?
Si, puede darse el caso de que el mismo lote esté en varios documentos de varios meses y en varias hojas dentro del mismo libro de cada mes.
- ¿Paro en la primera coincidencia?
No, habría que traer todas las coincidencias, siempre y cuando cambie el lote de los materiales utilizados, si son los mismos lotes solamente haría falta una coincidencia.
- ¿Donde ubico las demás coincidencias?
Si los lotes cambian habría que ponerlos de manera contigua a la primera coincidencia para mostrarlo tipo listado.

- [b]Según la explicación del significado de las xxx puede haber hasta 14 ( 7 días * 2 turnos )
Respecto a este apartado solo son 5 días, de lunes a viernes, por lo que xxx tendría 10 posibilidades, bueno, algunos sábados se trabaja, en algunas semanas podrían ser 11, ya que el sábado es solo de mañana.

Espero haber resuelto todas las dudas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Búsqueda en varias hojas de varios libros

Publicado por Antoni Masana (498 intervenciones) el 29/04/2021 19:59:56
Crea un directorio C:\TMP descarga el paquete en este directorio y descomprimelo.
Creara un directorio Nanoterremoto.

En el primero tendras el libro con la macro para hacer pruebas. Tiene un botón para ejecutar la macro.

Ya se que todo lo que muestra en la hoja no lo necesitas pero es para ver si lo hace bien. Dale un vistazo y ya me comentaras.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar