OVH Cloud OVH Cloud

bug affichage sous formulaires

1 réponse
Avatar
murraychristian
Bonjour =E0 tous,

J'ai un pb d'affichage lors d'un ajout d'un record ds un
sous-formulaires; je vais essayer d'=EAtre suffisamment clair:

Dans un application access, j'ai un sous formulaire pour mettre =E0 jour
une facturation, lorsque j'ajoute un record (nouvelle ligne d=E9tail),
je dois saisir le num=E9ro du produit =E0 ajouter. Sur l'=E9v=E9nement
lost_focus, le code suivant:

Private Sub ListeCode_LostFocus()
If IsNull(Me!ListeCode) Or (Me!ListeCode) =3D 999 Then
' Me!ListeCode =3D ""
'
Forms!FacturesCorrections.sf_FACTURESContenuCorrections!ListeCode =3D ""
MsgBox "Vous devez obligatoirement inscrire un code de produit
faisant partie de la liste officielle des produits et services de la
compagnie."

Forms!FacturesCorrections.sf_FACTURESContenuCorrections!ListeCode.SetFocus
Exit Sub
End If
If Len(Me.Description) > 0 Then
If vbYes =3D MsgBox("L'enregistrement contient d=E9j=E0 des
informations, d=E9sirez-vous les conserver ?", vbYesNo) Then Exit Sub
End If
Me.ListeDescription =3D Me.ListeCode.Column(0)
Call ListeDescription_AfterUpdate

End Sub




Public Sub ListeDescription_AfterUpdate()
Dim Prix

Dim Crit=E8re As String
Dim recs As DAO.Recordset

'''INSCRIPTION DU NoProjet et NoCie LORS D'UN AJOUT MANUEL
Me!NoProjet =3D Forms!FacturesCorrections!NoProjet
Me!NoCie =3D Forms!FacturesCorrections!NoCie

Me!ListeDescription.Requery

'Crit=E8re =3D "[Code] =3D " & Me!ListeDescription
'Set recs =3D CurrentDb.OpenRecordset("prix", dbOpenDynaset)
'recs.FindFirst Crit=E8re
'If recs.NoMatch Then

Crit=E8re =3D "Select Libell=E9Officiel, Code, Unit=E9, PrixUnitaire1
from Prix where Code =3D " & Me!ListeDescription
Set recs =3D CurrentDb.OpenRecordset(Crit=E8re, dbOpenDynaset)
If recs.EOF Then
MsgBox "No Match"
Else
Me!Description =3D recs!Libell=E9Officiel
If Not IsNull(recs!Code) Then Me!ListeCode =3D recs!Code
If Not IsNull(recs!Unit=E9) Then Me!ListeUnit=E9 =3D recs!Unit=E9
If Not IsNull(recs!PrixUnitaire1) Then Me!Prix =3D
recs!PrixUnitaire1
End If
recs.Close


If Me!ListeCode =3D 1 Then Al=E9sage
If Me!ListeCode =3D 2 Then
Alimentation
Exit Sub
End If
If Me!ListeCode =3D 5 Then
Entr=E9eSyst=E8me =3D 2
ChlorationUrgence
Entr=E9eSyst=E8me =3D Null
Exit Sub
End If
If Me!ListeCode =3D 17 Then TestAqueduc
If Me!ListeCode =3D 26 Then Me!Qt=E9.SetFocus 'Fissure
If Me!ListeCode =3D 31 Then
'TV
Q1 =3D InputBox("1 =3D T=EAte fixe" & vbCrLf & vbCrLf & "2 =3D T=EA=
te
rotative", "TYPE D'=C9QUIPEMENT", 1)

''' RECHERCHE DANS LA LISTE DE PRIX
' Crit=E8re =3D "[Code] =3D " &
Forms!FacturesCorrections.sf_FACTURESContenuCorrections!ListeCode
' Set recs =3D CurrentDb.OpenRecordset("prix", dbOpenDynaset)
' recs.FindFirst Crit=E8re
' If recs.NoMatch Then
Crit=E8re =3D "Select Libell=E9Officiel from Prix where Code =3D " &
Forms!FacturesCorrections.sf_FACTURESContenuCorrections!ListeCode
Set recs =3D CurrentDb.OpenRecordset(Crit=E8re, dbOpenDynaset)
If recs.EOF Then
MsgBox "No Match"
Else
If Q1 =3D 1 Then
Forms!FacturesCorrections.sf_FACTURESContenuCorrections!Description =3D
recs!Libell=E9Officiel & ", avec cam=E9ra =E0 t=EAte fixe."
If Q1 =3D 2 Then
Forms!FacturesCorrections.sf_FACTURESContenuCorrections!Description =3D
recs!Libell=E9Officiel & ", avec cam=E9ra =E0 t=EAte rotative."
End If
recs.Close

Dim Position2
'ENL=C8VEMENT DE LA NOTE SUR LES INSTALLATIONS SUPPL=C9MENTAIRES
' If Me!ListeDescription Like "*Inspection*" Then Position2
=3D InStr(Me!ListeDescription, "Installation")
'If Nz(Position2) =3D 0 Then Exit Sub
'Me!ListeDescription =3D Left(Me!ListeDescription, Position2 - 1)

'INSCRIPTION DU MOT DE PASSE ET DU NIP
'Crit=E8re =3D "[Client] =3D '" & Forms!FacturesCorrections!Client &
"'"
'Set recs =3D CurrentDb.OpenRecordset("Bottin", dbOpenDynaset)
'recs.FindFirst Crit=E8re
'If recs.NoMatch Then
'Else
Crit=E8re =3D "Select NoClient, Nip from Bottin where Client =3D """
& Forms!FacturesCorrections!Client & """"
Set recs =3D CurrentDb.OpenRecordset(Crit=E8re, dbOpenDynaset)
If Not recs.EOF Then
Me!ListeDescription =3D Me!ListeDescription & vbCrLf & "Pour
l'acc=E8s aux rapports par INTERNET:" & vbCrLf & "www.colmatec.com" &
vbCrLf & "User name: " & recs!NoClient & vbCrLf & "Password: " &
UCase(recs!NIP)
End If
recs.Close

Exit Sub
End If
If Me!Code =3D 36 Then
' Me!ListeCode =3D ""
' Me!ListeDescription =3D ""
' Me!Description =3D ""
' Me!Qt=E9 =3D ""
'' Me!ListeDia =3D ""
'' Me!ListeUnit=E9 =3D ""
' Me!Prix =3D ""
' ' Me!Note1 =3D ""
Exit Sub
End If
'''CE PRARAGRAPHE EST PROPRE =C0 FACTURE
If Me!Code =3D 37 Then
NFacture =3D Forms!FacturesCorrections!NoFacture
PositionEnregistrement =3D Me!FactureContenuNo
Contr=F4leActif =3D Screen.ActiveControl.Name
FormulaireActif =3D Screen.ActiveForm.Name
DoCmd.Close acForm, "FacturesCorrections", acSaveYes
DoCmd.OpenForm "CalculLocationBallons"
End If
If Me!ListeCode =3D 39 Then
MiseEnOp=E9ration
End If
If Me!ListeCode =3D 41 Then
Nettoyage
End If
If Me!ListeCode =3D 43 Then
RaccPression
End If
If Me!ListeCode =3D 69 Then 'Torpille
Dim intDimension As Integer
intDimension =3D Val(InputBox("Pour quelle diam=E8tre de conduite
?", "Dimension de la torpille"))

Dim clsPrixDetail As New PrixDetail
Call clsPrixDetail.GetPrixDetail(Me!ListeCode, intDimension)
Me.Prix =3D clsPrixDetail.Prix
Me.ListeUnit=E9 =3D clsPrixDetail.Unite
End If
End Sub

Mon probl=E8me: lors de la mise =E0 jour du sous formulaire pour afficher
la description et le prix de l'item, tout les prix des lignes de
d=E9tails pr=E9c=E9dents sont aussi mis jour au prix de l'actuel item.

Deuxi=E8me observation, si je modifie les prix pr=E9c=E9dents suite =E0 ce
bug, et que j'ajoute encore un nouveau record, la rien... les prix
restent tels qu'ils doivent =EAtre...

Je ne suis pas un pro access, est-ce que qq'un =E0 une id=E9e du pb ou
une solution.

L'application roule sous:
Windows XP pro sp1
MsOffice 2002 sp2

Merci de votre support =E0 l'avance.

1 réponse

Avatar
3stone
Salut,

J'ai un pb d'affichage lors d'un ajout d'un record ds un
sous-formulaires; je vais essayer d'être suffisamment clair:

Dans un application access, j'ai un sous formulaire pour mettre à jour
une facturation, lorsque j'ajoute un record (nouvelle ligne détail),
je dois saisir le numéro du produit à ajouter. Sur l'événement
lost_focus, le code suivant:

<snip>

Mon problème: lors de la mise à jour du sous formulaire pour afficher
la description et le prix de l'item, tout les prix des lignes de
détails précédents sont aussi mis jour au prix de l'actuel item.

Deuxième observation, si je modifie les prix précédents suite à ce
bug, et que j'ajoute encore un nouveau record, la rien... les prix
restent tels qu'ils doivent être...




Pas facile de comprendre qque chose à ton code...

Tes tables ont-elles des clés primaires
(que tu utilisera pour désigner un enregistrement)

As tu créé des relations entre tes tables ?
(qui permettent de lier les factures au client et les détails factures à la bonne facture)
et ton formulaire et sous-formulaire sont-ils bien basé sur ces tables ou une requête basée sur ces
tables ?


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/