Visual Basic para Aplicaciones - Macro plantilla asiento contable

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Macro plantilla asiento contable

Publicado por Quim (4 intervenciones) el 20/08/2016 12:22:53
Buenos dias,

Mi consulta es la siguiente. Trabajo en un departamento contable de una empresa y, entre otras cosas, tengo que elaborar un asiento de nóminas (salarios) mensualmente. Para ello me he creado una plantilla en Excel con 2 pestañas.
-En la primera pestaña aparece una tabla con todos los posibles datos que se pueden dar (pestaña DATOS).
-En la siguiente pestaña (pestaña ASIENTO) es donde tengo programadas 3 macros vinculadas a 3 botones:
a)El primer botón lo que hace es borrar cualquier dato que haya en la hoja para reiniciala (Esta macro funciona CORRECTAMENTE)
b)Un Segundo botón que simplemente copia exactamente los datos que haya de la pestaña DATOS (Esta otra macro también funciona CORRECTAMENTE).
c)Un tercer botón el cual ejecuta 2 acciones:
c.1) Selecciona todas las casillas de las columnas D y E que tengan valor cero y borra su contenido (Este proceso funciona CORRECTAMENTE)
c.2) Un segundo proceso que lo que hace es, rastrear una por una las lineas en que tanto la columna D como la E tengan valor "vacío" y si se da el caso de que estas 2 casillas estan en blanco, elimina la fila completa.

Es pues, en este último proceso donde mi macro no funciona del todo bien. El problema es el siguiente.
La macro, cuando encuentra un caso en que los valores de la columna D y E son vacios elimina la fila, PERO, una vez hecho el cursor se situa una casilla por debajo y luego empieza de nuevo con el siguiente registro. Esto provoca que se salte algunas lineas que SI cumplen la condición por lo que tengo que ejecutar varias veces la Macro para que el resultado final sea el deseado. No es que sea mucha molestia pero desearia que el proceso se ejectuar de una sola vez.
Para arreglar esto he intentado que, una vez se elimina una fila, hacer saltar la casilla activa una fila hacia arribar mediante la instruccion Activecell.offset(-1,0).Select , pero no funciona.

Si alguien pudiera echarme una mano en esto le estaría muy agradecido.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Macro plantilla asiento contable

Publicado por JuanC (565 intervenciones) el 21/08/2016 01:32:50
lo mismo pero resumido y 'simplón'... (basta con un solo botón que llame a CopiarDatos)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Option Explicit
 
Sub CopiarDatos()
ActiveSheet.Cells.Clear
Sheets("DATOS").Columns("A:F").Copy Sheets("ASIENTO").Range("A1")
 
Call CrearAsiento
End Sub
 
Sub CrearAsiento()
Dim rng As Range
Dim cell As Range
Dim u As Range
 
Set rng = Range("D5:D" & Range("D1000").End(xlUp).Row)
 
For Each cell In rng
    If cell.Value = 0 And cell.Offset(, 1).Value = 0 Then
       If u Is Nothing Then
          Set u = cell
       Else
           Set u = Union(u, cell)
       End If
    End If
Next
If Not u Is Nothing Then u.EntireRow.Delete
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Macro plantilla asiento contable

Publicado por Quim (4 intervenciones) el 21/08/2016 09:34:52
Muchisimas gracias, JuanC , es justo lo que necesitaba.

Un saludo ^_^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar