Code VB pour écupérer le dernier enregistrement d'une table

Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010 - 23 déc. 2010 à 14:28
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 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.

18 réponses

Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 14:37
Tu peux coller un petit bout de code ou tu dis "Ca c�est bon."
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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

CritereAcceptabilite1.SetFocus
Ac1 = CritereAcceptabilite1.Text

CritereRejet1Valeur.SetFocus
Re1 = CritereRejet1Valeur.Text

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

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

Exit_BtnValider_Click:
Exit Sub

Err_BtnValider_Click:
MsgBox Err.Description
Resume Exit_BtnValider_Click

End Sub
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 14:50
Rassure moi, ton contrôle <Me.NbPiecesNC1> n'est pas lié a un numéro auto ?
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
23 déc. 2010 à 14:52
Non c'est une valeur que je récupère dans le formulaire. Une valeur entrée par l'utilisateur dans le formulaire, indépendante.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 14:57
Le contrôle Me.ScorePassage est lié a un numero auto ?
Tu lis quelque chose pour renseigner Me.ScorePassage dans cette procédure ?

C'est ça que tu veux ??
Me.ScorePassage.value = Me.ScorePassage.value + 2
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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.
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
23 déc. 2010 à 15:05
Oups j'ai oublié... mais oui, à chaque NumAuto (soit à chaque controle) il y a un ScorePassage propre.
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 15:06
ca peut fonctionner ^^
coche réponse accepté si c good qu'on y revienne plus.

++
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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.
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
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
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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.
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 15:35
essaie:

Public gScorePassage As Integer
Public gScorePassageBack As Integer 
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
23 déc. 2010 à 15:41
En effet, en cherchant j'ai remplacé par public et ça marche!!
Merci beaucoup pour votre aide!
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 décembre 2010
23 déc. 2010 à 15:42
Et joyeuses fêtes
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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!
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 16:05
Ta juste à adapter la solution "public" a ton problème ^^
0
Tiatia63 Messages postés 60 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 23 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.
0
Duke49 Messages postés 552 Date d'inscription jeudi 12 octobre 2006 Statut Non membre Dernière intervention 24 janvier 2023 4
23 déc. 2010 à 17:10
C'est un autre sujet, long en apprentissage:
http://warin.developpez.com/access/dao/
0
Rejoignez-nous