Ayudame con este bucle por favor

Lo que sucede es que tengo que pasar unos datos repetidos de una hoja de excel a otra como se ve aquí
permiso|propietario|cedula etc etc y tengo este código en una macro
Sub probando()
Dim Permiso As Long
Dim Predio, Vereda, Municipio, Valor As String
Dim celda As String
Permiso = InputBox("Escriba el Permiso a buscar")
Sheets("Hoja1").Select
Range("A30").Select
Do While ActiveCell.Value <> ""
If ActiveCell.Value = Permiso Then
celda = ActiveCell.Address
Predio = ActiveCell.Offset(0, 4).Text
Vereda = ActiveCell.Offset(0, 5).Text
Municipio = ActiveCell.Offset(0, 6).Text
Valor = ActiveCell.Offset(0, 15).Text
End If
If ActiveCell.Value <> "" Then
Sheets("Hoja2").Select
ActiveSheet.Range("B22").Select
ActiveCell.Value = "Permiso"
ActiveCell.Offset(0, 1).Value = "Predio"
ActiveCell.Offset(0, 2).Value = "Vereda"
ActiveCell.Offset(0, 3).Value = "Municipio"
ActiveCell.Offset(0, 5).Value = "Valor"
ActiveCell.Offset(1, 0).Select
Do
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
Loop
Loop Until check = ""
If ActiveCell.Value = "" Then
ActiveCell.Value = Permiso
ActiveCell.Offset(0, 1).Value = Predio
ActiveCell.Offset(0, 2).Value = Vereda
ActiveCell.Offset(0, 3).Value = Municipio
ActiveCell.Offset(0, 5).Value = Valor
Else
Exit Do
End If
End If
Sheets("Hoja1").Select
Range(celda).Select
ActiveCell.Offset(1, 0).Select
Loop
End Sub
¿El código me pasa los datos que necesito pero al final empieza a repetirme el ultimo dato de una y otra y otra vez... Como puedo detener este bucle para que tan solo me sagan los datos que son sin que se me repitan? Por favor necesito tu ayuda... Te lo agradecería.

1 Respuesta

Respuesta
1
Utilizando el 'Acivecell' y el 'Offset' es muy fácil que te compliques la ejecución del proceso.
Te dejo un código que hace algo ¿similar? A lo que quieres hacer, o eso me parece.
Option Explicit
Sub copiarDatosPermiso()
    Dim permiso As String
    Dim nLin1 As Long
    Dim nLin2 As Long
    permiso = InputBox("Escriba el Permiso a buscar")
    ' Supongo que el permiso está en la columna A de la hoja1 a partir de la fila 30
' y los dejamos en la hoja2 a partir de la fila 22
nLin1 = 30
    Do While Sheets("hoja1"). Cells(nLin1, 1) <> "" ' La columna 1 es la A
        If Sheets("hoja1").Cells(nLin1, 1) = permiso Then
            ' Si es el permiso... copiamos los datos a la hoja 2
            Sheets("hoja2"). Cells(nLin2, 2) = permiso ' Empezará en B22, 23,...
            Sheets("hoja2").Cells(nLin2, 3) = Sheets("hoja1"). Cells(nLin1, 5) ' Copia de la hoja1 columna E (la 5) a la hoja2 columna C (la 3)
            Sheets("hoja2").Cells(nLin2, 4) = Sheets("hoja1"). Cells(nLin1, 6) ' Copia de la hoja1 columna F (la 6) a la hoja2 columna D (la 4)
            Sheets("hoja2").Cells(nLin2, 5) = Sheets("hoja1"). Cells(nLin1, 7) ' Copia de la hoja1 columna G (la 7) a la hoja2 columna E (la 4)
            Sheets("hoja2").Cells(nLin2, 7) = Sheets("hoja1"). Cells(nLin1, 16) ' Copia de la hoja1 columna P (la 16) a la hoja2 columna G (la 7)
            nLin2 = nLin2 + 1 ' Línea para la siguiente vez que coincida el permiso
        End If
        nLin1 = nLin1 + 1
    Loop
End Sub
Lo puse a correr pero no logro entender mucho la parte del nLin2, lo cambie por la fila 22 y no me bota los datos como quiero... Ven te explico como es lo que quiero hacer
tengo unos datos en la hoja1, los cuales los debo pasar a la hoja 2 en los cuales uno de ellos es un código repetido (´puede ser numero de factura por ejemplo) y como sabes una factura puede tener varios valores de pagos el numero que se repite es el de código que esta ubicado en la A30 de la hoja 1 los demás datos ubicados en la misma fila se repiten para cada comprador podría ser y varia el alor pagado ejemplo
código comprador cedula dirección ciudad valor
100 juan 555 555 calle siempreviva 123 nueva york $300
200 pedro 777 777 calle abc 987 los ángeles $400
100 juan 555 555 calle siempreviva 123 nueva york $500
800 luis 222 222 Av juan valdez 678 miami $200
más o menos estos son los datos como salen (aunque tiene muchos más) o como se puede ver y los paso de la hoja1 a las dos
NLin1 y nLin2 son variables que van marcando el número de línea de las páginas "hoja1" Y "hoja2" respectivamente.
Si quieres recorrer toda la página 1 desde la línea... digamos 5 hasta encontrar una línea en blanco, tendrías que inicializar el contador "nLin1" con el valor 5. Esto es:
    nLin1 = 5
El contador nLin2 hace algo similar para la página "hoja2", pero este sólo se va incrementado cuando encuentra el código buscado en la "hoja1".
Como vi en tu código que escribías en B22, inicialice esta variable con el valor 22 (para que sea esa la primera línea que escriba... pero no la única.
El código que te puse busca en la columna "A" de la hoja1, desde A30 en adelante, el valor que le tecleas en el inputbox y, en caso de encontrarlos está copiando los datos en la hoja2 a partir de la línea 22. La primera vez que encuentre el código copiará los datos a la linea 22, la siguiente línea que encuentre la copiará en la 23 y así sucesivamente.
En tu ejemplo, si pides buscar el código 100, escribirá en la línea 22 de la hoja2 los datos de la fila de hoja1 que tiene valor 300$ y en la línea 23 escribiría los datos con el valor 500$.
No sé si me explico lo que hace el código y no acabo de estar seguro de que sea eso lo que buscas.
Escríbeme si no es eso y me lo cuentas un poco más en detalle. Y mejor con ejemplos porque a veces aclaran más las ideas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas