Saltar al contenido

Sistema de Carga de Datos


Ramo72

Recommended Posts

Estimados

Necesito ayuda con mi "sistema". El mismo basicamente permite la carga validada, y controlada de ciertos datos, para luego emitir reportes con informacion consistente, clara, y bien establecida (esto ultimo mediante otro macro en otro archivo, que todavia no he realizado).

Digamos que hasta hace un mes y medio no sabia nada en absoluto de macros, asi que lo que he hecho es fruto de la ayuda de muchos foros (incluido este) y tutoriales varios. Un rejunte de todo eso, trabajo y adaptacion. Y algo de lectura de algunos manuales.

Ahora, lo que necesito son consejos, para mejorara su funcionabilidad, y rapidez de respuesta. Dado que en el aprendizaje siento que me atropelle un poco la infraestructura normal o adecuada de comandos, procedimientos, etc.

Y ademas necesito algun tipo de solucion para una cuestion que hace a lo que mencione antes. Cuando realizo la carga de datos de useform a celdas, desde un listbox con varios datos, todos los datos que agrego "extralistbox" quedan en la primer linea. Yo necesito, o repetirlos y copiarlos como valor para evitar la acumulacion de formulas, o tomar los datos sin celdas vacias. Pude plantear lo primero, pero no esta funcionando como deberia (pueden verlo cuando miren los codigos)

Tambien tengo un problemita en la validacion de la carga de los textbox "desde" y "hasta". Es decir nose si existe otra forma mas adecuada para la carga con formato hora (00:00), dado que la validacion que yo hice, no es completamente eficaz.

Solo pido consejos, algun tutorial que pueda mirar, orientacion, y cualquier otra ayuda que me puedan ofrecer. Pido que lo miren y espero comentarios.

PD:

Las contraseñas son:

AyudaExcel1 pass: AE1

AyudaExcel2 pass: AE2

AyudaExcel3 pass: AE3

AyudaExcel4 pass: AE4

AyudaExcel5 pass: AE5 (esta permite ver todas las hojas y desbloquea el archivo

AyudaExcel6 pass: AE6

Para ver el archivo lo pueden bajar de este link, dado que subirlo directo al foro no me lo permitia por que superaba el tamaño minimo de 150 kb.

http://www.2shared.com/file/RHqdMpz5/MO_online.html[/HTML]

Saludos.

MO.part1.rar

MO.part2.rar

MO.part3.rar

MO.part4.rar

Enlace a comentario
Compartir con otras webs

Buenas.

Bueno dado que no ha habido respuesta empiezo a pensar que, el tema es muy complicado o muy largo, o incumple alguna reglamentacion, o el foro no trata con este tipo de casos.

Y dado que no puedo exigir respuesta pues me gustaria al menos, de alguien que sepa del tema, algun conocedor que tal vez no quiera o pueda responder por alguna de las causas antes mencionadas, que simplemente me indique o referencie hacia algun texto, sitio, tutoriales, etc que me ayude a mejorar los tiempos de procesamiento del archivo.

Por ejemplo metodos para reemplazar tanto loop. etc. y yo intentare entenderlos asi como he hecho con todo lo que he ido viendo para darle forma al macro este.

Saludos.

Enlace a comentario
Compartir con otras webs

Hola Ramo,

He adjuntado los archivos con el cargador del Foro.

Relacionado a tu consulta he de decirte que son malas fechas para las consultas, pero son buenas fechas para los respondones (Másters) del Foro, ya que la inmensa mayoría de ellos están disfrutando de unas merecidas vacaciones.

Te ruego que tengas paciencia.

Saludos.

Enlace a comentario
Compartir con otras webs

Bueno, luigi, he de tener paciencia.

Igualmente yo sigo trabajando y dandole vueltas al archivo asi que vamos con los avances:

Logre hacer que la copia de datos "extralistbox" sea eficaz.

Antes yo utilizaba, y de esta manera me cambiaba los datos que ya habian sido cargados por los nuevos.

 
[COLOR=#008000]'Loop que repite valores anteriores cuando se carga con listbox y los pega como valores
[/COLOR]Sheets("Carga").Range("BA3").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate

If [COLOR=#0000ff]ActiveCell.Offset(0, -2) <> "" [/COLOR]Then
ActiveCell.Offset(0, 0).FormulaR1C1 = "=REPT(R[-1]C,1)"
ActiveCell.Offset(0, 1).FormulaR1C1 = "=REPT(R[-1]C,1)"

End If
Loop
'Selecciona todo, copia y pega valores.
Range("BA3").Activate
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("BA3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
[/CODE]

Lo unico que hice es restringir mas el condicional y ahora funciona bien, es decir, no reemplaza los datos cargados previos a la carga actual

[CODE] [COLOR=#008000]'Loop que repite valores anteriores cuando se carga con listbox y los pega como valores
[/COLOR] Sheets("Carga").Range("BA3").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate

If [COLOR=#0000ff]ActiveCell.Offset(0, -2) <> "" And ActiveCell.Offset(-1, 0) <> "" And ActiveCell.Offset(0, 0) = "" [/COLOR]Then
ActiveCell.Offset(0, 0).FormulaR1C1 = "=REPT(R[-1]C,1)"
ActiveCell.Offset(0, 1).FormulaR1C1 = "=REPT(R[-1]C,1)"

End If
Loop

'Selecciona todo, copia y pega valores.
Range("BA3").Activate
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("BA3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
[/CODE]

[b]Aprovecho de paso para simplificar dos de los problemitas que estoy teniendo y con los que realmente necesito ayuda.

[/b]Tengo dos listboxs. En estos se debe poder carga horas en formato 00:00

es decir que ninguno de los datos de los listbox puede ser:

- caracter

- menor a 0

- mayor a 23:59 [color=#ff0000](implicando esto que a su vez los minutos nunca puedan ser mayores a 59, es decir que no pueda existir un 21:80 por ejemplo)

[/color]Ademas el primer listbox nunca debe poder ser superior en valor al segundo

yo he logrado hacer todo eso mediante el siguiente codigo, excepto lo que esta en rojo.

[CODE]Private Sub Hastatxt_Change()
On Error Resume Next
If Not IsNumeric(Right(Hastatxt, 1)) And Right(Hastatxt, 1) <> "/" Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
largo_entrada = Len(Hastatxt)
Select Case largo_entrada
Case 2
If Right(Hastatxt, 1) = ":" Then
Desdetxt = Left(Hastatxt, Len(Hastatxt) - 1)
Else
Hastatxt = Hastatxt & ":"
End If
Case 1
If Hastatxt.Text > 2 Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
Case 2
If Hastatxt.Text > 23 Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
Case 4
If Hastatxt.Text > "23:59" Then
Hastatxt = Left(Hastatxt, Len(Hastatxt) - 1)
End If
End Select
If Len(Hastatxt) > 5 Then Hastatxt = Left(Hastatxt, 5)
If Len(Hastatxt) < 5 Or Hastatxt.Text <= Desdetxt.Text Then
Validarcommandi.Enabled = False
Validarcommandm.Enabled = False
Else
Validarcommandi.Enabled = True
Validarcommandm.Enabled = True
End If
If Len(Hastatxt) = 5 And Len(Replace(Hastatxt, ":", "")) < 3 Then
Hastatxt = Clear
End If
End Sub
[/CODE]

El segundo problemita

Tengo un command button que necesito que no llame a un userform cuando no selecciono nada de un listbox y otros textbox requeridos.

Yo realice este codigo

[CODE]Private Sub Validarcommandm_Click()
[COLOR=#008000]'evita la validacion previa al completamiento de los datos requeridos
[/COLOR]If [COLOR=#ff0000]Sheets("Form").Presentismolist.Selected(i) = False [/COLOR]Or Tipocom = "" Or Subtipocom = "" Or Desdetxt = "" Or Hastatxt = "" Then
MsgBox "Faltan datos por Ingresar", vbExclamation, "Ojo"
Exit Sub
Else
[COLOR=#008000]'evita la colocación de una fecha superior a la actual
[/COLOR] If CDate(Fechacal.Value) > Date Then
MsgBox "Fecha no puede ser mayor a la de hoy", vbExclamation, "Ojo"
Exit Sub
Else
If Tipocom = "Traspaso_Temporal" Or Tipocom = "Traspaso_Permanente" Then
If Haciacom = "" Then
MsgBox "Se requiere completar el campo Hacia", vbExclamation, "Ojo"
Exit Sub
End If
End If
End If
[COLOR=#008000]'llama userform de validacion y llama procedimeinto de limpieza
[/COLOR]Validación.Show
Call Clearform
End If
End Sub
[/CODE]

la parte en rojo no esta funcionando por que seleccionando o no ahora nunca llama al userform

Bueno espero alguien tenga una idea sobre esto asi ya voy dandole los ultimos retoques para comenzar con la otra parte !

Saludos

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
    • Muchísimas gracias @Victor7 es realmente increíble. Ahora toca aprender un poco sobre como esta montada esta formula,  pero me ha encantado. Es justo lo que necesitaba. Solo he notado algún fallo cuando los datos no están bien introducidos, por ejemplo hay registro en el punto de control 2 y no en el tres, pero eso en teoría no debería pasar, pero ya sabes como es esto jajaj.  Muchas gracias de verdad. Un saludo
    • Hola, Si lo he entendido bien, te adjunto archivo que creo puede cumplir tus expectativas. En la nueva hoja 'DVU(b)' están los resultados.  Tiene 3 fórmulas: La primera está en A1, que repetirá los títulos de la hoja 'DATAGlobal'.  A medida que se vayan actualizando en esta última hoja, también irán apareciendo automáticamente en la hoja de resultados. Ahora mismo he puesto como rango A1:CB1, pero puede incrementarse de ser necesario. La 2ª fórmula es la de A2:  devuelve las 'Unidades' únicas de la hoja principal.  A este respecto, he colocado como rango de análisis A2:A1900; si prevés que pudiere haber más registros, puedes ampliarlo sin problemas a A2:A19000, o incluso A2:A190000, o más. Y la 3ª fórmula está en B2:  aquí se recogen las cantidades de la columna B que constan en la última aparición de la 'unidad' que se trate, que es la que figura en la celda de la izquierda.  Con la última aparición, me vengo a referir, por ejemplo, que en la fila 4, que recoge la unidad ZCRLA63832, el primer resultado (12,5) lo ha obtenido de B39 y no de A4.  Si no son los mismos, los resultados no serán los esperados.  Y el siguiente resultado (100) es C39.  Esta fórmula también evalúa ahora mismo el rango 2:1900; habrá que ampliarlo dejándolo igual que en la 2ª fórmula, si es el caso. Esta 3ª fórmula, de B2, la puedes copiar horizontalmente hasta donde quieras; siempre devolverá una matriz dinámica con los resultados esperados. Espero haber explicado bien el funcionamiento de la hoja. Saludos, Progreso Unidades (C).xlsx
    • Gracias @Victor7  Adjunto un nuevo documento en el que creo que se puede ver mejor la información con la que tengo que trabajar.  En la primera pagina se muestran las unidades que se fabrican, cada una de ellas con un numero de referencia único.  Estas unidades pasan por un punto de control donde se mide el nivel de carga de una batería, dando el % de carga.  Días mas tarde la misma unidad pasa por un 2º punto de control, creando un nuevo registro con el mismo numero de referencia de la pieza, con los datos de la 1º y la 2º lectura.  Días mas tarde la misma unidad pasa por un 3º punto de control, creando un nuevo registro con el mismo numero de referencia de la pieza, con los datos de la 1º, la 2º y la 3º lectura... así sucesivamente hasta terminar el proceso.  Si, es una cadena de producción y cada unidad fabricada tiene su numero de referencia único y hace el mismo proceso. Además en una cantidad bastante alta, entre 500-600 diarios.   Aquí posiblemente es donde no me haya explicado bien. Si nos fijamos en el nuevo archivo, los puntos de control siempre van a ser los mismos. Pueden variar en un futuro y según alguna circunstancia, pero en principio, las columnas donde tienen que ir los datos serán siempre los mismos.    De nuevo muchas gracias por vuestra ayuda. Es un placer tratar con gente así.  Un saludo jose Progreso Unidades.xlsx
    • Saludos @JasallBcn funciona excelente mil gracias
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.