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

pb de code pour ajouter condition dans requête ajout

12 réponses
Avatar
Gundt
bonjour à tous,

Je viens de découvrir un bug dans mon appli de facturation que je
croyais avoir terminé.

Voici ce qui se passe :
A la création des factures, le 1er mois : tout s'est bien passé. Le
programme a créé les factures de mars début avril. Les factures de mars
sont exactes.
Celles d'avril : le programme crée les factures d'avril avec l'en-tête
et les lignes de factures (je passe les détails). Celles-ci sont bonnes
en avril mais par contre, en même temps le code ajoute les lignes
factures d'Avril dans les lignes factures de mars pour chaque client qui
a eu une facture en mars.

Je pense que la requête ne doit simplement ajouter les lignes factures
que pour le mois sélectionné, l'année sélectionnée ou par le numéro de
facture.

Comment corriger cela en sachant que la création de la facture est créée
par le code et la création des lignes de facture par une requête ajout
dans ce même code ?

Je vous joins à la fin du mail le code et la requête sql.

J'ai essayé d'ajouter à la requête ajout cette ligne en récupérant le
numéro de facture de la variable :
& "WHERE [FACTURES].Numfacture = & nouvnum & ;"

Mais cela ne change rien.
Ci-dessous les codes et la requête ajout avant la modif que j'ai essayé.

J'espère que mon mail sera suffisamment clair malgré la longueur.

Merci d'avance.

Gundt

--------------------------------------------
voici le code de la création de facture :
--------------------------------------------
' procédure de création de numéro automatique de facture
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
' codecli2 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], " _
& "Format([DateSortie_temp],'mm') AS MoisBL,
Format([DateSortie_temp],'yyyy') " _
& "AS AnnéeBL, [BL TEMP].CodeClient 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],
Format([DateSortie_temp],'mm'), " _
& "Format([DateSortie_temp],'yyyy'), [BL TEMP].CodeClient " _
& "HAVING Format([DateSortie_temp], 'mm') =" &
[Forms]![Choix_cli_fact_perso]![Mois] & " AND " _
& "Format([DateSortie_temp], 'yyyy') =" &
[Forms]![Choix_cli_fact_perso]![Année] & " AND " _
& "[BL TEMP].[CodeClient] = " &
[Forms]![Choix_cli_fact_perso]![CodeClient] & " ORDER BY [BL
TEMP].CodeClient;"

Set r = db.OpenRecordset(sql1, DB_OPEN_DYNASET)
Set s = db.OpenRecordset("Factures", DB_OPEN_DYNASET)
' formulaire pour choix de 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

' 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

------------------- fin du code création de facture -------------

---- requête ajout des lignes factures avant ma modif ---------

' Requête ajout pour ajouter les lignes de BL TEMP dans LIGNES FACTURES

' nouvelle requête sql2
sql2 = "INSERT INTO [LIGNES FACTURES] " _
& "( [Code article], Désignation, [Prix unitaire], " _
& "[Code unité], Quantité, [Total ligne], DateBL, [N°BL], Numfacture )" _
& "SELECT DISTINCTROW [LIGNES BL TEMP].[Code article], " _
& "[LIGNES BL TEMP].Désignation, [LIGNES BL TEMP].[Prix unitaire], " _
& "[LIGNES BL TEMP].[Code unité], [LIGNES BL TEMP].Quantité, " _
& "[LIGNES BL TEMP].[Total ligne], BL.DateSortie, BL.[N°BL], " _
& "FACTURES.Numfacture" _
& " FROM BL INNER JOIN ((((CLIENTS INNER JOIN FACTURES " _
& "ON CLIENTS.Codeclient = FACTURES.CodeClient) " _
& "INNER JOIN ([BL TEMP] INNER JOIN [LIGNES BL TEMP] " _
& "ON [BL TEMP].[N°BL_temp] = [LIGNES BL TEMP].[N°BL_temp]) " _
& "ON FACTURES.CodeClient = [BL TEMP].CodeClient) " _
& "INNER JOIN ETABLISSEMENTS " _
& "ON (ETABLISSEMENTS.Codetab = CLIENTS.Codetab) " _
& "AND (FACTURES.Codetab = ETABLISSEMENTS.Codetab)) " _
& "INNER JOIN SERVICES ON FACTURES.Codeservice = SERVICES.Codeservice) " _
& "ON BL.[N°BL] = [BL TEMP].[N°BL_temp];"

' on execute la rqt ajout
CurrentDb.Execute sql2

2 réponses

1 2
Avatar
Gundt
dans cette portion je trouve bizarre:

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 = fNouveauNumero(suivnum1)
End If
End If

je remplacerais numero = Val(Mid(nouvnum, 8, 3)) par
numero = Val(Mid(nouvnum, 8, 3)) + 1

résultat non garanti.


Oui, malheureusement, cela fait pareil. :-(

J'ai donc remis comme avant.

Une chose m'étonne quand même : s'il y a un écart de 1 entre la variable
et le numfacture, il devrait y avoir environ n-1 lignes factures créées.
Mais là, il n'y a zéro lignes factures créées!!

Merci encore à Raymond de sa patience.

Gundt

Avatar
Raymond [mvp]
Je veux bien jeter un oeil sur cette procédure. envoie-moi les objets en
cause dans mon e-mail (enlève les xyz de sécurité). je te rappellerai
demain.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Non Stop Mix '07 - Paris. La nouvelle scène web fête la créativité !
http://www.comscamp.com/Tracker/Redirect.ashx?linkid°64304e-439a-45c7-9d2f-c3326db58273


"Gundt" a écrit dans le message de news:
4659de3e$0$14981$
| > dans cette portion je trouve bizarre:
| >
| > 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 = fNouveauNumero(suivnum1)
| > End If
| > End If
| >
| > je remplacerais numero = Val(Mid(nouvnum, 8, 3)) par
| > numero = Val(Mid(nouvnum, 8, 3)) + 1
| >
| > résultat non garanti.
|
| Oui, malheureusement, cela fait pareil. :-(
|
| J'ai donc remis comme avant.
|
| Une chose m'étonne quand même : s'il y a un écart de 1 entre la variable
| et le numfacture, il devrait y avoir environ n-1 lignes factures créées.
| Mais là, il n'y a zéro lignes factures créées!!
|
| Merci encore à Raymond de sa patience.
|
| Gundt
1 2