Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

code numéro auto sur sélection d'un champ de formulaire

1 réponse
Avatar
Gundt
Bonjour à tous,

Dans mon appli, j'ai réussi grâce à vous à produire une facturation
automatique de tous les BL pour un mois donné et une année donnée : ==>
calcul automatique d'un numéro de facture, copie des éléments vers les
tables Factures et lignes Factures, puis édition de la facture, etc ...

Une deuxième fonctionnalité m'est demandée : pouvoir créer une facture
au cas par cas en fonction du client, c'est-à-dire créer une seule
facture pour un client (en utilisant le même principe qu'avant) avant la
fin de mois.

J'ai donc repris le module facture automatique et et j'ai créé une
nouvelle procédure tirée de l'ancienne qui marchait.

Choix du client par un déroulant Codeclient dans le
Forms![Choix_cli_fact_perso]

Mais mon code est adapté pour la sélection du mois et de l'année (voir
posts sur numéros automatique d'un état).

Je n'ai pas d'erreur mais la facture n'est pas créée et je ne sais pas
l'adapter à la sélection du client par
Forms![Choix_cli_fact_perso].[CodeClient].
J'ai changé sql1 mais je ne sais pas changer après.

Nota : Le CodeClient est une valeur numérique même si c'est les noms des
clients qui apparaissent dans la liste déroulante.

Voici le code :
Function Numfactureindivi()
Dim db As Database
Dim r As Recordset, s As Recordset, f As Form
Dim suivnum1 As String, suivnum2 As String, suivnum As String, nouvnum
As String
Dim numero As Long
Dim codecli1 As Long
Dim mm As Byte
Dim yyyy As Long
Dim sql1 As String


Set db = DBEngine(0)(0)

sql1 = "SELECT DISTINCTROW [BL TEMP].CodeClient, CLIENTS.Codetab, " _
& "CLIENTS.[Code service], SERVICES.[Nom du service],
SERVICES.Factureindividuelle, CLIENTS.Nom, " _
& "CLIENTS.Monsieur, CLIENTS.Prénom, CLIENTS.Adresse, CLIENTS.Ville,
CLIENTS.[Code Postal] " _
& "FROM SERVICES INNER JOIN (CLIENTS INNER JOIN [BL TEMP] ON
CLIENTS.Codeclient = [BL TEMP].CodeClient) " _
& "ON SERVICES.Codeservice = CLIENTS.[Code service] " _
& "GROUP BY [BL TEMP].CodeClient, CLIENTS.Codetab, " _
& "CLIENTS.[Code service] , SERVICES.[Nom du service],
SERVICES.Factureindividuelle, " _
& "CLIENTS.Nom, CLIENTS.Monsieur, CLIENTS.Prénom, CLIENTS.Adresse,
CLIENTS.Ville, CLIENTS.[Code Postal] " _
& "HAVING [BL TEMP].[CodeClient]= " &
[Forms]![Choix_cli_fact_perso]![CodeClient] & " AND
[SERVICES].[Factureindividuelle]=Yes;"

' -------------------------------------------------------
Set r = db.OpenRecordset(sql1, DB_OPEN_DYNASET)
Set s = db.OpenRecordset("Factures", DB_OPEN_DYNASET)
' formulaire pour choix de client pour 1 facture
Set f = Forms![Choix_cli_fact_perso]

'
-------------------------------------------------------------------------------
'' On ajoute la lettre A au numéro de facture pour indiquer que les
factures appartiennent à l'Atelier
'suivnum1 = "A"
'
-------------------------------------------------------------------------------
' numérotation avec A

If Not s.EOF Then s.MoveLast
suivnum1 = "A"
numero = 1
If s.BOF Then
nouvnum = fNouveauNum(suivnum1)
Else
s.MoveLast
suivnum = s!Numfacture
If Mid(suivnum, 2, 4) = f!Année And Mid(suivnum, 6, 2) = f!Mois Then
nouvnum = suivnum1 & Mid(suivnum, 2, 6) _
& Format(Val(Mid(suivnum, 8, 3)) + 1, "000")
numero = Val(Mid(nouvnum, 8, 3))
Else
nouvnum = fNouveauNum(suivnum1)
End If
End If
f!test = nouvnum

If Not r.BOF Then r.MoveFirst
codecli1 = r!CodeClient

On Error Resume Next

Do While Not r.EOF
If Format(r!DateSortie_temp, "yyyymm") = Format(f!Année, "0000") &
Format(f!Mois, "00") Then

s.AddNew
s!Numfacture = nouvnum
s!CodeClient = r!CodeClient
s!Codetab = r!Codetab
s!Codeservice = r![Code service]
s!Moisfact = Format(f!Mois, "00")
s!Annéefact = Format(f!Année, "0000")
s.Update
numero = numero + 1
nouvnum = suivnum1 & Format(f!Année, "0000") & Format(f!Mois,
"00") & Format(numero, "000")
codecli1 = r!CodeClient
End If

r.MoveNext
Loop

End Function

Function fNouveauNum(UneChaine As String) As String

Dim f As Form
Set f = Forms![Choix_fact_perso]

fNouveauNum = UneChaine _
& Format(f!Année, "0000") _
& Format(f!Mois, "00") & "001"
End Function


Merci d'avance.

Gundt

1 réponse

Avatar
Gundt
Bonjour à tous,

[...]
Bon, je n'ai pas eu de réponse. Je m'apprêtais à formuler ma question

autrement et le fait d'y réfléchir comment poser le problème autrement
m'a donné la solution. En fait, j'ai repris le code précédent (numéro
automatique de facture d'après le mois et l'année saisi par l'utilisateur).
J'ai donc ajouté 2 contrôles dans mon formulaire : cela a l'air de
marcher. J'ai juste un problème d'actualisation de liste déroulante.

Je vais poster sur un autre post pour ce problème de liste déroulante.
Je pense que ce sera mieux pour le forum.

A tout de suite.

Gundt