bonjour
je voudrais creer un numero d'affaire.
ce numero se compose de 3 choses.
AAA (fixe)
annee : 09, 10 ,11 ,12 ,13 ,14 ,15 ,16 .... (1 table)
et un numero auto incremente de 4 caracteres : 1111 ce numero doit etre
unique sans doublon.
donc ce numero aura le format suivant : AAA090001
Nb : a chaque changement d'annee le numero doit pouvoir revenir a 0001 et
s'auto-incremmenter avec un pas de 1
au final je voudrais ces 3 champs concatennés dans un champs "affaire"
pouvez vous m'aider
Merci beaucoup !!!!
Cordialement
bonjour
je voudrais creer un numero d'affaire.
ce numero se compose de 3 choses.
AAA (fixe)
annee : 09, 10 ,11 ,12 ,13 ,14 ,15 ,16 .... (1 table)
et un numero auto incremente de 4 caracteres : 1111 ce numero doit etre
unique sans doublon.
donc ce numero aura le format suivant : AAA090001
Nb : a chaque changement d'annee le numero doit pouvoir revenir a 0001 et
s'auto-incremmenter avec un pas de 1
au final je voudrais ces 3 champs concatennés dans un champs "affaire"
pouvez vous m'aider
Merci beaucoup !!!!
Cordialement
bonjour
je voudrais creer un numero d'affaire.
ce numero se compose de 3 choses.
AAA (fixe)
annee : 09, 10 ,11 ,12 ,13 ,14 ,15 ,16 .... (1 table)
et un numero auto incremente de 4 caracteres : 1111 ce numero doit etre
unique sans doublon.
donc ce numero aura le format suivant : AAA090001
Nb : a chaque changement d'annee le numero doit pouvoir revenir a 0001 et
s'auto-incremmenter avec un pas de 1
au final je voudrais ces 3 champs concatennés dans un champs "affaire"
pouvez vous m'aider
Merci beaucoup !!!!
Cordialement
Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
'ouverture du recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
'ouverture du recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
'ouverture du recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Blaise Cacramp a écrit :Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type
Long te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style
8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic 'ouverture du
recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/"
& Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type
Long te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style
8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic 'ouverture du
recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/"
& Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Blaise Cacramp a écrit :Selon : Bonjour ou bonsoir
Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
date pour le réinitialiser au changement d'année.
Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
[Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
cela fait une trentaine par jour. Cela peut être insuffisant. Le type
Long te permet d'aller au delà).
Tu initialise le 1er enregistrement avec une date antérieure du style
8/8/8
Puis dans un module VBA :
<--------------------------------------------------------------------
Option Compare Database
Option Explicit
Function Num_Fact() As String
Dim sSql As String
Dim dtAN As Date
Dim lgNr As Long
Dim Rst As New ADODB.Recordset
sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
& " FROM Tbl_S_Num_Fact;"
Rst.Open sSql, CurrentProject.Connection, adOpenDynamic 'ouverture du
recordset (table courante)
dtAN = Rst("Fct_An") 'date
If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
dtAN = Date
lgNr = 1
Else
lgNr = Rst("Fct_Serie") + 1 'série
End If
Rst.Close
sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSql
DoCmd.SetWarnings True
Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
fonction
End Function
Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/"
& Format(d, "yyyy") & "#"
End Function
-------------------------------------------------------->
Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
facture complet
Cdt, Blaise
---- ---- ----
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") & "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en crée
un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente le
numéro maximum trouvé pour l'année en cours : "AAA090887" -> "AAA090888"
db
Merci beaucoup pour votre aide c'est super sympa ....
Mais pour la mise en oeuvre je patauge un peu,
pourriez vous m'aider un peu plus ?
Merci par avance
salutations
"db" a écrit :Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté
> la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par
> an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type
> Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style
> 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de
> la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") &
> "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" ->
"AAA090888"
db
Merci beaucoup pour votre aide c'est super sympa ....
Mais pour la mise en oeuvre je patauge un peu,
pourriez vous m'aider un peu plus ?
Merci par avance
salutations
"db" a écrit :
Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté
> la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par
> an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type
> Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style
> 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de
> la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") &
> "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" ->
"AAA090888"
db
Merci beaucoup pour votre aide c'est super sympa ....
Mais pour la mise en oeuvre je patauge un peu,
pourriez vous m'aider un peu plus ?
Merci par avance
salutations
"db" a écrit :Blaise Cacramp a écrit :
> Selon : Bonjour ou bonsoir
>
> Il faut stocker le dernier numéro pour pouvoir l'incrémenter et à côté
> la
> date pour le réinitialiser au changement d'année.
>
> Dans l'exemple, tu crées une table [Tbl_S_Num_Fact] avec deux champs
> [Fct_An] de type date, et [Fct_Serie] de type long (9999 factures par
> an,
> cela fait une trentaine par jour. Cela peut être insuffisant. Le type
> Long
> te permet d'aller au delà).
> Tu initialise le 1er enregistrement avec une date antérieure du style
> 8/8/8
>
> Puis dans un module VBA :
> <--------------------------------------------------------------------
> Option Compare Database
> Option Explicit
>
> Function Num_Fact() As String
> Dim sSql As String
> Dim dtAN As Date
> Dim lgNr As Long
> Dim Rst As New ADODB.Recordset
>
> sSql = "SELECT Tbl_S_Num_Fact.Fct_An, Tbl_S_Num_Fact.Fct_Serie" _
> & " FROM Tbl_S_Num_Fact;"
>
> Rst.Open sSql, CurrentProject.Connection, adOpenDynamic
> 'ouverture du recordset (table courante)
>
> dtAN = Rst("Fct_An") 'date
> If Year(dtAN) <> Year(Date) Then 'changement d'année, compteur à 1
> dtAN = Date
> lgNr = 1
> Else
> lgNr = Rst("Fct_Serie") + 1 'série
> End If
> Rst.Close
> sSql = "UPDATE Tbl_S_Num_Fact SET Tbl_S_Num_Fact.Fct_An = " &
> Fn_Date_Sql_Mdb(dtAN) & ", Tbl_S_Num_Fact.Fct_Serie = " & lgNr & ";"
>
> DoCmd.SetWarnings False
> DoCmd.RunSQL sSql
> DoCmd.SetWarnings True
>
> Num_Fact = Format(dtAN, "yy") & Format(lgNr, "0000") 'retour de
> la
> fonction
> End Function
>
>
> Function Fn_Date_Sql_Mdb(d As Date) 'format de date SQL pour ACCESS
> Fn_Date_Sql_Mdb = "#" & Format(d, "mm") & "/" & Format(d, "dd") &
> "/" &
> Format(d, "yyyy") & "#"
> End Function
> -------------------------------------------------------->
>
> Il sera facile de faire « "AAA" & Num_Fact() » pour avoir le numéro de
> facture complet
>
>
>
> Cdt, Blaise
> ---- ---- ----
>
>
>
Bonsoir,
Plus court, mais pas forcément plus lisible :-) :
(on suppose que le numéro se trouve dans la colonne numero de la table
table1)
NouveauNumero = "AAA" & Format(Date, "yy") &
Format(Nz(DMax("right(numero,4)", "table1", "numero like 'AAA" &
Format(Date, "yy") & "*'"), 0) + 1, "0000")
En gros, s'il n'y a pas encore de numéro pour l'année en cours, ça en
crée un avec, par exemple pour 2009, "AAA090001", sinon ça incrémente
le numéro maximum trouvé pour l'année en cours : "AAA090887" ->
"AAA090888"
db
Je crois donc ma solution plus viable : un temps d'exécution invariable non
ressenti par l'utilisateur, une sécurité d'unicité nettement plus garantie.
Je crois donc ma solution plus viable : un temps d'exécution invariable non
ressenti par l'utilisateur, une sécurité d'unicité nettement plus garantie.
Je crois donc ma solution plus viable : un temps d'exécution invariable non
ressenti par l'utilisateur, une sécurité d'unicité nettement plus garantie.
Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Blaise Cacramp a écrit :
Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un "vieux"
qui programmais sa gestion de données en QuickBasic et je traîne avec moi de
vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" a écrit dans le message de news:Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un "vieux"
qui programmais sa gestion de données en QuickBasic et je traîne avec moi de
vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" <blue_moon_fr@_hotmail.com> a écrit dans le message de news:
eHpkPqdTKHA.4364@TK2MSFTNGP04.phx.gbl...
Blaise Cacramp a écrit :
Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un "vieux"
qui programmais sa gestion de données en QuickBasic et je traîne avec moi de
vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" a écrit dans le message de news:Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Blaise Cacramp a écrit :Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un
"vieux" qui programmais sa gestion de données en QuickBasic et je traîne
avec moi de vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" a écrit dans le message de news:Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Au risque de décevoir votre fausse modestie, je voulais dire que je ne
voulais pas passer du temps à argumenter pour départager les solutions. Et
que votre solution, puisque sans opposition, ne pouvait qu'être retenue
(ou "retenable").
Maintenant, s'il faut argumenter un peu, la sécurité d'unicité ne posera
guère de problème si la génération du nouveau numéro se fait sur
l'évènement "Avant insertion" du formulaire : le pouillème de seconde
entre le calcul du numéro et son insertion effective dans la base laissera
peu de risque. Pas plus que dans votre solution en tous cas.
Et le temps de calcul du Dmax sur une colonne indexée est également
dérisoire. Sans que ce soit une référence, je fais comme ça dans plusieurs
applications multi-utilisateurs et je n'ai jamais eu le moindre souci.
Mais bon, à l'inverse d'hier, je dis ça juste parce que j'ai un peu de
temps : ne le prenez pas contre vous :-)
Juste une chose quand même : pourquoi votre fonction Fn_Date_Sql _Mdb
n'est-elle pas plus simplement écrite comme ça :
Fn_Date_Sql_Mdb = "#" & Format(d, "mm/dd/yyyy") & "#"
?
db
Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un
"vieux" qui programmais sa gestion de données en QuickBasic et je traîne
avec moi de vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" <blue_moon_fr@_hotmail.com> a écrit dans le message de news:
eHpkPqdTKHA.4364@TK2MSFTNGP04.phx.gbl...
Blaise Cacramp a écrit :
Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Au risque de décevoir votre fausse modestie, je voulais dire que je ne
voulais pas passer du temps à argumenter pour départager les solutions. Et
que votre solution, puisque sans opposition, ne pouvait qu'être retenue
(ou "retenable").
Maintenant, s'il faut argumenter un peu, la sécurité d'unicité ne posera
guère de problème si la génération du nouveau numéro se fait sur
l'évènement "Avant insertion" du formulaire : le pouillème de seconde
entre le calcul du numéro et son insertion effective dans la base laissera
peu de risque. Pas plus que dans votre solution en tous cas.
Et le temps de calcul du Dmax sur une colonne indexée est également
dérisoire. Sans que ce soit une référence, je fais comme ça dans plusieurs
applications multi-utilisateurs et je n'ai jamais eu le moindre souci.
Mais bon, à l'inverse d'hier, je dis ça juste parce que j'ai un peu de
temps : ne le prenez pas contre vous :-)
Juste une chose quand même : pourquoi votre fonction Fn_Date_Sql _Mdb
n'est-elle pas plus simplement écrite comme ça :
Fn_Date_Sql_Mdb = "#" & Format(d, "mm/dd/yyyy") & "#"
?
db
Blaise Cacramp a écrit :Selon : Bonjour ou bonsoir
Merci, j'adore ma fausse modestie ;-)
Je sais qu'il y a encore mieux que ce que j'ai proposé. Je suis un
"vieux" qui programmais sa gestion de données en QuickBasic et je traîne
avec moi de vielles habitudes.
Mes meilleures salutations,
Blaise
---- ---- ----
"db" a écrit dans le message de news:Blaise Cacramp a écrit :Je crois donc ma solution plus viable : un temps d'exécution invariable
non ressenti par l'utilisateur, une sécurité d'unicité nettement plus
garantie.
Ah je n'aurai pas la prétention de penser que ma solution est la
meilleure. Donc, la vôtre l'est forcément :-)
db
Au risque de décevoir votre fausse modestie, je voulais dire que je ne
voulais pas passer du temps à argumenter pour départager les solutions. Et
que votre solution, puisque sans opposition, ne pouvait qu'être retenue
(ou "retenable").
Maintenant, s'il faut argumenter un peu, la sécurité d'unicité ne posera
guère de problème si la génération du nouveau numéro se fait sur
l'évènement "Avant insertion" du formulaire : le pouillème de seconde
entre le calcul du numéro et son insertion effective dans la base laissera
peu de risque. Pas plus que dans votre solution en tous cas.
Et le temps de calcul du Dmax sur une colonne indexée est également
dérisoire. Sans que ce soit une référence, je fais comme ça dans plusieurs
applications multi-utilisateurs et je n'ai jamais eu le moindre souci.
Mais bon, à l'inverse d'hier, je dis ça juste parce que j'ai un peu de
temps : ne le prenez pas contre vous :-)
Juste une chose quand même : pourquoi votre fonction Fn_Date_Sql _Mdb
n'est-elle pas plus simplement écrite comme ça :
Fn_Date_Sql_Mdb = "#" & Format(d, "mm/dd/yyyy") & "#"
?
db