Quiero generar un código para los artículos que se compone de 3 grupos de números: 99 - Código del grupo o familia 999 - Código del proveedor 999 - Contador Se trata de que seleccionando un grupo y un proveedor, al dar de alta a un artículo, te asigne el número que le corresponda... pero, claro, éste será distinto en cuanto se varíe o bien el grupo o bien el proveedor. Por ejemplo: 23-002-001 el el primer artículo del grupo 23 y el proveedor 002. si meto otro artículo en este mismo, debería darle el número 002 en el contador. pero, si cambio el grupo, por ejemplo al 24 y es el primero que introduzco, el código debería ser 24-002-001. ¿Hay forma de hacer este contador de manera que distinga este problema? RESPONDE CARCAR =============== Esta función hace exactamente lo que tu quieres. Function ObtenerNumero(P1 As Integer, P2 As Integer) As String Dim Rs As Recordset Dim Sql As String Dim Valor As String Dim Numero As Integer Valor = Format(P1, "00") & "-" & Format(P2, "000") & "-" Sql = "SELECT TOP 1 Codigo FROM Tabla3 WHERE Codigo LIKE '" Sql = Sql & Valor & "*' ORDER BY Codigo DESC" Set Rs = CurrentDb.OpenRecordset(Sql, dbOpenSnapshot) If Rs.RecordCount > 0 Then Numero = Right(Rs!Codigo, 3) + 1 ObtenerNumero = Valor & Format(Numero, "000") Else ObtenerNumero = Valor & "001" End If Rs.Close End Function Tal cual está, recibe los valores de código de grupo y código de proveedor en "enteros", pero no hay problema si los pasas como tipo texto, siempre que hayas tenido la precaución de que tengan la longitud adecuada, bueno en ese caso sobrarían los Format en la instrucción que guarda "Valor" que quedaría así: Valor = P1 & "-" & P2 & "-"