Foros del Web » Soporte técnico » Ofimática »

Necesito hacer una macro...AYUDA PORFAVOR

Estas en el tema de Necesito hacer una macro...AYUDA PORFAVOR en el foro de Ofimática en Foros del Web. Hola a todos, Voy a tratar de explicar lo mejor posible mi problema, todos los días me llega información en una hoja de excel sobre ...
  #1 (permalink)  
Antiguo 18/04/2007, 05:36
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Necesito hacer una macro...AYUDA PORFAVOR

Hola a todos,

Voy a tratar de explicar lo mejor posible mi problema,

todos los días me llega información en una hoja de excel sobre las visitas que ha realizado cada comercial, con datos como cliente, resultado visita, contacto, cargo...etc

el problema es que el formato de ésta hoja ésta hecho "bonito", me explico hay celdas unidas y no sigue una estructura de una columna p.e "CLIENTE" y debajo pones el nombre si no que los datos se escriben en la celda de al lado, sería una cosa así:

CLIENTE ............................. COMERCIAL .................................

CONTACTO ........................... CARGO ...................................

RESULTADO

.................................................. .................................................. ..........................................
.................................................. ........éstos son unas 16 celdas unidas.

Lo que me gustaría es hacer una hoja resumen con los resultados de cada visita donde CLIENTE, COMERCIAL, CONTACTO....sean las columnas y tirar hacia bajo con la información de cada día, para poder analizar los datos más adelante......Empecé haciendolo copiando y pegando los datos pero la información es cada vez más y necesito una forma más automática.
A B C D E
CLIENTE COMERCIAL CONTACTO CARGO RESULTADO

............. .................... .................. ............. ..........................
............. .................... ................. ............. ...........................
............. .................... .................. ............ ........................

Podeis ayudarme? estoy mirando la forma de hacer macros...pero hasta ahora he podido hacerlos en una de las hojas que me llegan insertando otra Hoja de Cálculo y haciendo que automáticamente al ejecutar la macro los datos se pasen a la primera fila de la nueva hoja de cálculo (únicamente lo he hecho yo manualmente y lo he grabado,...ya se no es gran cosa) pero como se puede hacer para que la siguiente hoja se pasen los datos a la fila 2....y asi sucesivamente.

Muchas gracias ¡¡¡¡
  #2 (permalink)  
Antiguo 18/04/2007, 07:13
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Sonrisa Necesito hacer una macro...AYUDA PORFAVOR

Hola:
Lamento decirte que -si bien- has sido claro, no has aportado demasiados detalles... Sin embargo: no todo está perdido !!!!

Todo parece indicar que lo que deseas es conformar un archivo (más que una hoja) con esos 5 campos por línea de información.

De ser así, te sugiero que aportes:

a) el código de tu macro (la que forma los 5 campos en la hoja auxiliar que has creado)

b) el nombre del archivo que recibes diariamente (¿es siempre el mismo nombre de archivo?) y el nombre de la hoja en la que reside la información (¿es siempre el mismo nombre de hoja?)

Estas preguntas tienden a prever que si el archivo informativo que recibes tiene siempre el mismo nombre y la info reside siempre en la misma hoja, entonces una macro más completa (que debería residir en tu archivo resumen) lo que tendría que hacer es :

a) ir al archivo informativo
b) tomar la información de los 5 campos
c) guardarla en el archivo resumen

Fíjate si puedes acercarnos esa info para ver que se puede hacer.

Saludos
  #3 (permalink)  
Antiguo 18/04/2007, 09:36
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Re: Necesito hacer una macro...AYUDA PORFAVOR

Gracias, por responder tan pronto....

Os doy más detalles,

- el nombre de cada archivo es distinto; todos empiezan por "Rapport_..nombrecliente......" y va cambiando el nombre del cliente.

- el nombre de la HOJA DE CÁLCULO si que es el mismo para todos, se llama PLANTILLA.

La idea es,

ir almacenando todos los archivos en una carpeta , crear un "LibroResumen" desde donde se ejecute la macro y pueda extraer la información como comento en el otro mail...

me han dicho que sería bueno hacer un libro de UNION (entre la carpeta con todos los archivos y el "LibroResumen") y ejecutar desde ahí la macro.

Si pudieras ayudarme sería fantástico, porque no tengo nivel alto en la creación de macros y esto se me hace grandísimo.

Supongo que el que cada archivo se llame de una forma complica también más la situación, pues la orden que tengo que poner es que abra uno- lo cierre-saque la información convertida en filas-la ponga en libro resumen-y así sucesivamente con todos.


Espero que se me entienda un poco más

Gracias otra vez
  #4 (permalink)  
Antiguo 18/04/2007, 10:22
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Re: Necesito hacer una macro...AYUDA PORFAVOR

Se me olvidaba poner el Código de la macro...esto es lo que he hecho de forma bastante rudimentaria

Cuando lo ejecuto hace que...
- se quite la combinación de todas las celdas que están combinadas en el archivo original.
- se inserte una nueva HOJA DE CÁLCULO (en el mismo archivo o LibroExcel, que se llama "Rapport_nombre cliente")
- se modifica el formato de los datos (cuando ya están pegados en fila en la hojanueva)
- y que los datos se peguen en columnas (como verás hay más de cinco, ya que puse esas cinco como ejemplo pero tengo un total de 22, es decir en el Libro Resumen al final abrán 22 columnas y "X" filas tantas como clientes sean visitados)




Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 18/04/2007 por
'
' Acceso directo: CTRL+z
'
Range("D5:G5").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("D7:G7").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Range("D9:G9").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("D11:G11").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("D13:G13").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("D15:G15").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I11:K11").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I13:K13").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I15:K15").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("C21:N22").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True

