Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/04/2007, 21:30
Avatar de mrocf
mrocf
 
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Sonrisa Función o macro para encontrar y copiar

Hola Frank!
En realidad tuve que adoptar más suposiciones de las que me hubiesen gustado. A saber:
a) Que en "companias.xls" los 16 datos están en la columna A y a partir de la fila 2, reservándose la fila 1 para: "RAZSOC".

b) Que el número de razones sociales puede cambiar.

c) Que el número de hojas de "midirectorio.xls" puede cambiar (diferir de 15).

d) Que dentro de los 4 registros de cada una de las 15 hojas la razón social se puede repetir

e) Que el número de registros pueden cambiar (diferir de 4).

Luego de lo anterior, resultó el siguiente código:
Código:
Sub BuscaEn15()
Dim CeldaRes As Range, RangoRazSoc As Range, CeldaEnc As Range
Dim FileRazSoc As String, FileDatos As String
Dim SheetCounter As Integer, ii As Integer

    Application.ScreenUpdating = False
    FileRazSoc = "companias.xls"
    FileDatos = "midirectorio.xls"
    
    Set CeldaRes = [A65536]
    CeldaRes.End(xlUp).Offset(0, 7) = "Origen"
    Windows(FileRazSoc).Activate
    Set RangoRazSoc = Range([A2], [A65536].End(xlUp))
    Windows(FileDatos).Activate
    Do
        SheetCounter = SheetCounter + 1
        For ii = 1 To RangoRazSoc.Rows.Count
            Application.Goto Sheets(SheetCounter).[A1]
OtroRegistroEnLaHoja:
            On Error Resume Next
            Set CeldaEnc = _
                Cells.Find(What:=RangoRazSoc.Cells(ii), _
                After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
                SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False)
            On Error GoTo 0
            If CeldaEnc Is Nothing Then GoTo OtraRazSoc
            If CeldaEnc.Address = ActiveCell.Address Then GoTo OtraRazSoc
            If CeldaEnc.Row < ActiveCell.Row Then GoTo OtraRazSoc
            CeldaEnc.Select
            Set CeldaEnc = Selection.Offset(0, 1 - CeldaEnc.Column)
            Range(CeldaEnc, CeldaEnc.Offset(0, 6)).Copy _
                Destination:=CeldaRes.End(xlUp).Offset(1, 0)
            CeldaRes.End(xlUp).Offset(0, 7) = ActiveSheet.Name
            GoTo OtroRegistroEnLaHoja
OtraRazSoc:
        Next ii
    Loop While ActiveSheet.Name <> Sheets(Sheets.Count).Name
    
    Application.Goto CeldaRes.Offset(-65535, 0)
    Application.ScreenUpdating = True
    Cells.Columns.AutoFit
    Set CeldaEnc = Nothing
    Set RangoRazSoc = Nothing
    Set CeldaRes = Nothing
End Sub
Uso:
1) Tener abiertos los archivos "companias.xls" y "midirectorio.xls".

2) Tener abierto el archivo resumen (no interesa su nombre) en la hoja en la que se copiará la información.
Esta hoja deberá estar "en blanco", a excepción de su primera fila en la que tú le habrás puesto los nombres de los 7 campos.

3) En este mismo "archivo resumen" deberá residir el código de macro que acompaño.

4) Finalmente al correr el código "BuscaEn15" y luego de unos instantes: puede ser que tengas suerte... (je je je).

5) Notar que el nombre de los archivos "companias.xls" y "midirectorio.xls" se puede parametrizar dentro del código.

Prueba con lo anterior y luego cuéntanos como te fue.
Saludos.