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

Signaler
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010
-
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
-
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

Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
Tu peux coller un petit bout de code ou tu dis "Ca c�est bon."
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
Rassure moi, ton contrôle <Me.NbPiecesNC1> n'est pas lié a un numéro auto ?
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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.
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
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
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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.
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

Oups j'ai oublié... mais oui, à chaque NumAuto (soit à chaque controle) il y a un ScorePassage propre.
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
ca peut fonctionner ^^
coche réponse accepté si c good qu'on y revienne plus.

++
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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.
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
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
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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.
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
essaie:

Public gScorePassage As Integer
Public gScorePassageBack As Integer 
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

En effet, en cherchant j'ai remplacé par public et ça marche!!
Merci beaucoup pour votre aide!
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

Et joyeuses fêtes
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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!
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
Ta juste à adapter la solution "public" a ton problème ^^
Messages postés
60
Date d'inscription
mardi 12 juin 2007
Statut
Membre
Dernière intervention
23 décembre 2010

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.
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
C'est un autre sujet, long en apprentissage:
http://warin.developpez.com/access/dao/