continua en el otro mensaje, es muy largo
  #5 (permalink)  
Antiguo 18/04/2007, 10:24
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Re: Necesito hacer una macro...AYUDA PORFAVOR

End With
Selection.UnMerge
ActiveWindow.SmallScroll Down:=0
Rows("21:21").Select
Selection.RowHeight = 13.5
ActiveWindow.ScrollRow = 10
ActiveWindow.ScrollRow = 11
ActiveWindow.ScrollRow = 12
ActiveWindow.ScrollRow = 13
ActiveWindow.ScrollRow = 14
ActiveWindow.ScrollRow = 15
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 17
ActiveWindow.ScrollRow = 18
ActiveWindow.ScrollRow = 19
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 21
ActiveWindow.ScrollRow = 22
ActiveWindow.ScrollRow = 23
Range("C25:G25").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I25:K25").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("M25:N25").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("C27:G27").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I27:K27").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("M27:N27").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("C29:G29").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("I29:K29").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("M29:N29").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("C35:E35").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("G35:H35").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("J35:K35").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("C38:E38").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("G38:H38").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
Selection.UnMerge
Range("J38:K38").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True


y continua
  #6 (permalink)  
Antiguo 18/04/2007, 12:38
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Sonrisa Necesito hacer una macro...AYUDA PORFAVOR

Mira:
Lo que has mandado hasta ahora, cumple con:
Cita:
Cuando lo ejecuto hace que...
- se quite la combinación de todas las celdas que están combinadas en el archivo original.
Te sugiero que reemplaces TODAS esas líneas de código (SI: dije TODAS) por:
Código:
 Cells.MergeCells = False 
Pruébalo, y -si todo anda bien- sigamos con el resto, o sea con:
Cita:
- se inserte una nueva HOJA DE CÁLCULO (en el mismo archivo o LibroExcel, que se llama "Rapport_nombre cliente")
- se modifica el formato de los datos (cuando ya están pegados en fila en la hojanueva)
- y que los datos se peguen en columnas (como verás hay más de cinco, ya que puse esas cinco como ejemplo pero tengo un total de 22, es decir en el Libro Resumen al final abrán 22 columnas y "X" filas tantas como clientes sean visitados)
Saludos
  #7 (permalink)  
Antiguo 24/04/2007, 02:43
 
Fecha de Ingreso: abril-2007
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Re: Necesito hacer una macro...AYUDA PORFAVOR

Gracias...va perfecto¡¡ lo que había hecho era poner a grabar la MACRO y hacerlo manual, por eso salían tantísimas cosas;ahora trabajo mucho mejor.


Para los siguientes pasos me habían dicho que utilizara ésta fórmula, pero sigue sin funcionarme, a ver si ves algo extraño


Sub copia()
'variables
Dim i As Integer
Dim origen As String
Dim destino As String
'el i emprezara en 1 y aumentara hasta 100
For i = 1 To 100
'Abro el primer archivo la i es el numero que ira aumentando
'archivo1.xls , archivo2.xls etc en la ubicacion C
Workbooks.Open ("C:\Archivo" & i & ".xls")
'Asigno el nombre del libro a una variable
origen = ActiveWorkbook.Name
'Abro el libro destino
Workbooks.Open ("C:\Archivo back.xls")
'Asino el nombre a variable
destino = ActiveWorkbook.Name
'localizo la ultima fila
finalrow = Range("A65536").End(xlUp).Row
'Copio y pego los valores
Workbooks(origen).Range("A2:M2").Copy Destination:=Workbooks(destino).Range("A " & finalrow + 1)
'Cierro y salvo lo necesario
Workbooks(origen).Close False
Workbooks(destino).Close True
Next

End Sub

Gracias
  #8 (permalink)  
Antiguo 24/04/2007, 04:59
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Sonrisa Re: Necesito hacer una macro...AYUDA PORFAVOR

Hola !
He realizado unos ligeros cambios a tu código como para que cumpla sus fines:
Código:
Sub Copia()
'variables
Dim i As Integer, Destino As Range
'Abro el libro destino
    Workbooks.Open ("C:\Archivo back.xls")
    Application.ScreenUpdating = False
'Asigno el nombre 'Destino' a un rango
    Set Destino = Range("A65536")
'La i es el numero que ira aumentando:
'archivo1.xls , archivo2.xls etc en la ubicacion C
    Do While Dir("C:\Archivo" & (i + 1) & ".xls") <> ""
        i = i + 1
        Workbooks.Open ("C:\Archivo" & i & ".xls")
'Copio y pego los valores
        Range("A2:M2").Copy _
            Destination:=Destino.End(xlUp).Offset(1, 0)
'Cierro y salvo lo necesario
        ActiveWorkbook.Close False
    Loop
    Application.ScreenUpdating = True
    Set Destino = Nothing
End Sub
a) Application.ScreenUpdating = False/True
Desactiva la actualización de la pantalla para acelerar el código de la macro.

b) Workbooks.Open ("C:\Archivo back.xls")
Se ejecuta UNA SOLA VEZ al comienzo y se deja abierto para ir agregando las sucesivas líneas.

c) Dir("C:\Archivo" & (i + 1) & ".xls")
Dudo que tengas 100 archivos de la forma Archivo'i'.xls de modo que cuando se detecte que se interrumpe la correlatividad, el "loop" se detiene

d) Set Destino = Range("A65536")
'Destino' deja de ser un "string" para ser un rango. Así, no se requiere especificar (está implícito, en realidad) 'Workbooks' ni 'Sheets'.

Pruébalo y después nos cuentas como te resultó.
Saludos

Última edición por mrocf; 24/04/2007 a las 05:22
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:54.