Excel - simplificacion codigo

   
Vista:

simplificacion codigo

Publicado por alfredo Torné Reverté (7 intervenciones) el 03/04/2013 19:45:33
Hola de nuevo Jcs,
Estoy siguiendo con mi control de faltas y tengo un par de problemas. El primero es anidar los 9 meses de que consta el curso. Y segundo la lentitud en que copia los datos de la matriz de una hoja a la otra, podria ir más ràpido? Os envio el codigo de un par de meses. Como podreis apreciar se mueve 8 celdas hacia la derecha cada mes " f= 8"

Sub pasardatos()
Dim e As Variant, f As Variant
Dim c As Variant, d As Variant
Dim i As Variant, j As Variant, MiMatriz(1 To 35, 1 To 7)
Dim advertencia As String

'------ SETEMBRE -----
If Range("H4").Text = "CFGS P3 MATI" Then


If Range("C4").Text = "SETEMBRE" Then 'si es SETEMBRE guardara les dades als dies de SETEMBRE.
c = 6
d = 2
e = Val(Range("E4").Value) * 40 - 37
f = 0
For i = 1 To 35
For j = 1 To 7
MiMatriz(i, j) = Worksheets("FALTES").Cells(c + i, j + d).Value
Worksheets("P3M").Cells(e + i, j + f).Value = Worksheets("FALTES").Cells(c + i, j + d).Value
Next j
Next i
Range("D7:I41").ClearContents
Range("H4").Select
End If 'fi de la instruccio de setembre.

'-------OCTUBRE-------

If Range("C4").Text = "OCTUBRE" Then 'si es OCTUBRE guardara les dades als dies de OCTUBRE.
c = 6
d = 2
e = Val(Range("E4").Value) * 40 - 37
f = 8
For i = 1 To 35
For j = 1 To 7
MiMatriz(i, j) = Worksheets("FALTES").Cells(c + i, j + d).Value
Worksheets("P3M").Cells(e + i, j + f).Value = Worksheets("FALTES").Cells(c + i, j + d).Value
Next j
Next i
Range("D7:I41").ClearContents
Range("H4").Select

End If 'fi de la instruccio de OCTUBRE.
Muchas gracias.
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

simplificacion codigo

Publicado por jcs (494 intervenciones) el 04/04/2013 09:11:15
Muy buenas.

Varias cosas que te puedo decir del código:
El código para cada mes es en esencia el mismo, así que se podría hacer uno solo que hiciera variar el dato “f”. ¿No hay otro dato en que se pueda sacar el mes diferente de C4? Porque si fuera numérico se podría convertir automáticamente. Si no es así, podrías utilizar una tabla, que con un BUSCARV te devolviera el valor de f en función de C4. Otra posibilidad es que en el código uses un SELECT CASE.

Otra cosa, según yo lo veo, la línea
MiMatriz(i, j) = Worksheets("FALTES").Cells(c + i, j + d).Value
No te sirve para nada

Todo lo anterior te va a hacer mejorar la rapidez de ejecución, pero muy poco, porque lo que realmente lo hace muy lento, es el par de bucles que hace que pase por ahí 245 veces, ejecutando instrucciones. Así, a ojo, yo creo que lo que puedes hacer es copiar todo el rango y luego pegarlo:

Con todo esto, el código podría quedar así:

SELECT CASE Range("C4").Text
Case “SETEMBRE”
f=0
Case “OCTUBRE”
f=0

END SELECT
c = 6
d = 2
e = Val(Range("E4").Value) * 40 – 37
Range("D7:I41").copy
Worksheets("P3M").select
Cells(e + 1, 1 + f). select
ActiveSheet.Paste
Worksheets("FALTES").select
Range("D7:I41").ClearContents
Range("H4").Select

Esto, si funciona, haría mejorar la rapidez de ejecución enormemente.

Ya me dirás.

Un saludo. Juanjo.
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