En este grupo En todos

Foro de Excel



Macro para cambiar estado albaranes al facturar

carlos
Barcelona, España
Escrito por Carlos Rodriguez
el 05/04/2011

Tengo hecho un programa de facturación en excel y tengo un pequeño problema. Mi intención para hacerlo algo más completo es que cuando se realiza la factura y se guarda (que consta de varios albaranes), entre en el listado de albaranes y modifique de no facturado a facturado, de tal forma que luego al mirar que albaranes estan facturados pueda saber cuales me falta hacer una factura.


El problema es que no se mucho de macros, vamos, he ido aprendiendo a medida que hacia el programilla este de facturación y no se muy bien como seguir.


A ver si alguien me puede orientar o decir como hacer para que el rango que calcula se vaya modificando. En las facturas tengo un total de 27 filas que puedo llenar con albaranes, la gracia esta en que mire el primero cogiendo la primera celda y cuando termine pues siga con el segundo albaran.

Hasta donde yo se he sacado esto


'numero albaran

nalb = Range("B21"). Value

Sheets("listado alb"). Select
ActiveSheet. Unprotect

'rango A2 = donde estan los numeros de albaranes del listado interno
Range("A2"). Select
While ActiveCell. Value <> ""
If ActiveCell. Value = nalb Then

'la columna 11 es donde se especifica el estado (facturado/no facturado)
ActiveCell. Offset(0, 11). Select
ActiveCell. FormulaR1C1 = "facturado"
ActiveCell. Offset(0, -11). Select
End If
ActiveCell. Offset(1, 0). Select
Wend


El problema es que cuando termina de buscar el primer albaran no se como cambiarle el valor del nalb del B21 al B22 si no es volver a copiar esto de arriba 27 veces que seria muy triste jaja, a parte que como los albaranes serian siempre de menor a mayor, se podria de alguna forma parar el while para que no siga buscando el albaran más para abajo ¿ ? De esta forma al darle el valor del B22 podria seguir donde lo he dejado y no tener que empezar desde A2 y ahorrar tiempo de calculo que el excel ya empieza a pesar demasiado.

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 05/04/2011

Hola! Carlos.
Fíjate si lo siguiente te puede ser de utilidad:
_________________

Sub Macro408()
Dim Las27 As Range, ListInterno As Range
If IsEmpty([b21]) Then Exit Sub
Set Las27 = [b21]
If Not IsEmpty([b22]) Then Set Las27 = Range([b21], [b21]. End(xlDown))

With Sheets("listado alb")
. Unprotect
Set ListInterno = Range(. [a2],. [a65536]. End(xlUp))
End With

With ListInterno. Offset(, 11)
. Value = Evaluate("IF( ISERROR(MATCH(" & _
ListInterno. Address(External:=True) & ", " & _
Las27. Address(External:=True) & ", 0)), " & _
. Address(External:=True) & ", ""facturado"")")
End With

Set Las27 = Nothing
Set ListInterno = Nothing
Sheets("listado alb"). Protect
MsgBox "Proceso terminado"
End Sub
_________________

Saludos, Cacho.

Alejandro Federico
Licenciado en contaduria universidad a...
Escrito por Alejandro Federico
el 05/04/2011

¡Recorcholis Master Cacho! , veo que sigue en su etapa de adivino, la verdad yo lei la consulta y no le entendí.

Saludos.

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 05/04/2011

Para ser honesto, Alejandro: no le asigno más del 50% a la probabilidad de certeza...
¡Veremos que tiene Carlos para decirnos!
(je je je)

Carlos Rodriguez
Barcelona, España
Escrito por Carlos Rodriguez
el 06/04/2011

Wow, pues si que me entendiste porque funciona perfecto :O


Contestando a Alejandro, era como hacer una macro para que cambie el estado de un albaran (que estan en un listado interno) al hacer la factura. Y que como en la factura se puede poner más de un albaran como podia hacer para que fuera checkeando cada albaran.


El que no termina de entenderlo del todo ahora soy yo, que con Dim y esas cosas me pierdo, pero funciona perfecto, y si necesito que salte linia aunque este vacio, poniendo un 0 (que no se ve) lo hace igual, por lo que perfecto para lo que quería.


Gracias otra vez cacho, al final tendran que hacerle un monumento en mi pueblo jeje