Code VB pour écupérer le dernier enregistrement d'une table
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010
-
23 déc. 2010 à 14:28
Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 2023
-
23 déc. 2010 à 17:10
Bonjour,
Je travaille sur access et je cherche un code Visual Basic. Voici mon problème.
J'ai un formulaire qui me permet de rentrer des données sur un contrôle que je récupère dans une table notée « T_ResultatControle ». Chaque contrôle est enregistré sous un numéro auto noté « NumControle ». A chaque ligne, pour chaque NumControle on a plusieurs valeurs associées telle qu'un score de passage noté « ScorePassage ».
Quand je veux faire un nouveau contrôle, j'ouvre mon formulaire, le NumControle s'incrémente de 1 à chaque fois et les autres champs sont vides, j'enregistre les données sur la ligne suivante de ma table. Ca c'est bon.
Si le résultat de mon contrôle noté « Resultat1 » (zone de texte) est = à « accepté » alors je voudrais que mon nouveau score de passage soit incrémenté de la valeur 2 par rapport à mon score de passage précédent (soit pour la ligne NumControle-1). On part avec, au premier contrôle un score de passage de 0.
Mon problème c'est que je ne sais pas comment je peux récupérer la valeur de mon score de passage du précédent contrôle (dans ma table) de manière à lui ajouter la valeur de 2.
Est-ce que vous pourrier m?aider ?
Je vous remercie par avance.
A voir également:
Code VB pour écupérer le dernier enregistrement d'une table
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 14:42
Private Sub BtnResultat1_Click()
'Recherche si le lot est accepté ou non
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim Re1 As Variant
Dim Ac1 As Variant
Set rst = CurrentDb.OpenRecordset("T_Plan", dbOpenDynaset)
rst.FindFirst "IndexEffectif=" & Form_F_Controle.EffectifLot & " AND IndexNQA=" & Form_F_Controle.IndexNQA
Set rst2 = CurrentDb.OpenRecordset("T_ResultatControle", dbOpenDynaset)
If Not rst.NoMatch Then
Me.IndexPlan = rst![Cle_Plan]
If Not rst.NoMatch Then
If Me.NbPiecesNC1 <= Ac1 Then
Me.Resultat1 = "accepté"
Me.Resultat1.ForeColor = 182901
Me.Resultat2 = "accepté"
Me.Resultat2.ForeColor = 182901
'C'est ici que je voudrais ajouter +2 à mon score de passage
End If
If Me.NbPiecesNC1 >= Re1 Then
Me.Resultat1 = "refusé"
Me.Resultat1.ForeColor = RGB(255, 0, 0)
Me.Resultat2 = "refusé"
Me.Resultat2.ForeColor = RGB(255, 0, 0)
Me.ScorePassage.Value = 0
End If
If Me.NbPiecesNC1 > Ac1 And Me.NbPiecesNC1 < Re1 Then
Me.Resultat1 = "Un 2ème échantillon doit être controlé."
Me.Resultat1_Etiquette.Visible = False
Me.ScorePassage.Value = 0
End If
End If
End If
Me.Refresh
'Enregistrement des résultats
On Error GoTo Err_BtnValider_Click
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 15:04
En fait dans ce que j'ai fait actuellement, j'ai simplement mis le champ Me.ScorePassage égal à 0 si Me.Resultat1 = "refusé" ou Me.Resultat1 = "Un 2ème échantillon doit être controlé."
En fait je voudrais retrouver pour la ligne d'avant (correspondant à NumControle-1) la valeur du ScorePassage pour pouvoir l'incrémenter de +2.
Peut être il faudrait que je fasse un champ ScorePassagePrecedent qui me permettrait de récupérer cette valeur et ensuite si Resultat1 "accepté" then Me.ScorePassage Me.ScorePassagePrecedent+2.
Je ne sais pas si j'ai été clair...
Merci.
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 15:10
Ben non parce que justement je ne sais pas comment récupérer dans un champ (zone de texte ScorePassagePrecedent par ex) la valeur correspondant au ScorePassage, de l'enregistrement précédent dans ma table T_ResultatControle.
Duke49
Messages postés552Date d'inscriptionjeudi 12 octobre 2006StatutNon membreDernière intervention24 janvier 20234 23 déc. 2010 à 15:16
Utilise une variable global placé en amont du code, hors d'un SUB ou FUNCTION.
Global gScorePassage As Integer
Global gScorePassageBack As Integer
Private Sub BtnResultat1_Click()
gScorePassage = Me.ScorePassage.Value
gScorePassageBack = gScorePassage -1
If Me.NbPiecesNC1 <= Ac1 Then
Me.ScorePassage.value = gScorePassage + 2
Else
Me.ScorePassage.value = gScorePassageBack
End If
End Sub
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 15:24
Quand je met:
Global gScorePassage As Integer
Global gScorePassageBack As Integer
J'ai une erreur de compilation: des constantes, chaines de longueurs fixe, tableaux, types définis par l'utilisateur et instructions Declare ne sont pas autorisés comme menbres Public de modules objet.
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 15:53
Et non ça ne marche pas! Parce que ça revient à dire
Me.ScorePassage.Value = Me.ScorePassage.Value + 2
et il faudrait
Me.ScorePassage.Value = Me.ScorePassagePrecedent.Value + 2
sachant que Me.ScorePassagePrecedent.Value est totalement indépendant de Me.ScorePassage.Value et n'est surtout par = Me.ScorePassage.Value - 1.
Me.ScorePassagePrecedent.Value doit être égal à la valeur de ScorePassage du précédent contrôle (correspondant au NumControle-1).
Je suis désolée mais si vous pouviez m'aider encore un peu...
Merci d'avance!
Tiatia63
Messages postés60Date d'inscriptionmardi 12 juin 2007StatutMembreDernière intervention23 décembre 2010 23 déc. 2010 à 16:24
Comment je fais pour récupérer la valeur ScorePassage dans ma table T_ResultatControle de l'enregistrement précédent. C'est ça que je n'arrive pas à faire.
Désolée je suis pas très douée. Je débute.
Merci.