Macro, que termine el proceso cuando la celda esta vacía

Hice una macro que se ejecuta hasta un numero de veces, ¿la pregunta es se puede hacer que se ejecute hasta la celda vacía?

Copio la macro.

Sub Macro2()
'
' Macro1 Macro
'
' Acceso directo: CTRL+e
Application.ScreenUpdating = False
For i = 1 To 500
Dim valor As Integer
valor = ActiveCell
Application.CutCopyMode = False
Selection.Copy
Sheets( BASES ).Select
Range( A2:A15 ).Select
Selection.Find(What:=valor, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range( A1 ).Select
Range(Selection, Selection.End(xlToRight)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets( CONVERSE ).Select
ActiveCell.Offset(0, 1).Range( A1 ).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Range( A1 ).Select
Next i
Application.ScreenUpdating = True
MsgBox prompt:= Proceso Finalizado , Buttons:=vbOKOnly
End Sub

1 Respuesta

Respuesta
1

Hay varias formas de hacer lo que pides. Quizá la mas correcta es usar un bucle while o loop while comprobando que la celda en cada iteración no está vacía. La forma más sencilla a la vista de tu código seria calcular la ultima celda no vacía y usar el valor en el bucle for.

Tendrías que añadir al principio de la macro:

Dim maxi As Integer
maxi = Range("A65000").End(xlUp).Row

Y cambiar el bucle.

For i = 1 To maxi

mil gracias por la velocidad de tu respuesta, pero no logro hacer que funcione probé de ponerlo de varias formas.

me podrías orientar un poco por favor, por que no se en que estoy fallando.

gracias !!!!

Sub Macro2()
'
' Macro1 Macro
'
' Acceso directo: CTRL+e
Application.ScreenUpdating = False
Dim maxi As Integer
maxi = Range( A65000 ).End(xlUp).Row
For i = 1 To maxi
Dim valor As Integer
valor = ActiveCell
Application.CutCopyMode = False
Selection.Copy
Sheets( BASES ).Select
Range( A2:A15 ).Select
Selection.Find(What:=valor, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range( A1 ).Select
Range(Selection, Selection.End(xlToRight)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets( CONVERSE ).Select
ActiveCell.Offset(0, 1).Range( A1 ).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Range( A1 ).Select
Next i
Application.ScreenUpdating = True
MsgBox prompt:= Proceso Finalizado , Buttons:=vbOKOnly
End Sub

El rango desde el que calculas la ultima fila va entre comillas. Ahí al menos te dará un error sintáctico si tienes puesto Option Explicit puesto que interpreta que A65000 es una variable que no está definida. Si no tienes esa opción al principio del módulo, para obligarte a declarar las variables entonces interpreta que es una variable de tipo string y claro está vacía y da error en ejecución.

Si es eso lo que te pasa, has comprobado en tus carnes porqués es bueno forzar la declaración de variables escribiendo al inicio del módulo: Option Explicit.

Si ese no es el problema, tendría que saber si el error es sintáctico o en ejecución y que hace o no hace tu código que quieres que no haga o haga.

muchas gracias por tu ayuda,

te dejo como lo solucione

GRACIAS !!!!!!!!

Sub Macro2()
'
' Macro1 Macro
'
' Acceso directo: CTRL+e
Application.ScreenUpdating = False
For i = 1 To InputBox( Tipear cantidad de SKU , OK )
Dim valor As Integer
valor = ActiveCell
Application.CutCopyMode = False
Selection.Copy
Sheets( BASES ).Select
Range( B2:B15 ).Select
Selection.Find(What:=valor, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range( A1 ).Select
Range(Selection, Selection.End(xlToRight)).Select
Application.CutCopyMode = False
Selection.Copy
Sheets( CONVERSE ).Select
ActiveCell.Offset(0, 1).Range( A1 ).Select
ActiveSheet.Paste
ActiveCell.Offset(1, -1).Range( A1 ).Select
Next i
Application.ScreenUpdating = True
MsgBox prompt:= Proceso Finalizado , Buttons:=vbOKOnly
End Sub

Si te sirve tener que indicar la cantidad cada vez, por mi no hay problema. El método que yo te proponía calcula cual es la ultima celda de la columna A y te evita tener que saberla tú. Si no cambia mucho el número de celdas también puedes usar una celda vacía para indicar el número y que el bucle for lo obtenga de allí. En fin, hay varias formas. Usa la que mejor te convenga o mas te guste.

Por favor, cierra la pregunta y valora la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas