¿Cómo puedo enviar datos de un libro a otro utilizando un ciclo For?

Deseo enviar datos de un libro (Prueba) a otro libro (Prueba2), con una condición: que cuando en la columna "D" contenga la letra "a" se pasen los datos de las filas al libro "Prueba2". Tengo la macro hasta aquí, el problema que solo me manda la primera fila que contenga la condición del libro Prueba y las demás filas no pasa la información.

Deseo que una vez que se pasen las filas borre la letra solo de las filas que se pasaron "a" y las sustituya por dos "aa".

Les agradezco que me puedan ayudar.

Sub transferirDatosOtraHoja()

    Dim id As String

    Dim nombre As String

    Dim descripcion As String

    Dim bueno As String

    Dim malo As String

    Dim ultimaFila As Long

    Dim ultimaFilaHoja As Long

    Dim cont As Long

                      ultimaFila = Sheets("Hoja1").Range("D" & Rows.Count).End(xlUp).Row

    For cont = 11 To ultimaFila

        id = Sheets("Hoja1").Cells(cont, 1)

        nombre = Sheets("Hoja1").Cells(cont, 2)

        descripcion = Sheets("Hoja1").Cells(cont, 3)

        bueno = Sheets("Hoja1").Cells(cont, 4)

        malo = Sheets("Hoja1").Cells(cont, 5)

                  If bueno = "a" Then

                              Set libroDatos = Workbooks.Open("C:\Users\Jose\Documents\Prueba2.xlsx")

                              Workbooks("Prueba2.xlsx").Sheets("Hoja2").Select

                              UltimaFilaHoja = Range("A" & Cells.Rows.Count).End(xlUp).Row

                              Sheets("Hoja2").Cells(ultimaFilaHoja + 1, 1) = id

                              Sheets("Hoja2").Cells(ultimaFilaHoja + 1, 2) = nombre

                              Sheets("Hoja2").Cells(ultimaFilaHoja + 1, 3) = descripcion

                             Sheets("Hoja2").Cells(ultimaFilaHoja + 1, 4) = bueno

                             Sheets("Hoja2").Cells(ultimaFilaHoja + 1, 5) = malo

                                  ActiveWorkbook.Save

                                   ActiveWorkbook.Close

                  End If

  Next cont

MsgBox "Transferencia realizada exitosamente!", vbInformation, "Resultado"

End Sub

Respuesta
1

En caso de que no hayas podido solucionarlo envíame tu archivo para trabajarlo y enviarlo de vuelta [email protected]

Gracias Cecilio Pérez por la ATENCIÓN.

Te he enviado los dos archivos. 
Estaré atento a tu repuesta. Ojala y me puedas apoyar. 

¡SALUDOS!

Te adjunto avance, para que lo revises

Sub transferirDatosOtraHoja()
    Dim id As String
    Dim nombre As String
    Dim descripcion As String
    Dim bueno As String
    Dim malo As String
    Dim ultimaFila As Long
    Dim ultimaFilaHoja As Long
    Dim cont As Long
    Dim libroDatos As Workbook
    Dim ruta As String
    Dim ObjExcel As Application
    ruta = "C:\Users\I5\Desktop\"
    libro = "Prueba2.xlsx"
    If Dir(ruta & "\" & libro) = "" Then
        MsgBox "No se encuentra el libro Prueba2 en esta carpeta... verifica y vuelve a intentar.", , "Error"
        Exit Sub
    End If
    milibro = ActiveWorkbook.Name
    Workbooks.Open ruta & "\" & libro
    Workbooks(milibro).Activate
    Sheets("Hoja1").Select
    ultimaFila = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
    For i = 11 To ultimaFila
        If Cells(i, "D") = "a" Then
                 Range("A" & i & ":D" & i).Copy
            Workbooks("Prueba2.xlsx").Sheets("Hoja2").Range("a65000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues
        End If
    Next
    MsgBox "Transferencia realizada exitosamente!", vbInformation, "Resultado"
End Sub

Listo

Prueba y me comentas

Sub transferirDatosOtraHoja()
    Dim id As String
    Dim nombre As String
    Dim descripcion As String
    Dim bueno As String
    Dim malo As String
    Dim ultimaFila As Long
    Dim ultimaFilaHoja As Long
    Dim cont As Long
    Dim libroDatos As Workbook
    Dim ruta As String
    Dim ObjExcel As Application
    ruta = "C:\Users\I5\Desktop\"
    libro = "Prueba2.xlsx"
       If Dir(ruta & "\" & libro) = "" Then
          MsgBox "No se encuentra el libro Prueba2 en esta carpeta... verifica y vuelve a intentar.", , "Error"
          Exit Sub
     End If
     milibro = ActiveWorkbook.Name
     Workbooks.Open ruta & "\" & libro
    Workbooks(milibro).Activate
     Sheets("Hoja1").Select
     ultimaFila = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
    For i = 11 To ultimaFila
            If Cells(i, "D") = "a" Then
               Range("A" & i & ":D" & i).Copy
               Workbooks("Prueba2.xlsx").Sheets("Hoja2").Range("a65000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues
           End If
 Next
   Workbooks("Prueba2.xlsx").Save
   Workbooks("Prueba2.xlsx").Close
MsgBox "Transferencia realizada exitosamente!", vbInformation, "Resultado"
For i = 11 To ultimaFila
            If Cells(i, "D") = "a" Then
               Cells(i, "D") = "aa"
           End If
 Next
End Sub

¡Gracias!  por el seguimiento y tu aporte. 

Lo probé y si funciona bien.

Solo que el único detalle es que me transfiere toda la información de la Fila y en realidad solo quiero que me transfiera las columnas que se han declarado (Columna A, B, C, D, E Y K). Por ello es que utilice el ciclo FOR.

En el archivo que te envié funciona, pero el único detalle es que el libro se abre y cierra por cada fila que se transfiere. 

Muchas gracias por la atención. Pero no encuentro la forma de hacerlo. 

NOTA: En el archivo no aparece datos en la columna K.

Adjunto tu rutina según lo solicitado en caso de que te sea útil no olvides valorar mi trabajo, saludos

Sub transferirDatosOtraHoja()
'by cecilio Perez Maqueda
    ruta = "C:\Users\I5\Desktop\"
    libro = "Prueba2.xlsx"
    If Dir(ruta & "\" & libro) = "" Then
        MsgBox "No se encuentra el libro Prueba2 en esta carpeta... verifica y vuelve a intentar.", , "Error"
        Exit Sub
    End If
    milibro = ActiveWorkbook.Name
    Workbooks.Open ruta & "\" & libro
    U2 = Sheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Row + 1
    With Workbooks(milibro).Sheets("Hoja1")
        .Activate
        ultimaFila = Sheets("Hoja1").Range("A" & Rows.Count).End(xlUp).Row
        For I = 11 To ultimaFila
            If Cells(I, "D") = "a" Then
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "a") = Range("A" & I)
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "b") = Range("B" & I)
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "c") = Range("C" & I)
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "d") = Range("D" & I)
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "G") = Range("E" & I)
                Workbooks("Prueba2.xlsx").Sheets("Hoja2").Cells(U2, "H") = Range("K" & I)
                U2 = U2 + 1
            End If
        Next
    End With
    Workbooks("Prueba2.xlsx").Save
    Workbooks("Prueba2.xlsx").Close
    MsgBox "Transferencia realizada exitosamente!", vbInformation, "Resultado"
    With ActiveSheet
        For I = 11 To ultimaFila
            If Cells(I, "D") = "a" Then
                Cells(I, "D") = "aa"
            End If
        Next
    End With
End Sub

¡Gracias! 

Muchas Gracias por las atenciones y tu disposición. 

Muy AGRADECIDO. 

¡SALUDOS!

Ha funcionado muy bien la macro :) 

2 respuestas más de otros expertos

Respuesta
1

Prueba esta macro busca todas las a en la columna DE en un solo paso sin necesidad de ciclos for y los transfiere al libro prueba 2, cambiando la a por aa.

Sub transferir_datos()
Set datos = Range("d1").CurrentRegion
With datos
    .Sort key1:=Range(.Columns(1).Address), order1:=xlAscending
    cuenta = WorksheetFunction.CountIf(.Columns(1), "a")
    fila = WorksheetFunction.Match("a", .Columns(1), 0)
    Set librodatos = Workbooks.Open("C:\Documents and Settings\Propietario\Mis documentos\prueba2.xlsm")
    Set destino = librodatos.Sheets("hoja2").Range("a1").Resize(cuenta)
    destino.Value = .Rows(fila).Resize(cuenta).Value
    .Replace what:="a", replacement:="aa"
End With
With ActiveWorkbook
    .Save
    .Close
End With
MsgBox "Transferencia realizada exitosamente!", vbInformation, "Resultado"
Set datos = Nothing
End Sub

¡Gracias!

El detalle de la macro que me transfiere toda la Fila completa y solo quiero que me transfiera la información que declarado en las primeras 5 columnas (A, B, C, DE, E Y K).

Gracias por la atención.

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas