Macros con condiciones para los case

Dante, te mando las condiciones para los case

Todas las cuentas las tengo ordenadas por la columna "A" y las cuentas se encuentran agrupadas por numero de cuenta

En mi hoja "base" actual de mi libro Base de datos 2015 tengo estas cuentas

CASE 1244(columna de cuenta):

  1. Columna "A"debe de ser igual a (Letra A)
  2. Columna "B" debe de ser igual a ('00005)
  3. Columna "D" debe de ser igual a "cero" o "vacio"
  4. Por lo cual si existen 10 cuentas deberá copiarlas (columna "C") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
  5. Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"

case 2258(esta columna es la cuenta):

  1. Columna "A"debe de ser igual a (Letra C)
  2. Columna "B" debe de ser igual a ('00005)
  3. Columna "D" debe de ser igual a "cero" o "vacio"
    1. Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
  4. Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"

1 respuesta

Respuesta
1

No veo la diferencia entre 1244 y 2258, ambas se copian en la hoja "cuenta", en la celda A2 y ejecutas la macro "validacion_pasivos", ¿es correcto? para eso no necesitas un case.

Perdón Dante te corrijo el case, eh modificado y agregado lo correcto, es que solo se copio sin modificar el case

CASE 1244(columna de cuenta):

  1. Columna "A"debe de ser igual a (Letra A)
  2. Columna "B" debe de ser igual a ('00005)
  3. Columna "D" debe de ser igual a "cero" o "vacio"
  4. Por lo cual si existen 10 cuentas deberá copiarlas (columna "C") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
  5. Ejecutar macro Run "ACTIVOS.xlsm!validacion_pasivos"

case 2258(esta columna es la cuenta):

  1. Columna "A"debe de ser igual a (Letra A)
  2. Columna "B" debe de ser igual a ('00100)
  3. Columna "D" debe tener una referencia diferente de "cero"
  4. Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
  5. Ejecutar macro Run "ACTIVOS.xlsm!validacion_Activos"

case 1233 (esta columna es la cuenta):

  1. Columna "A"debe de ser igual a (Letra C)
  2. Columna "B" debe de ser igual a ('00100)
  3. Columna "D" debe tener una referencia diferente de "cero"
  4. Por lo cual si existen 10 cuentas deberá copiarlas (columna "D") y pegarlas en el archivo Activos.xlsm en la hoja "cuenta " Celda "A2"
  5. Ejecutar macro Run "ACTIVOS.xlsm!validacion_Activos"

1. Ya no entendí, ¿en cuál columna están las cuentas? en la C o en la D?

2. Las cuentas están ordenadas, es decir, primero están todas las 1233, ¿luego las 1244 y por último las 2258?

3. Nuevamente veo que la 2258 y 1233 tienen la misma condición, ¿si se va a realizar lo mismo no tiene caso ponerlos en diferente case?

Si se te complican los ejemplos, no trates de hacer el código, simplemente pon una imagen y con colores y comentarios me explicas qué quieres pasar y en otra imagen me pones en dónde lo quieres pegar. Así para cada caso de cuenta.

1.- En la columna D

2.- No las cuentas están ordenadas por la columna A, primero (Letra A) y luego (Letra C)

3.- La diferencia entre estas dos cuentas es el punto 1 y evidentemente el numero de cuenta.

Por favor

Pero se van a copiar de todas formas todas las cuentas a la celda A2 sin importar la letra y se va a ejecutar la misma macro "validacion_Activos"

Por eso te pido tus imágenes.

Tienes esto:

"Columna "D" debe tener una referencia diferente de "cero""

"Columna "D" debe de ser igual a "cero" o "vacio""

¿Entonces en la "D" tienes referencias o cuentas?

Disculpa que no entienda, pero ahora está menos clara la explicación

Dante ya te entendí. Pero no me explique lo que pasa es que para el primer case se copiara la cuenta. Y para los otros dos se va a copiar la referencia

Y siempre se deben pegar a partir de la celda A2. ¿Entonces hay que limpiar primero lo que haya en la celda A2 hacia abajo y luego pegar lo nuevo?

Si por favor dado que ejecutará ese ciclo y luego pegar los nuevos datos y ejecutar 

Te anexo la macro

Sub EjecutarMacros()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set l1 = ThisWorkbook
    Set h1 = l1.ActiveSheet
    '
    ChDir l1.Path & "\"
    On Error Resume Next
    Set l2 = Workbooks.Open("ACTIVOS.xlsm")
    On Error GoTo 0
    Set h2 = l2.Sheets("cuenta")
    '
    tipos = Array("A", "A", "C")
    texto = Array("00005", "00100", "00100")
    conta = Array(1244, 2258, 1233)
    macro = Array("validacion_pasivos", "validacion_activos", "validacion_activos")
    colum = Array("C", "D", "D")
    refer = Array(1, 2, 2)
    '
    l1.Activate
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    For i = LBound(conta) To UBound(conta)
        h1.Range("A1:D" & u).AutoFilter Field:=1, Criteria1:=tipos(i)
        h1.Range("A1:D" & u).AutoFilter Field:=2, Criteria1:=texto(i)
        h1.Range("A1:D" & u).AutoFilter Field:=3, Criteria1:=conta(i)
        If refer(i) = 1 Then
            h1.Range("A1:D" & u).AutoFilter Field:=4, Criteria1:="=0", _
            Operator:=xlOr, Criteria2:="="
        Else
            h1.Range("A1:D" & u).AutoFilter Field:=4, Criteria1:="<>0", _
            Operator:=xlAnd, Criteria2:="<>"
        End If
        u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
        If u1 > 1 Then
            u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
            If u2 < 2 Then u2 = 2
            h2.Range("A2:A" & u2).ClearContents
            h1.Range(colum(i) & "2:" & colum(i) & u1).Copy h2.[A2]
            Run "ACTIVOS.xlsm!" & macro(i)
        End If
    Next
    l2.Close True
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    MsgBox "Proceso terminado", vbInformation
End Sub

S a l u d o s . D a n t e   A m o r

Recuerda valorar la respuesta.

¡Gracias!  Dante Experto como siempre el mejor 

Amigo muy buenos días, perdón que te moleste, y tan temprano pero esta macro corre pero no ejecuta mis macros, de hecho solo dice proceso terminado pero no entra en ningún ciclo. me puedes auxiliar por favor

Para que se ejecuten tus macros tienes que tener más de un dato en la columna A

Ok dante gracias por tu respuesta, pero me aparece el código en amarillo en esta parte

u2 = h2.Range("A" & Rows.Count).End(xlUp).Row

¿Y qué mensaje de error te aparece en pantalla?

Si modificaste algo en la macro, escribe cómo dejaste la macro.

Gracias Dante por tu atención, lo que esta en negritas me lo marca en amarillo


Sub EjecutarMacros()

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set l1 = ThisWorkbook
Set h1 = l1.ActiveSheet
'
ChDir l1.Path & "\"
On Error Resume Next
Set l2 = Workbooks.Open("Saldos HA26.xls")
On Error GoTo 0
Set h2 = l2.Sheets("DATOS")
ruta = l2.Path & "\"
lib2 = ruta & "MP55_1.xls"
Set l1 = Workbooks.Open(lib2)
Set h1 = l1.Sheets("DATOS")
'
tipos = Array("C", "C", "A")
texto = Array("00897", "00100", "00101")
conta = Array("15053102023192", "15053100003168", "23113100003173")
macro = Array("Obtiene_saldos_en_HA26_por_referencia", "validacion_activos", "validacion_Pasivos")
colum = Array("I", "G", "G")
refer = Array(1, 2, 2)
'
l1.Activate
If h1.AutoFilterMode Then h1.AutoFilterMode = False
u = h1.Range("A" & Rows.Count).End(xlUp).Row
For i = LBound(conta) To UBound(conta)
h1.Range("A1:I" & u).AutoFilter Field:=1, Criteria1:=tipos(i)
h1.Range("A1:I" & u).AutoFilter Field:=7, Criteria1:=texto(i)
h1.Range("A1:I" & u).AutoFilter Field:=8, Criteria1:=conta(i)
If refer(i) = 1 Then
h1.Range("A1:I" & u).AutoFilter Field:=9, Criteria1:="=0", _
Operator:=xlOr, Criteria2:="="
Else
h1.Range("A1:I" & u).AutoFilter Field:=9, Criteria1:="<>0", _
Operator:=xlAnd, Criteria2:="<>"
End If
u1 = h1.Range("A" & Rows.Count).End(xlUp).Row
If u1 > 1 Then
u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
If u2 < 2 Then u2 = 2
h2.Range("A2:A" & u2).ClearContents
h1.Range(colum(i) & "2:" & colum(i) & u1).Copy h2.[A2]
Run "Saldos HA26.xls!" & macro(i)
End If
Next
l2.Close True
If h1.AutoFilterMode Then h1.AutoFilterMode = False
MsgBox "Proceso terminado", vbInformation
End Sub

¿Cuándo lo ejecutas te envía un mensaje de error?

¿Qué mensaje de error te aparece?

Si modificaste la macro, ¿dime qué le cambiaste?

Cambie solo las columnas de las cuentas, el nombre de mi archivo. el rango de a hasta I. Y AutoFilter Field:=9

Estás intentando abrir este libro:

"Saldos HA26.xls"

Pero no existe ese archivo, revisa bien el nombre y la extensión.

Quita esta línea de la macro

On Error Resume Next

Actualiza el nombre del libro y ejecuta nuevamente la macro

LISTO YA SE EJECUTO pero no me corre nada de las macros, de hecho solo hace el filtro. pero no entra en ningún ciclo

No sé a que te refieres con "no entra en ningún ciclo"

La macro funcionaba bien!, pero modificaste la macro.

La macro tenía esto:

    tipos = Array("A", "A", "C")
    texto = Array("00005", "00100", "00100")
    conta = Array(1244, 2258, 1233)
    macro = Array("validacion_pasivos", "validacion_activos", "validacion_activos")
    colum = Array("C", "D", "D")
    refer = Array(1, 2, 2)

Y ahora pusiste esto:

tipos = Array("C", "C", "A")
texto = Array("00897", "00100", "00101")
conta = Array("15053102023192", "15053100003168", "23113100003173")
macro = Array("Obtiene_saldos_en_HA26_por_referencia", "validacion_activos", "validacion_Pasivos")
colum = Array("I", "G", "G")
Refer = Array(1, 2, 2)

Entonces no entiendo dónde están los cuentas y qué textos vas a buscar,

Antes las cuentas eran números, ahora tienes textos.

Si modificas la macro INcorrectamente, no te va a filtrar los datos y entonces no va a copiar nada.

La macro te la entregué funcionando con los datos que solicitaste, pero si cambias los datos de columna o el tipo, tengo que realizar ajustes en la macro y volver a probar.

Ponerme a revisar todos los cambios que le hiciste a la macro, también me lleva tiempo, mejor crea una nueva pregunta y me específicas claramente en dónde están los datos y me pones ejemplos reales, porque en tus ejemplos anteriores tenías cuenta como 1244 y ahora tienes esto "15053102023192" y no es lo mismo buscar 1244 que "15053102023192", entonces tengo que probar con datos reales y entregarte la macro funcionando para lo que pides.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas