Una ayuda por favor

28/04/2006 - 22:31 por bermejo-Luis | Informe spam
Tengo en una hoja de excel lo siguente, como ejemplo:

colum1 colum2 colum3 colum4 colum5 colum6
Punto de venta1 xxx
Direccion c/xxxxxxxx
poblacion xxxxxxxx
filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
Punto de venta2 xxxxxxxx
Direccion c/xxxxxxxxxxxxxx
poblacion xxxxxxxxxxxx
filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6

Bueno con este ejemplo espero que podais entender mi problema.
Esta hoja "informe" se recibe cada 15 dias, en esta hoja de excel hay
aprox entre 350 y 400 filas y como podeis ver los puntos de venta,
direccion etc. ocupan columnas que contienen datos, hay aprx entre 50 y 55
puntos de venta.Esto es por que no todos los informes que se reciben
tienen siempre los mismos clientes y los mismos puntos de venta, ya que
podeis ver la columna 5 esta vacia y hay que reenviar a cada punto de
venta, sus clientes y que rellenen el dato que falta.
Mi intencion es y asi lo hago manualmente es separar cada punto de venta
en un hoja aparte y reenviarsela. Cortando y pegando cada rango que
tienen. Al ser cada vez de un tamaño distinto, no se como hacerlo con
alguna macro en Vba ya que soy novato.Se como añadir hojas en el libro con
vba y como definir algún rango de filas, celdas etc.,Pero como le digo que
busque el rango desde un punto de venta hasta el siguiente punto de venta
lo copie y pegue en otra hoja y asi sucesibamente hasta completar todos
los puntos de venta con sus clientes en hojas distintas.
Espero que podais ayudarme y en caso contrario Gracias de todas formas por
haber leido mi problema
Un Saludo
Luis Bermejo
 

Leer las respuestas

#1 Héctor Miguel
29/04/2006 - 08:13 | Informe spam
hola, Luis !

supongo que el 'ejemplo' [aparte de 'meramente ilustrativo'] pudiera ser un tanto cuanto 'diferente' en la realidad -?-
[asi que]... con los siguientes 'supuestos'... espero que falten pocas modificaciones a la siguiente propuesta :))

-> 'la hoja' se llama "hoja1" [modifica en el codigo con el nombre 'real'] :D
1) -cuando menos- la celda 'A1' contiene un texto/encabezamiento/... para poder 'meterle' un autofiltro [por codigo]
[por lo que 'colum1' hace referencia a la columna 'A'] :D
2) entre el 'identificador' -> Punto de ventaX Y... la fila con 'el ultimo dato' [de cada punto de venta]
=> NO HAY celdas 'vacias' <= OJO
3) la columna donde se 'cuentan' los datos que faltan ES la 'colum5' [columna 'E'] -> 4 columnas a la derecha de 'A'
4) del 'identificador' -> Punto de ventaX 'hasta' -> la PRIMER celda/fila CON 'datos' de cada cliente...
hay TRES celdas/filas de 'distancia' [la pimer 'filacliente' esta 3 filas abajo de su 'punto de venaX']
5) la base de datos [o listado] comprende [siempre ?] SEIS columnas -> de 'A' <-> 'F'
-> la macro genera una hoja nueva por cada 'punto de venta' al que le falten datos en su columna 'E'

copia las siguientes lineas en un modulo de codigo 'normal' y...
si cualquier duda [o informacion adicional]... comenas ?
saludos,
hector.

Sub Faltan_datos(): Application.ScreenUpdating = False
Dim Puntos As String, Celda As Range, Datos As String, Faltan As String
With Worksheets("hoja1")
With Range(.[a1], .[a65536].End(xlUp))
If .AutoFilter Then .AutoFilter: .AutoFilter Field:=1, Criteria1:="punto de venta*"
With .Parent.AutoFilter.Range: Puntos = _
.Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Address(0, 0)
End With: .AutoFilter: End With
For Each Celda In .Range(Puntos)
Datos = .Range(Celda, Celda.End(xlDown)).Resize(, 6).Address
Faltan = .Range(Celda.Offset(3), Celda.End(xlDown)).Offset(, 4).Address
If Application.CountIf(Worksheets(.Name).Range(Faltan), "") > 0 Then
.Range(Datos).Copy Worksheets.Add(After:=Worksheets(Worksheets.Count)).[a1]
ActiveSheet.Name = [a1]
End If: Next: .Select: End With
End Sub

___ consulta original ___
Tengo en una hoja de excel lo siguente, como ejemplo:
colum1 colum2 colum3 colum4 colum5 colum6
Punto de venta1 xxx
Direccion c/xxxxxxxx
poblacion xxxxxxxx
filacliente1 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente2 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
filacliente3 fdatoc2 fdatoc3 fdatoc4 - fdatoc6
Punto de venta2 xxxxxxxx
Direccion c/xxxxxxxxxxxxxx
poblacion xxxxxxxxxxxx
filacliente fdatoc2 fdatoc3 fdatoc4 - fdatoc6
fliacliente fdatoc3 fdatoc3 fdatoc4 - fdatoc6
... con este ejemplo espero que podais entender mi problema.
Esta hoja "informe" se recibe cada 15 dias... hay aprox entre 350 y 400 filas
... ver los puntos de venta, direccion etc. ocupan columnas que contienen datos hay aprx entre 50 y 55 puntos de venta
... no todos los informes que se reciben tienen siempre los mismos clientes y los mismos puntos de venta
... ver la columna 5 esta vacia y hay que reenviar a cada punto de venta, sus clientes y que rellenen el dato que falta.
... lo hago manualmente... Cortando y pegando cada rango que tienen... no se como hacerlo con alguna macro [...]

Preguntas similares