Bonjour à tous,
d'abord merci pour ce forum tellement bien fourni, où je trouve en général réponse à chacune de mes questions ! Merci également pour le temps que vous prendrez pour répondre à ma question.
J'ai créé une application permettant la gestion de factures. Pour faire simple, lorsqu'un utilisateur reçoit une facture papier, il encode les différentes données et les montants dans l'application. Pour ce faire, l'utilisateur se loggue et clique alors dans le menu pour attérir sur le formulaire d'encodage, qui contient un sous-formulaire.
Lors du login, l'ID de l'utilisateur et le département auquel il appartient sont enregistrés. Lorsqu'il ouvre le formulaire d'encodage, son ID y est transmis. Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub B_Facture_Click() Dim user As String Dim id As Integer Dim base As DAO.Database Dim rec As DAO.Recordset user = Forms("frm_Connex").txt_user.Value Set base = CurrentDb Set rec = base.OpenRecordset("SELECT * FROM CODING_SHEET_UTILISATEUR WHERE CODING_SHEET_UTILISATEUR.UTIL_USER = '" & user & "'") id = rec("UTIL_ID") DoCmd.OpenForm "frm_encodage", , , , acFormAdd, , id Set rec = Nothing base.Close End Sub
Sur l'évènement "On Load", j'ai alors créé le code suivant :
La procédure "initialiser" dans le code précédent permet de remplir les différentes combobox sur base du département et de l'ID de l'utilisateur. Dans cette fonction se trouve également le code " DoCmd.RunCommand acCmdSaveRecord" pour sauver automatiquement l'enregistrement lorsqu'il est créé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub Form_Load() Dim entite Call Positionner(Me) Me.ShortcutMenu = False entite = DLookup("[TENT_TRIGRAMME]", "CODING_SHEET_TYPE_ENTITE", "[TENT_ID] = " & Forms("frm_connex").txt_entite.Value & "") If IsNull(Me.OpenArgs) Then ' cette procédure est appelée lorsqu'on charge un document à partir d'un formulaire de recherche ' rien à faire Else ' cette procédure est appelée lorsqu'on crée un nouveau document DoCmd.GoToRecord , , acNewRec initialiser End If
Mon problème est le suivant. De manière totalement aléatoire, il arrive que lors de l'ouverture du formulaire, c'est le DERNIER ENREGISTREMENT qui apparaît à l'écran.
Je dispose d'un bouton permettant de passer à un nouvel enregistrement, et en cliquant dessus, là aussi, Access crée bien un nouvel enregistrement, mais il n'y passe pas, il reste sur celui qui est affiché !
En cherchant la cause de ceci, j'ai remarqué qu'Access crée bien un enregistrement (je le vois dans la table), mais il se repositionne sur un autre !
Alors en parcourant ce forum (et d'autres), j'ai trouvé des pistes comme :
- le recordset est en read-only ==> ce n'est pas le cas
- le champ contenant l'id de la facture est "locked" ==> ce n'est pas le cas
- il y a un group by dans le recordset du formulaire ==> ce n'est pas le cas
- la db est en read-only ==> ce n'est pas le cas
- mettre "doevents" après le gotonext ==> ça ne change rien
Je ne comprends vraiment pas d'où vient le problème, surtout que, comme dit plus haut, il arrive de manière TOTALEMENT ALEATOIRE (ou en tout cas, je n'ai encore trouvé aucune logique à la survenance du problème).
Je vous remercie d'avance pour votre aide.
Baudouin
Edit : Après d'autres tests, je remarque qu'en cliquant plusieurs fois sur le bouton pour passer à l'enregistrement suivant, Access finit bien par me fait parvenir à un enregistrement vierge. Ce qui me fait m'arracher encore plus les cheveux..![]()
Partager