Crear una base de datos

23/03/2009 - 18:29 por José Rafael | Informe spam
Necesito crear una base de datos en la hoja "Base" de un libro excel llamado
"Carpinterias", cuya hoja1 contiene en la columna A:A la lista de nombres de
pueblos que corresponde exactamente a las hojas o pestañas restantes del
libro.
Al abrir cada hoja o pestaña (que corresponde al nombre del pueblo), el dato
de la carpinteria o carpinterias se encuentran en las cuatro primeras filas
de cada columna, es decir: A1=Nombre; A2=Dirección; A3=Población; A4=
teléfono.
Si hubiera mas de una carpinteria en ese pueblo (hoja) la siguiente
carpinteria estaría en la columna B y así sucesivamente, la tercera en la
columna C, etc...
Sería de agradecer un código que vaya recorriendo todas las hojas y
escribiendo en la hoja "Base" (x filas en horizontal) los 4 datos que
figuran en las cuatro primeras filas de cada columna empezando por la
columna A y "recorriera" la siguiente columna B por si hubiera mas datos y
asi sucesivamente hasta que no encontrara mas datos y entonces pasara a la
siguiente hoja.
El objetivo es tener los datos agrupados en una sola hoja llamada "Base".
Ideal es tener un botón asociado al código VBA, en la hoja "Base" que ponga
en marcha la macro.
Tengo 5 libros distintos por provincias y de ellos, hay libros que pueden
tener 100 o mas hojas y en cada una de ellas al menos una carpinteria
(columna A, cuatro primeras filas).
Saludos
José Rafael de Valencia (España)

Preguntas similare

Leer las respuestas

#6 José Rafael
25/03/2009 - 12:13 | Informe spam
Por cierto, se me olvidaba.. el proceso se interrumpe con este mensaje:

Se ha producido el error '6' en tiempo de ejecución:
Desbordamiento

y si le doy al botón depurar está detenido en la linea :
Carp = Carp + 1

si le doy al botón finalizar presenta la hoja "base" con casi todos las
hojas controladas menos las últimas (+-10 hojas mas) y me pone los datos en
filas horizonales (hasta la 255) pero repetido el mismo dato en las cuatro
columnas tal y como te decía en mi anterior post.

Este es el código modificado que me pasaste...



Sub Carpinterias()
Dim n As Byte, Col As Byte, Carp As Byte
Application.ScreenUpdating = False
For n = 2 To Worksheets.Count
With Worksheets(n)
For Col = 1 To .Range("iv1").End(xlToLeft).Column
Carp = Carp + 1
Cells(Carp, 1).Resize(, 4).Value = .Cells(1, Col).Resize(4).Value

Next
End With
Next
End Sub




Saludos y gracias de nuevo...
José Rafael


"José Rafael" escribió en el mensaje
news:OPjq%
Hola Héctor:
Los datos de cada hoja del libro son por columnas: Fila 1 = Nombre, filas
2= Dirección, Fila 3 = Población, Fila 4= Teléfono.
Con el cambio propuesto me escribe en sucesivas filas horizontales el
primer dato de cada carpinteria (Fila 1) en las cuatro columnas. A,B,C y D
Lo que necesito es que el segundo dato (Fila 2) me lo ponga en la columna
B, el tercero (Fila 3) en la C y el cuarto (Fila 4) en la D. > (Todos
en la misma fila del la hoja "base") y así sucesivamente por filas ...
Sé que debe ser muy fácil, pero no sé hacerlo. Disculpas y gracias por tu
ayuda.

Jose Rafael


"Héctor Miguel" escribió en el mensaje
news:
ola, José Rafael !

He probado la macro y funciona pero me coloca los datos en la hoja
"base" columna a columna
en las cuatro filas como estan en cada hoja sucesiva del libro y lo que
yo quiero es
que me coloque los cuatro datos en columnas sucesivas de la hoja "base",
es decir "transpuestos"
y que cada fila corresponda a una carpinteria. Asi:
Ramirez Perez, A. C/ Maisonave, 42 46000 - Alacuas (VALENCIA)
Telefono: 909999099



solo cambia del codigo anteiror
esta parte:

Carp = Carp + 1
Cells(1, Carp).Resize(4).Value = .Cells(1, Col).Resize(4).Value

por esta otra:

Carp = Carp + 1
Cells(Carp, 1).Resize(, 4).Value = .Cells(1, Col).Resize(4).Value

saludos,
hector.





Respuesta Responder a este mensaje
#7 Héctor Miguel
25/03/2009 - 22:41 | Informe spam
hola, José Rafael !

Por cierto, se me olvidaba.. el proceso se interrumpe con este mensaje:
Se ha producido el error '6' en tiempo de ejecucion: Desbordamiento
y si le doy al boton depurar esta detenido en la linea: Carp = Carp + 1 (...)



esto es por el tipo de datos declarado en la variable "Carp" (As Byte) y requiere un mayor alcance

prueba con las siguientes adaptaciones:

Sub Carpinterias()
Dim n As Byte, Col As Byte, Fila As Integer
Application.ScreenUpdating = False
For n = 2 To Worksheets.Count
With Worksheets(n)
For Col = 1 To .Range("iv1").End(xlToLeft).Column
Fila = Fila + 1
Cells(Fila, 1).Resize(, 4).Value = _
Application.Transpose(.Cells(1, Col).Resize(4).Value)
Next
End With
Next
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
#8 José Rafael
27/03/2009 - 10:54 | Informe spam
Gracias Héctor Miguel, ahora funciona perfectamente.
Saludos cordiales desde Valencia (España)
José Rafael

"Héctor Miguel" escribió en el mensaje
news:
hola, José Rafael !

Por cierto, se me olvidaba.. el proceso se interrumpe con este mensaje:
Se ha producido el error '6' en tiempo de ejecucion: Desbordamiento
y si le doy al boton depurar esta detenido en la linea: Carp = Carp + 1
(...)



esto es por el tipo de datos declarado en la variable "Carp" (As Byte) y
requiere un mayor alcance

prueba con las siguientes adaptaciones:

Sub Carpinterias()
Dim n As Byte, Col As Byte, Fila As Integer
Application.ScreenUpdating = False
For n = 2 To Worksheets.Count
With Worksheets(n)
For Col = 1 To .Range("iv1").End(xlToLeft).Column
Fila = Fila + 1
Cells(Fila, 1).Resize(, 4).Value = _
Application.Transpose(.Cells(1, Col).Resize(4).Value)
Next
End With
Next
End Sub

saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida